第一步:导入pom依赖

<!-- 发送Email -->
<dependency>
    <groupId>javax.mail</groupId>
    <artifactId>mail</artifactId>
    <version>1.4.7</version>
</dependency>

配置 application.yml

email:
  fromEmailSMTPHost: smtp.163.com  # 邮箱服务器地址
  fromEmailAccount: XXXXX@163.com # 邮箱账户
  fromEmailPassword: ZXIFXXXXXXHPXYY # 邮箱 授权码

第三步:添加工具类 EMailUtil.java


import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.*;
import java.io.File;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.util.Properties;

/**
 * @auth zhanghy
 * @date 2021/8/31 11:04
 * @desc 邮件发送工具类
 */
@Component
public class EMailUtil {


    private static String fromEmailSMTPHost;
    private static String fromEmailAccount;
    private static String fromEmailPassword;


    public EMailUtil(@Value("${email.fromEmailSMTPHost}") String host,
                     @Value("${email.fromEmailAccount}") String account,
                     @Value("${email.fromEmailPassword}") String password) {
        fromEmailSMTPHost = host;
        fromEmailAccount = account;
        fromEmailPassword = password;
    }

    /**
     * @return javax.mail.Session
     * @auth zhanghy
     * @date 2021/8/31 11:09
     * @desc 创建发送邮件Session
     */
    public static Session createSession(String fromEmailSMTPHost) {
        // 1. 创建参数配置, 用于连接邮件服务器的参数配置
        Properties props = new Properties();                    // 参数配置
        props.setProperty("mail.transport.protocol", "smtp");   // 使用的协议(JavaMail规范要求)
        props.setProperty("mail.smtp.host", fromEmailSMTPHost);   // 发件人的邮箱的 SMTP 服务器地址
//        props.setProperty("mail.smtp.port","25");
        props.setProperty("mail.smtp.auth", "true");            // 需要请求认证
        props.setProperty("mail.smtp.ssl.enable", "false");
//        props.setProperty("mail.smtp.socketFactory.fallback","false");
//        props.setProperty("mail.smtp.socketFactory.class","javax.net.ssl.SSLSocketFactory");
        // 2. 根据配置创建会话对象, 用于和邮件服务器交互
        Session session = Session.getInstance(props);
        session.setDebug(false);                                 // 设置为debug模式, 可以查看详细的发送 log
        return session;
    }



    public static void main(String[] args) {
        try {
            sendEmail("gogs_csdcb_cn@163.com", // 邮件账户
                    "ZMIFLHWRPXNHPXYY", // 邮件验证码
                    "smtp.163.com", // 邮件服务器地址
                    "好记账", // 邮件发送人
                    "导出账单", // 邮件副标题
                    "<h1 style=\"font-size: 150px\">haohaode</h1>",// 邮件内容
                    new File("D:\\summary\\广告位id类型以及渲染方式.xls")
                    ,
                    "765911824@qq.com");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    /**
     * @return java.lang.Boolean
     * @auth zhanghy
     * @date 2021/8/31 11:56
     * @desc 邮件发送
     * @pram [fromEmailAccount, fromEmailPassword, fromEmailSMTPHost, fromAuth, subject, content, toEmail]
     */
    public static Boolean send(String fromEmailAccount, String fromEmailPassword, String fromEmailSMTPHost,
                               String fromAuth, String subject, String content, String... toEmail) throws Exception {
        return sendEmail(fromEmailAccount, fromEmailPassword, fromEmailSMTPHost, fromAuth, subject, content,null, toEmail);
    }

    /**
     * @return java.lang.Boolean
     * @auth zhanghy
     * @date 2021/8/31 14:15
     * @desc 发送邮件
     * @pram [fromEmailAccount 邮件账户, fromEmailPassword 邮件认证码, fromEmailSMTPHost 邮箱服务器, fromAuth 邮箱发送者, subject 主题, content 发送内容, toEmail 邮件接受者]
     */
    private static Boolean sendEmail(String fromEmailAccount, String fromEmailPassword, String fromEmailSMTPHost, String fromAuth, String subject, String content,File file, String... toEmail) throws Exception {
        Session session = createSession(fromEmailSMTPHost);
        MimeMessage message = createMimeMessage(fromEmailAccount, session, fromAuth, subject, content,file, toEmail);
        Transport transport = session.getTransport();
        transport.connect(fromEmailAccount, fromEmailPassword);
        transport.sendMessage(message, message.getAllRecipients());
        transport.close();
        return true;
    }

    /**
     * @return javax.mail.internet.MimeMessage
     * @auth zhanghy
     * @date 2021/8/31 11:10
     * @desc 创建 Message
     * @pram [javax.mail.Session, java.lang.String, java.lang.String, java.lang.String, java.lang.String...]
     */
    private static MimeMessage createMimeMessage(String fromEmailAccount, Session session, String fromAuth, String subject, String content,File file, String... toEmail) throws Exception {
        // 1. 创建一封邮件
        MimeMessage message = new MimeMessage(session);
        // 2. From: 发件人(昵称有广告嫌疑,避免被邮件服务器误认为是滥发广告以至返回失败,请修改昵称)
        message.setFrom(new InternetAddress(fromEmailAccount, fromAuth, "UTF-8"));

        // 3. To: 收件人(可以增加多个收件人、抄送、密送)
        for (String email : toEmail) {
            message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(email, "峰迪爱撕", "UTF-8"));
        }
        // 4. Subject: 邮件主题(标题有广告嫌疑,避免被邮件服务器误认为是滥发广告以至返回失败,请修改标题)
        message.setSubject(subject, "UTF-8");
        if(file != null){ // 有附件
            Multipart multipart = buildMultipart(content,file);
            message.setContent(multipart);
        }else{ // 没有附件
            // 5. Content: 邮件正文(可以使用html标签)(内容有广告嫌疑,避免被邮件服务器误认为是滥发广告以至返回失败,请修改发送内容)
            message.setContent(content, "text/html;charset=UTF-8");
        }
        // 6. 设置发件时间
        message.setSentDate(new Date());
        // 7. 保存设置
        message.saveChanges();
        return message;
    }
    public static Multipart buildMultipart(String content,File file) throws MessagingException, UnsupportedEncodingException {
        Multipart multipart = new MimeMultipart();
        // 1、设置邮件内容
        MimeBodyPart mimeBodyPart = new MimeBodyPart();
        mimeBodyPart.setContent(content,"text/html;charset=UTF-8");
        multipart.addBodyPart(mimeBodyPart);
        // 2、设置邮件附件
        MimeBodyPart fileMultipart = new MimeBodyPart();
        fileMultipart.setDataHandler(new DataHandler(new FileDataSource(file)));
        fileMultipart.setFileName(MimeUtility.encodeText(file.getName()));
        multipart.addBodyPart(fileMultipart);
        return multipart;
    }
}

 

最后修改于 2021-08-31 14:24:04
如果觉得我的文章对你有用,请随意赞赏
扫一扫支付
上一篇