很多系统都会有群发邮件的业务,但是群发业务需要根据不同的业务,不同的公司和接收方发送不同的邮件,需要根据不同的业务内容和模板组合成完整的一个邮件,而且很多时候邮件在发送前都需要进行略微的修改,本项目是基于ssm框架完成根据数据库内容和模板完成邮件组合,修改邮件模板等内容。

1、准备1.1、开发环境

JDK1.8+IDEA+Maven 3.3.9+MySQL+邮件服务器(由QQ邮箱代替)

1.2、SSM框架

参考我的另一篇博文:最基础的IDEA+SSM+Maven框架整合

2、利用QQ邮箱发送邮件2.1、准备相关jar包

把jar包引入到pom.xml文件:

<dependency>
      <groupId>com.sun.mail</groupId>
      <artifactId>javax.mail</artifactId>
      <version>1.6.2</version>
    </dependency>
2.2、获取QQ邮箱授权码

打开QQ邮箱账户设置:

java 邮件系统 功能思维导图 邮件管理系统基于java_java 邮件系统 功能思维导图

打开smtp服务:

java 邮件系统 功能思维导图 邮件管理系统基于java_List_02

验证授权:

java 邮件系统 功能思维导图 邮件管理系统基于java_邮箱系统_03

获取授权码,用于发送邮件时进行身份验证:

java 邮件系统 功能思维导图 邮件管理系统基于java_java_04

2.3 准备邮件发送工具

因为群发的邮件内容可能会不同,所以结合jar包设置两种不同的模式:多次发送模式(多次调用发送接口)和抄送模式(在一次调用发送接口中,设置抄送邮箱):

import com.mailtemplate.entity.Mail;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Properties;
import javax.mail.Session;
import javax.mail.Transport;
import java.util.ArrayList;
import java.util.List;

/**
 * @Auther: nemo
 * @Date: 19-8-30 21:48
 * @Description: 邮件发送工具
 */
public class MailSendUtil {
    //    smtp服务器
    private String host="smtp.qq.com";

    //    发送人邮箱
    private String sendMail="*****@qq.com";

    //	  发送人昵称
    private String sendName="pomole";

    //    发送邮箱密码
    private String pwd="*******bddcjf";

    //    发送人地址
    private String from="******@qq.com";



//    邮件发送统一管理

    public List<String> SendMailMessage(List<Mail> mailList)throws Exception{
        List<String> messages=new ArrayList<String>();
        for(Mail mail:mailList){
            sendMail(mail);
        }
        return messages;

    }
//    发送邮件接口
    private void sendMail(Mail receiveMail) throws Exception{

        // 1. 创建参数配置, 用于连接邮件服务器的参数配置
        Properties props = new Properties();                    // 参数配置
        props.setProperty("mail.transport.protocol", "smtp");   // 使用的协议(JavaMail规范要求)
        props.setProperty("mail.smtp.host", host);   // 发件人的邮箱的 SMTP 服务器地址
        props.setProperty("mail.smtp.auth", "true");            // 需要请求认证
        
        final String smtpPort = "465";
        props.setProperty("mail.smtp.port", smtpPort);
        props.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
        props.setProperty("mail.smtp.socketFactory.fallback", "false");
        props.setProperty("mail.smtp.socketFactory.port", smtpPort);


        // 2. 根据配置创建会话对象, 用于和邮件服务器交互
        Session session = Session.getDefaultInstance(props);
        session.setDebug(true);                                 // 设置为debug模式, 可以查看详细的发送 log

        // 3. 创建一封邮件
        MimeMessage message = createMessage(session,receiveMail);

        // 4. 根据 Session 获取邮件传输对象
        Transport transport = session.getTransport();

        // 5. 使用 邮箱账号 和 密码 连接邮件服务器, 这里认证的邮箱必须与 message 中的发件人邮箱一致, 否则报错
     
        transport.connect(sendMail, pwd);

        // 6. 发送邮件, 发到所有的收件地址, message.getAllRecipients() 获取到的是在创建邮件对象时添加的所有收件人, 抄送人, 密送人
        transport.sendMessage(message, message.getAllRecipients());

        // 7. 关闭连接
        transport.close();

    }


    /**
     *
     * 功能描述: 创建邮件(不抄送)
     *
     * @param:
     * @return:
     * @auther:
     * @date:
     */
    private MimeMessage createMessage(Session session, Mail mail) throws Exception {
        // 1. 创建一封邮件
        MimeMessage message = new MimeMessage(session);
        // 2. From: 发件人
        message.setFrom(new InternetAddress(sendMail, sendName, "UTF-8"));
        // 3. To: 收件人(可以增加多个收件人、抄送、密送)
        message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(mail.getMail(), mail.getName(), "UTF-8"));
        // 4. Subject: 邮件主题
        message.setSubject(mail.getTheme(), "UTF-8");
        // 5. Content: 邮件正文(可以使用html标签)
        message.setContent(mail.getTemplate() ,"text/html;charset=UTF-8");
        // 6. 设置发件时间
       if(mail.getDate()!=null){
            message.setSentDate(mail.getDate());
        }else{
            message.setSentDate(new Date());
        }
        // 7. 保存设置
        message.saveChanges();

        return message;
    }
}
3、测试
public static void main(String[] args)  throws Exception {
        MailSendUtil mailSendUtil=new MailSendUtil();
        Mail mail=new Mail();
        mail.setMail("*****@qq.com");
        mail.setTheme("theme");
        mail.setTemplate("template");
        mailSendUtil.sendMail(mail);
    }

java 邮件系统 功能思维导图 邮件管理系统基于java_java 邮件系统 功能思维导图_05

参考:Hadoop之路:Java实现邮箱发送验证码(以QQ邮箱为例)

源码:GitHub