我已经阅读了很多关于从android发送html电子邮件的限制.发送html电子邮件的所有建议似乎只是将Html.fromHtml(yourHtmlString)传递给意图为Intent.EXTRA_TEXT.这适用于一些基本标签 - 粗体,斜体 - 但不会像html表那样.
看起来您可以尝试扩展Html的一些功能或实现自己的标签处理程序,但我想知道是否没有更基本的限制会迫使您做一些完全不同的事情(比如使用邮件api或其他东西) ).
我建议这个的原因是因为,就意图本身而言,Html.fromHtml(blah)只是一个charsequence,如果你在这个对象的charsequence接口上调用方法,你就看不到任何html的东西了(at至少我没有).所有的html/tag东西似乎都包含在Html.fromHtml实际返回的SpannableStringBuilder中......我想知道gmail应用程序是否在封面下查看真正的charsequence然后可以处理几个标签,这意味着没有希望在你的应用程序方面做任何事情来获取/欺骗gmail应用程序来处理比粗体,斜体等更复杂的事情.
我查看了gmail应用程序实际发送的原始电子邮件,它自动发送没有标签的text/plain和带有有限数量标签的text/html版本.我甚至尝试坚持使用一些转义的html标签,这些标签最终可能会转换为电子邮件的text/html部分中的实际标签,但是他们仍然逃脱了...这当然有点hacky.
无论如何,对于那些可能更多关注此事的人,我想做一个额外的确认,默认的android"发送html电子邮件"功能会让你疯狂地接近你可能需要的东西,但最后你必须咬子弹并自己实现许多低级别的东西(例如使用JavaMail API在Android中发送电子邮件而不使用默认/内置应用程序,这意味着你必须处理pw的东西等).
注意(稍后):我将从Html.fromHtml返回的SpannableStringBuilder包含一个自定义类,该类扩展了SpannableStringBuilder并将其传递给意图侦听对Spanned接口的调用.事实证明,当事件被写入发送到电子邮件意图的包裹时,TextUtils.writeToParcel会通过首先检查CharSequence是否是Spanned的实例来进行一些特殊检查以根除粗体/斜体,然后要求跨度(通过spanned.getSpans).尽管如此,我认为在进行修改时没有明显的希望来获得像在那里处理的table/td标签一样简单的东西.我甚至尝试修改我的SpannableStringBuilder子类的toString()来返回一些原始表html以查看会发生什么,但它在包裹写入过程中被转移到其他地方.
更多(稍后):TextUtils.writeToParcel(CharSequence cs,Parcel p,...)如果cs是"Spanned"的实例,只有在它们实现"ParcelableSpan"接口时才写入这些跨度...这是"对于将用作文本跨度"和"的对象的一种特殊的Parcelable只能由框架中的代码使用;它不适用于应用程序实现自己的Parcelable跨度".所以,即使你想要挂钩并写自己来处理表标签或其他什么,似乎也不鼓励.男人,我希望hackbod会在这里与我错过的一些明显的东西相比.
我正在制作一个应用程序,允许用户拍照并通过电子邮件自动发送到他选择的电子邮件.到目前为止,我能够拍照并存储在SD卡中.现在我只需要从文件夹(/ sdcard/Pictures/PhotoSender /)获取图片的功能,并自动发送到用户请求的电子邮件.我怎样才能做到这一点?
我在那个文件夹中有图片.我只需要一些函数来生成电子邮件,将图片(.jpg)作为附件发送(所有这些都在背景上).当电子邮件完全发送时,应该弹出一个"上传完成"的Toast.同时用户应该可以自由拍摄更多照片,因此上传请求应该放在队列中.用户不应使用他的电子邮件帐户登录发送.如果需要,我可以为我的应用创建一个电子邮件帐户作为"发件人".请帮我!
email android email-attachments android-intent android-service
在我的Android应用程序中,我可以使用以下方法以编程方式打开包含To,Subject和Message的默认电子邮件编辑器:
Intent emailIntent=new Intent(Intent.ACTION_SEND);
emailIntent.putExtra(Intent.EXTRA_EMAIL, toemail);
emailIntent.putExtra(Intent.EXTRA_SUBJECT, subject);
emailIntent.putExtra(Intent.EXTRA_TEXT, body);
emailIntent.setType("text/plain");
emailIntent.setClassName("com.android.email", "com.android.email.activity.MessageCompose");
startActivity(emailIntent);
Run Code Online (Sandbox Code Playgroud)
这很好用,但是我需要在我的应用中等待,直到用户完成电子邮件屏幕,并且还知道电子邮件是发送还是丢弃.
有人知道怎么做吗?
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.SendFailedException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
private void sendMail() throws MessagingException{
String host = "smtp.gmail.com";
String password = "abcde12345";
String from = "testing@gmail.com";
String toAddress = email;
String filename = Environment.getExternalStorageDirectory() + "/jam.jpg";
Properties properties = System.getProperties();
properties.put("mail.smtp.host", host);
properties.put("mail.smtps.auth", true);
properties.put("mail.smtp.starttls.enable", true);
Session session = Session.getInstance(properties, null);
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
message.setRecipients(Message.RecipientType.TO, toAddress);
message.setSubject("Anti-Theft Attachment");
BodyPart messageBodyPart = new MimeBodyPart(); …Run Code Online (Sandbox Code Playgroud) 我想使用用户已设置的任何默认邮件提供商在我的应用程序中发送电子邮件.必须可以发送电子邮件而无需任何用户交互.如果我可以避免显示任何UI,那将是最好的解决方案.不可接受的一件事是硬编码或请求用户输入他们的电子邮件凭证.用户必须已使用凭据设置其帐户,例如Gmail.我的所有应用程序都使用已设置的现有电子邮件提供商.
我在这里找到的大多数帖子都使用了Intent,但据我所知,这将显示电子邮件用户界面并要求用户按下发送按钮.
我一直在尝试编写一个定期解析gmail消息内容的应用程序.我已经阅读了JavaMail常见问题解答,我已经查看了JavaMail下载包中的一些示例,但是无法使其工作.下面的代码当前导致以下gmail错误:
主持人尚未解决:imaps.gmail.com:993
我也试过imap.gmail.com:143但得到:
主持人尚未解决:imap.gmail.com:143
任何帮助或建议将不胜感激.GMailReader是我用来尝试返回gmail imap消息的类:
public class GMailReader extends javax.mail.Authenticator {
private String mailhost = "imaps.gmail.com";
private String user;
private String password;
private Session session;
public GMailReader(String user, String password) {
this.user = user;
this.password = password;
Properties props = new Properties();
props.setProperty("mail.transport.protocol", "imaps");
props.setProperty("mail.imaps.host", mailhost);
props.put("mail.imaps.auth", "true");
props.put("mail.imaps.port", "993");
props.put("mail.imaps.socketFactory.port", "993");
props.put("mail.imaps.socketFactory.class",
"javax.net.ssl.SSLSocketFactory");
props.put("mail.imaps.socketFactory.fallback", "false");
props.setProperty("mail.imaps.quitwait", "false");
session = Session.getDefaultInstance(props, this);
}
public synchronized Message[] readMail() throws Exception {
try {
Store store = session.getStore("imaps");
store.connect("imaps.gmail.com", user, password); …Run Code Online (Sandbox Code Playgroud) 我的问题是如何设置多个SMTP服务器在Android中发送邮件如:雅虎,hotmail,gmail,rediff任何类型的域将在发送邮件时工作.任何人都可以建议任何网站或任何想法吗?
请帮帮我,谢谢你.
动机:我正在创建注册活动,我需要在按钮单击下发送自动电子邮件.我已经关注了一些博客,stackoverflow问题,并且无法发送电子邮件到目前为止.
工作环境: Android Studio 1.2 Beta 3
当前关注的问题:使用JavaMail API在Android中发送电子邮件,而不使用默认/内置应用程序
现在这就是我所做的:
下载了三个Jar文件
然后我在follwoing文件夹中复制了三个jar文件:
G:\ Android Projects\Email\app\libs \
复制文件后,我通过指向Android Studio中的"Project Explorer"找到我的.jar文件,然后将我的树视图从"Android"更改为"Project"
然后展开树Project> app> libs>
找到文件后; 在我做的每个.jar文件上:右键单击 - >添加为库
一旦完成了graddle构建,我就会复制上面的代码,然后问题并运行到我自己的项目中.它编译没有任何错误.
现在的问题是:
当我运行程序时,它显示一个Toast消息"电子邮件已成功发送",但我从未收到电子邮件,也没有任何已发送的邮件在我的帐户中.
这是我所有类和.xml文件的所有代码
MainActivity.java
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button send = (Button)findViewById(R.id.send_email);
send.setOnClickListener(new View.OnClickListener() {
public void onClick(View …Run Code Online (Sandbox Code Playgroud) 我有gmail和yahoo工作,但不是hotmail.这就是我拥有的,我做错了什么?
private String mailhost = "smtp.live.com";
public hotmailSenderActivity(String user, String password) {
this.user = user;
this.password = password;
//This connects to the actual mailserver
Security.addProvider(new com.provider.JSSEProvider());
Properties props = new Properties();
props.setProperty("mail.transport.protocol", "smtp");
props.setProperty("mail.host", mailhost);
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.port", "587");
props.put("mail.smtp.socketFactory.port", "587");
props.put("mail.smtp.socketFactory.class",
"javax.net.ssl.SSLSocketFactory");
props.put("smtp.starttls.enable", "true");
props.put("mail.smtp.socketFactory.fallback", "false");
props.setProperty("mail.smtp.quitwait", "false");
session = Session.getDefaultInstance(props, this);
Run Code Online (Sandbox Code Playgroud)
我尝试过端口25 + 587没有SSL的东西.我已尝试使用SSL端口465.电子邮件和密码是正确的(我已经硬编码确定).
我没有收到任何错误......那么问题是什么?