Android应用使用JavaMail发送邮件

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我。我想一般也没有必要,我都是测试过的。应该能发送成功。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值