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

文章目录

    • 背景
      • 什么是JavaMail
    • 前置条件
      • 申请开通邮局服务(QQ为例)
    • Java工程
      • 下载依赖组件
      • 核心代码
    • 发送结果
    • 总结

背景

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

什么是JavaMail

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

前置条件

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

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

  1. 进入QQ邮箱–》设置–》POP3/IMAP --》开启服务
    如何使用Java Mail发邮件(包括单发和群发),含演示代码下载_第1张图片

  2. 使用手机,发送开通短信,开启服务
    如何使用Java Mail发邮件(包括单发和群发),含演示代码下载_第2张图片

  3. 开通成功,记下授权码
    如何使用Java Mail发邮件(包括单发和群发),含演示代码下载_第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 表示成功;
* 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 = "发送人的邮箱"; //如[email protected] String password = "邮箱的授权密码"; String host = "邮箱主机";//如smtp.qq.com String from = "发件人的邮箱"; //如[email protected] String to = "收件人的邮箱"; //支持群发,可以写多个收件邮箱,如 [email protected];[email protected] String subject = "java 发送邮件测试"; //邮箱内容 StringBuffer sb = new StringBuffer(); String yzm = Long.toString(System.currentTimeMillis()); sb.append("" + "
温馨提示:" + "
欢迎xx系统,您的注册码为:

" + yzm + "


本邮件由系统自动发出,请勿回复。
感谢您的使用。
xx网络科技公司
"
+ "
"
); 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(); } }

发送结果

如何使用Java Mail发邮件(包括单发和群发),含演示代码下载_第4张图片
登录收件人的邮箱,里可看到 测试代码发出的邮件收到了。

总结

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

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

你可能感兴趣的:(java,java,开发语言)