Android项目开发需求,不能使用系统的意图邮件发送方式,需要自定义发送格式。所以想到了Java API中是否有发送邮件的方法。先网上搜一下吧,javaMail,Google上一搜,讲解,代码,真心不少,但是找了一个试试,发送不成功,再找一个复制过来还是有点问题。唉,真是废了不少时间,我想说网上贴代码的不一定都是好心。看了好多资料,还不如照着网上找的资料,自己去改改试试。因为找到的代码几乎都是重复的,其实流程都已经很清楚了。
现在呢,经过修改,调试,终于发送成功了。所以在这里分享给大家。
MessageInfo mailInfo = new MessageInfo();
if (MAIL_SEND_WAY == MAIL_SEND_WAY_QQ) {
mailInfo.setMailServerHost("smtp.qq.com");
} else if (MAIL_SEND_WAY == MAIL_SEND_WAY_163) {
mailInfo.setMailServerHost("smtp.163.com");
}
mailInfo.setMailServerPort("25");
mailInfo.setValidate(true);//是否需要验证用户名和密码
mailInfo.setUserName(username.getText().toString().trim());
mailInfo.setPassword(password.getText().toString().trim());
mailInfo.setFromAddress(username.getText().toString()
.trim());
mailInfo.setToAddress(receiver.getText().toString().trim());
mailInfo.setSubject(subject.getText().toString().trim());
mailInfo.setContent(body.getText().toString().trim());
mailInfo.setAttachFileNames(new String[] { nativeFilePath });
MailSenderUtils sms = new MailSenderUtils();
// sms.sendTextMail(mailInfo);
sendResult = sms.sendMail(mailInfo);
handler.sendEmptyMessage(10);
以上是监听发送按钮,收集数据,调用发送工具发送邮件,在子线程完成。其中MessageInfo是自己封装出来的发送邮件需要的内容和配置信息。主要需要设置的信息有,发送者邮箱的用户名,邮箱密码,接收者邮箱,主题,正文内容,附件(如果想附加的话),服务器host地址,服务器监听端口,一般都服务器都是在25端口监听。MailSenderUtils就是自己封装出来的发送邮件的工具(其实很多代码都是从网上copy过来的)。
下面看一下发送工具里的代码:
// 判断是否需要身份认证
MyAuthenticator authenticator = null;
Properties pro = mailInfo.getProperties();
// 如果需要身份认证,则创建一个密码验证器
if (mailInfo.isValidate()) {
authenticator = new MyAuthenticator(mailInfo.getUserName(),
mailInfo.getPassword());
}
// 根据邮件会话属性和密码验证器构造一个发送邮件的session
Session sendMailSession = Session
.getDefaultInstance(pro, authenticator);
// 根据session创建一个邮件消息
Message mailMessage = new MimeMessage(sendMailSession);
// 创建邮件发送者地址
Address from = new InternetAddress(mailInfo.getFromAddress());
// 设置邮件消息的发送者
mailMessage.setFrom(from);
// 创建邮件的接收者地址,并设置到邮件消息中
Address to = new InternetAddress(mailInfo.getToAddress());
// Message.RecipientType.TO属性表示接收者的类型为TO
mailMessage.setRecipient(Message.RecipientType.TO, to);
// 设置邮件消息的主题
mailMessage.setSubject(mailInfo.getSubject());
// 设置邮件消息发送的时间
mailMessage.setSentDate(new Date());
// MiniMultipart类是一个容器类,包含MimeBodyPart类型的对象
Multipart mainPart = new MimeMultipart();
// 创建一个包含HTML内容的MimeBodyPart
BodyPart html = new MimeBodyPart();
if (null != mailInfo.getAttachFileNames()) {
for (int i = 0; i < mailInfo.getAttachFileNames().length; i++) {
File file = new File(mailInfo.getAttachFileNames()[i]);
MimeBodyPart mbp = new MimeBodyPart();
mbp.attachFile(file);
mainPart.addBodyPart(mbp);
}
}
// 设置邮件正文内容,使其支持html标签
html.setContent(mailInfo.getContent(), "text/html; charset=utf-8");
mainPart.addBodyPart(html);
// 将MiniMultipart对象设置为邮件内容
mailMessage.setContent(mainPart);
// 发送邮件
Transport.send(mailMessage);
注释写的很清楚,这里是从别人代码里copy的,自己添加了支持附件传送。
最后发送成功,喽一眼截图:
当然看这些都不如有源码,然后运行到手机上一试。想看源码的同志,下载地址:
http://download.csdn.net/detail/wangduanqing5945/6454451需要积分3分,毕竟花了我一点时间的,如果没有分的同志,或者运行源码不能发送成功的,1181219972,QQ我。我想一般也没有必要,我都是测试过的。应该能发送成功。
分享到:
相关推荐
此源码是使用javamail发送邮件,可以实现静默发送邮件,可以发送附件资源等。有相应的使用说明,快捷好用
Android中使用JavaMail发送电子邮件
android使用javamail发送邮件jar包,可以直接导入到Android studio使用
使用JAVAMail代发邮件 资源源于不但搜索,自由源于不但努力
Android用JavaMail发送邮件
http://stackoverflow.com/questions/2020088/sending-email-in-android-using-javamail-api-without-using-the-default-android-app的源码,已实现可发送邮件。
javaMail发送邮件 发送成功 收不到邮件 或收到邮件无主题无收件人乱码 查看debug 邮件处理过程发现邮件头没有编译, 内容是base64编码,所以邮箱收不到或者收到的是base64编码后的一堆乱码,
java使用javaMail发送邮件,包含项目源文件及jar包。
Android使用JavaMail开发邮箱最新jar包集合
在Android上使用JavaMail发送邮件,可以发送附件。 使用了 mail.jar activation.jar additional.jar
javamail发送邮件实例 javamail 发送邮件 文本编辑器 kindeditor
Struts2框架,javamail发送邮件,可以直接用main()调用,也可通过tomcat,在IE上运行,比较简单易懂。
JAVA100例之实例47 使用javamail发送邮件
Javamail发送邮件类库,Java发送邮件需要用到该类库
java 发邮件java 发邮件java 发邮件java 发邮件
利用JavaMail发送邮件的实例,可以直接运行
使用JavaMail发送邮件,可以发送附件,邮件的内容也可以是html格式的。在工作中做的小demo
Spring Use JavaMail SendEmail(spring使用javamail发送邮件的例子)
NULL 博文链接:https://techpool.iteye.com/blog/502399