如何使用Java Mail发邮件(包括单发和群发),含演示代码下载

背景

在我们做业务系统开发时时,经常会用到 邮件发送的场景,如 通过邮件通知给注册用户有关注册码的内容,或者 管理的某些设备有告警了,需要邮件通知相关维护人员及时处理相关设备,还有 使用的会员服务已经到期了,用邮件通知给用户等等。 在java 世界里如何发邮件,有很多种方法,下面将围绕 java mail 来做功能的实现。

什么是JavaMail

JavaMail,顾名思义,提供给开发者处理电子邮件相关的编程接口。它是Sun发布的用来处理email的API。它可以方便地执行一些常用的邮件传输。我们可以基于JavaMail开发出类似于Microsoft Outlook的应用程序。

前置条件

要想通过 java 代码发送邮件,首先需要开通你邮箱的邮局服务,下面以QQ 邮箱为例,说一下开通步骤。

申请开通邮局服务(QQ为例)

  1. 进入QQ邮箱–》设置–》POP3/IMAP --》开启服务
    开启服务

  2. 使用手机,发送开通短信,开启服务
    密保短信

  3. 开通成功,记下授权码
    授权码
    获得授权码,把它拷贝出来,后面的JAVA代码需要用到这个授权码。

Java工程

下载依赖组件

我们将使用 JavaMail 进行邮件方面的处理, Maven的依赖配置如下:

		<dependency>
		    <groupId>com.sun.mail</groupId>
		    <artifactId>javax.mail</artifactId>
		    <version>1.6.2</version>
		</dependency>

核心代码

public class MailUtil {
	private static final Logger LOG = LoggerFactory.getLogger(MailUtil.class); 
	
	/**
	 * 发送邮件 
	 * @param user
	 *            发件人邮箱
	 * @param password
	 *            邮箱授权码
	 * @param host
	 *            host
	 * @param from
	 *            发件人
	 * @param toArray
	 *            接收者邮箱数组
	 * @param subject
	 *            邮件主题
	 * @param content
	 *            邮件内容
	 * @return CommonProcResult.code = 0 表示成功;<br/>
	 * 		      CommonProcResult.code != 0 表示失败,失败原因可以看 CommonProcResult.desc
	 */
	public CommonProcResult sendMail(String user, String password, String host,
			String from, String[] toArray, String subject, String content) {
		
		CommonProcResult ret = CommonProcResultFactroy.makeResultForInnerError("未实现.");
		
		try {
			if (null !=  toArray  && toArray.length > 0) {
				Properties props = System.getProperties();

				// 选择服务类型
				props.put("mail.smtp.host", host);
				// 设置服务器验证
				props.put("mail.smtp.auth", "true");
				// 设置传输协议
				props.put("mail.transport.protocol", "smtp");

				MailAuthenticator auth = new MailAuthenticator(user, password);

				Session session = Session.getInstance(props, auth);
				//session.setDebug(true);
				session.setDebug(false);

				MimeMessage message = new MimeMessage(session);
				message.setFrom(new InternetAddress(from));
				
				//邮件接收方
				int len= toArray.length;  
			    InternetAddress address[]=new InternetAddress[len];  
				for (int i = 0; i < toArray.length; i++) {
					address[i]=new InternetAddress(toArray[i]);
				}
				message.addRecipients(Message.RecipientType.TO, address);				
				
				// 主题
				message.setSubject(subject);
				
				// 正文
				MimeBodyPart mbp1 = new MimeBodyPart();
				mbp1.setContent(content, "text/html;charset=utf-8");
				// 整个邮件:正文+附件
				Multipart mp = new MimeMultipart();
				mp.addBodyPart(mbp1);
				message.setContent(mp);
				message.setSentDate(new Date());
				message.saveChanges();

				// Transport trans = session.getTransport("smtp");
				Transport.send(message);

				//System.out.println("send mail ok:"  + message.toString());

				ret = CommonProcResultFactroy.makeResultForOk("");

			} else {
				ret = CommonProcResultFactroy.makeResultForInvalidParamValue(" toArray");
			}

		} catch (Exception e) {
			LOG.error("An exception has been occured when send email. Exception=" + e.getMessage());
			ret = CommonProcResultFactroy.makeResultForInnerException(e.getMessage());
			e.printStackTrace();
		}
		
		return ret;
	}

	//测试代码
	public static void main(String[] args) {
		MailUtil operation = new MailUtil();
		String user = "发送人的邮箱";	//如xxxxxxx@qq.com
		String password = "邮箱的授权密码";
		String host = "邮箱主机";//如smtp.qq.com
		String from = "发件人的邮箱";	//如xxxxxxx@qq.com

		String to = "收件人的邮箱";  //支持群发,可以写多个收件邮箱,如  bbbbbb@yeah.net;ccccccc@qq.com
		String subject = "java 发送邮件测试";
		//邮箱内容
		StringBuffer sb = new StringBuffer();
		String yzm = Long.toString(System.currentTimeMillis());

		sb.append("<!DOCTYPE>"
						+ "<div bgcolor='#f1fcfa'   style='border:1px solid #d9f4ee; font-size:14px; line-height:22px; color:#005aa0;padding-left:1px;padding-top:5px;   padding-bottom:5px;'><span style='font-weight:bold;'>温馨提示:</span>"
						+ "<div style='width:950px;font-family:arial;'>欢迎xx系统,您的注册码为:<br/><h2 style='color:green'>"
						+ yzm
						+ "</h2><br/>本邮件由系统自动发出,请勿回复。<br/>感谢您的使用。<br/>xx网络科技公司</div>"
						+ "</div>");
		try {
			String[] toArray = to.split(";");
			
			CommonProcResult ret = operation.sendMail(user, password, host, from, toArray, subject, sb.toString());
			
			System.out.println("ret code=" + ret.getCode() + ", ret desc=" +   ret.getDesc());
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

发送结果

发送结果
登录收件人的邮箱,里可看到 测试代码发出的邮件收到了。

总结

使用JavaMail可以很方便的在Java客户端实现 发邮件的功能,另外很好的实现了JavaMail API的框架还有James、Spring Mail。

需要完整演示代码的可点击下方。
完整程序代码下载
注意:程序代码需要代入你的邮箱信息才能正确工作。

  • 38
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 22
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码递夫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值