您的位置:首页 > 移动开发 > Android开发

Android应用使用JavaMail发送邮件

2013-10-25 20:09 721 查看
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我。我想一般也没有必要,我都是测试过的。应该能发送成功。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: