Spring Boot 使用JavaMailSenderImpl轻松发邮件(EmailUtil)

  EmailUtil 类封装了发送邮件的功能,提供了三种不同的邮件发送方法,支持发送纯文本或 HTML 格式的邮件,并且可以选择是否添加附件。它借助 Spring 框架的 JavaMailSenderImpl 类来完成邮件的发送操作。

一、SendMail 方法

       1.初始化邮件发送器:创建 JavaMailSenderImpl 实例,设置邮件默认编码、邮件服务器地址、端口、发件人邮箱地址、密码、协议。
        2.配置邮件属性:创建 Properties 对象,设置连接超时、SMTP 操作超时、写入超时、SMTP 认证、TLS 加密等属性,并将其设置到 JavaMailSenderImpl 中。
        3.创建邮件消息:创建 MimeMessage 实例和 MimeMessageHelper 实例,设置发件人、收件人、主题、正文。
        4.发送邮件:调用 JavaMailSenderImpl 的 send 方法发送邮件。

public class EmailUtil {
    // 连接超时时间,单位为毫秒
    private int connectionTimeout = 5000;
    // SMTP 操作超时时间,单位为毫秒
    private int smtpTimeout = 3000;
    // 写入超时时间,单位为毫秒
    private int writeTimeout = 10000;
    // 是否启用 TLS 加密
    private boolean ttlsEnable = true;
    // 是否要求必须使用 TLS 加密
    private boolean ttlsRequired = true;
    // 是否需要进行 SMTP 认证
    private boolean smtpAuth = true;

    /**
     * 发送邮件的方法,不包含附件
     * @param stmpServer 邮件服务器地址
     * @param stmpPort 邮件服务器端口
     * @param fromEmail 发件人邮箱地址
     * @param fromNickname 发件人昵称
     * @param fromPass 发件人邮箱密码或授权码
     * @param toEmail 收件人邮箱地址
     * @param emailSubject 邮件主题
     * @param emailBody 邮件正文
     * @return 发送成功返回 true,失败返回 false
     */
    public boolean SendMail(String stmpServer, int stmpPort, String fromEmail, String fromNickname, String fromPass, String toEmail, String emailSubject, String emailBody) {
        boolean flag = false;
        try {
            // 创建 JavaMailSenderImpl 实例,用于发送邮件
            JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl();
            // 设置邮件默认编码为 UTF-8
            javaMailSender.setDefaultEncoding("utf-8");
            // 设置邮件服务器地址
            javaMailSender.setHost(stmpServer);
            // 设置邮件服务器端口
            javaMailSender.setPort(stmpPort);
            // 设置发件人邮箱地址
            javaMailSender.setUsername(fromEmail);
            // 设置发件人邮箱密码或授权码
            javaMailSender.setPassword(fromPass);
            // 设置邮件发送协议为 smtps
            javaMailSender.setProtocol("smtps");

            // 创建 Properties 对象,用于配置邮件发送的相关属性
            Properties properties = new Properties();
            // 设置连接超时时间
            properties.put("mail.smtp.connectiontimeout", connectionTimeout);
            // 设置 SMTP 操作超时时间
            properties.put("mail.smtp.timeout", smtpTimeout);
            // 设置写入超时时间
            properties.put("mail.smtp.writetimeout", writeTimeout);
            // 设置是否需要进行 SMTP 认证
            properties.put("mail.smtp.auth", smtpAuth);
            // 设置是否启用 TLS 加密
            properties.put("mail.smtp.starttls.enable", ttlsEnable);
            // 设置是否要求必须使用 TLS 加密
            properties.put("mail.smtp.starttls.required", ttlsRequired);
            // 将配置属性设置到 JavaMailSenderImpl 中
            javaMailSender.setJavaMailProperties(properties);

            // 创建 MimeMessage 实例,用于表示邮件消息
            MimeMessage message = javaMailSender.createMimeMessage();
            // 创建 MimeMessageHelper 实例,用于辅助构建邮件消息
            MimeMessageHelper helper = new MimeMessageHelper(message, false);
            // 设置发件人邮箱地址和昵称
            helper.setFrom(fromEmail, fromNickname);
            // 设置收件人邮箱地址
            helper.setTo(toEmail);
            // 设置邮件主题
            helper.setSubject(emailSubject);
            // 设置邮件正文,第二个参数表示是否是 HTML 格式的正文
            helper.setText(emailBody, true);
            // 调用 JavaMailSenderImpl 的 send 方法发送邮件
            javaMailSender.send(message);
            // 若发送成功,将标志位设置为 true
            flag = true;
        } catch (Exception ex) {
            // 若发送失败,将标志位设置为 false
            flag = false;
            // 打印异常堆栈信息
            ex.printStackTrace();
        }
        return flag;
    }

}

二、SendEMail 方法(无附件)

        该方法与 SendMail 方法的操作步骤基本一致,只是可以通过参数指定邮件正文是否为 HTML 格式。

public class EmailUtil {
    // 连接超时时间,单位为毫秒
    private int connectionTimeout = 5000;
    // SMTP 操作超时时间,单位为毫秒
    private int smtpTimeout = 3000;
    // 写入超时时间,单位为毫秒
    private int writeTimeout = 10000;
    // 是否启用 TLS 加密
    private boolean ttlsEnable = true;
    // 是否要求必须使用 TLS 加密
    private boolean ttlsRequired = true;
    // 是否需要进行 SMTP 认证
    private boolean smtpAuth = true;


    /**
     * 发送邮件的方法,不包含附件,可指定正文是否为 HTML 格式
     * @param smtpServer 邮件服务器地址
     * @param smtpPort 邮件服务器端口
     * @param fromEmail 发件人邮箱地址
     * @param fromPass 发件人邮箱密码或授权码
     * @param nickName 发件人昵称
     * @param toEmail 收件人邮箱地址
     * @param subject 邮件主题
     * @param content 邮件正文
     * @param isHtml 邮件正文是否为 HTML 格式
     * @return 发送成功返回 true,失败返回 false
     */
    public boolean SendEMail(String smtpServer, int smtpPort, String fromEmail, String fromPass, String nickName, String toEmail, String subject, String content, boolean isHtml) {
        boolean result = false;
        try {
            // 创建 JavaMailSenderImpl 实例,用于发送邮件
            JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl();
            // 设置邮件默认编码为 UTF-8
            javaMailSender.setDefaultEncoding("utf-8");
            // 设置邮件服务器地址
            javaMailSender.setHost(smtpServer);
            // 设置邮件服务器端口
            javaMailSender.setPort(smtpPort);
            // 设置发件人邮箱地址
            javaMailSender.setUsername(fromEmail);
            // 设置发件人邮箱密码或授权码
            javaMailSender.setPassword(fromPass);
            // 设置邮件发送协议为 smtps
            javaMailSender.setProtocol("smtps");

            // 创建 Properties 对象,用于配置邮件发送的相关属性
            Properties properties = new Properties();
            // 设置连接超时时间
            properties.put("mail.smtp.connectiontimeout", connectionTimeout);
            // 设置 SMTP 操作超时时间
            properties.put("mail.smtp.timeout", smtpTimeout);
            // 设置写入超时时间
            properties.put("mail.smtp.writetimeout", writeTimeout);
            // 设置是否需要进行 SMTP 认证
            properties.put("mail.smtp.auth", smtpAuth);
            // 设置是否启用 TLS 加密
            properties.put("mail.smtp.starttls.enable", ttlsEnable);
            // 设置是否要求必须使用 TLS 加密
            properties.put("mail.smtp.starttls.required", ttlsRequired);
            // 将配置属性设置到 JavaMailSenderImpl 中
            javaMailSender.setJavaMailProperties(properties);

            // 创建 MimeMessage 实例,用于表示邮件消息
            MimeMessage message = javaMailSender.createMimeMessage();
            // 创建 MimeMessageHelper 实例,用于辅助构建邮件消息
            MimeMessageHelper helper = new MimeMessageHelper(message, false);
            // 设置发件人邮箱地址和昵称
            helper.setFrom(fromEmail, nickName);
            // 设置收件人邮箱地址
            helper.setTo(toEmail);
            // 设置邮件主题
            helper.setSubject(subject);
            // 设置邮件正文,第二个参数表示是否是 HTML 格式的正文
            helper.setText(content, isHtml);
            // 调用 JavaMailSenderImpl 的 send 方法发送邮件
            javaMailSender.send(message);
            // 若发送成功,将标志位设置为 true
            result = true;
        } catch (Exception ex) {
            // 若发送失败,将标志位设置为 false
            result = false;
        }
        return result;
    }

}

三、SendEMail 方法(有附件)

        1.初始化邮件发送器和配置属性:与前面两个方法相同。
        2.创建邮件消息:创建 MimeMessage 实例和 MimeMessageHelper 实例,设置发件人、收件人、主题、正文。
        3.添加附件:遍历附件列表,将每个附件的文件名和文件路径获取出来,创建 FileSystemResource 实例,然后使用 MimeMessageHelper 的 addAttachment 方法将附件添加到邮件中。
        4.发送邮件:调用 JavaMailSenderImpl 的 send 方法发送邮件。

public class EmailUtil {
    // 连接超时时间,单位为毫秒
    private int connectionTimeout = 5000;
    // SMTP 操作超时时间,单位为毫秒
    private int smtpTimeout = 3000;
    // 写入超时时间,单位为毫秒
    private int writeTimeout = 10000;
    // 是否启用 TLS 加密
    private boolean ttlsEnable = true;
    // 是否要求必须使用 TLS 加密
    private boolean ttlsRequired = true;
    // 是否需要进行 SMTP 认证
    private boolean smtpAuth = true;

    /**
     * 发送邮件的方法,包含附件
     * @param smtpServer 邮件服务器地址
     * @param smtpPort 邮件服务器端口
     * @param fromEmail 发件人邮箱地址
     * @param fromPass 发件人邮箱密码或授权码
     * @param nickName 发件人昵称
     * @param toEmail 收件人邮箱地址
     * @param subject 邮件主题
     * @param content 邮件正文
     * @param isHtml 邮件正文是否为 HTML 格式
     * @param attachments 附件列表
     * @return 发送成功返回 true,失败返回 false
     */
    public boolean SendEMail(String smtpServer, int smtpPort, String fromEmail, String fromPass, String nickName, String toEmail, String subject, String content, boolean isHtml, List<Attachment> attachments) {
        boolean flag = false;
        try {
            // 创建 JavaMailSenderImpl 实例,用于发送邮件
            JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl();
            // 设置邮件默认编码为 UTF-8
            javaMailSender.setDefaultEncoding("utf-8");
            // 设置邮件服务器地址
            javaMailSender.setHost(smtpServer);
            // 设置邮件服务器端口
            javaMailSender.setPort(smtpPort);
            // 设置发件人邮箱地址
            javaMailSender.setUsername(fromEmail);
            // 设置发件人邮箱密码或授权码
            javaMailSender.setPassword(fromPass);
            // 设置邮件发送协议为 smtps
            javaMailSender.setProtocol("smtps");

            // 创建 Properties 对象,用于配置邮件发送的相关属性
            Properties properties = new Properties();
            // 设置连接超时时间
            properties.put("mail.smtp.connectiontimeout", 5000);
            // 设置 SMTP 操作超时时间
            properties.put("mail.smtp.timeout", 3000);
            // 设置写入超时时间
            properties.put("mail.smtp.writetimeout", "5000");
            // 设置是否需要进行 SMTP 认证
            properties.put("mail.smtp.auth", true);
            // 设置是否启用 TLS 加密
            properties.put("mail.smtp.starttls.enable", true);
            // 设置是否要求必须使用 TLS 加密
            properties.put("mail.smtp.starttls.required", true);
            // 将配置属性设置到 JavaMailSenderImpl 中
            javaMailSender.setJavaMailProperties(properties);

            // 创建 MimeMessage 实例,用于表示邮件消息
            MimeMessage message = javaMailSender.createMimeMessage();
            // 创建 MimeMessageHelper 实例,用于辅助构建邮件消息,第二个参数 true 表示支持附件
            MimeMessageHelper helper = new MimeMessageHelper(message, true);
            // 设置发件人邮箱地址和昵称
            helper.setFrom(fromEmail, nickName);
            // 设置收件人邮箱地址
            helper.setTo(toEmail);
            // 设置邮件主题
            helper.setSubject(subject);
            // 设置邮件正文,第二个参数表示是否是 HTML 格式的正文
            helper.setText(content, isHtml);

            // 遍历附件列表,将附件添加到邮件中
            for (Attachment attachment : attachments) {
                // 获取附件文件名
                String fileName = attachment.getFileName();
                // 获取附件文件路径
                String filePath = attachment.getFilePath();
                // 创建 FileSystemResource 实例,用于表示附件文件
                FileSystemResource file = new FileSystemResource(filePath);
                // 将附件添加到邮件中
                helper.addAttachment(fileName, file);
                // 打印夹带附件的信息
                Printer.Print("夹带附件:"+filePath);
            }
            // 调用 JavaMailSenderImpl 的 send 方法发送邮件
            javaMailSender.send(message);
            // 若发送成功,将标志位设置为 true
            flag = true;
        } catch (Exception e) {
            // 若发送失败,将标志位设置为 false
            flag = false;
        }
        return flag;
    }
}

通过以上内容便可轻轻松松发邮件.是不是超级简单.有任何问题欢迎留言哦!!!

重点!重点!重点!

遇到问题不用怕不如来我的知识库找找看,也许有意想不到的收获!!!

易网时代-易库资源-易库教程:.NET开发、Java开发、PHP开发、SqlServer技术、MySQL技术-开发资料大全-易网时代-易库资源-易库教程 (escdns.com)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值