【SpringBoot】邮件发送


前言

Spring中提供了JavaMailSender用来简化邮件配置,Spring Boot则提供了MailSenderAutoConfiguration对邮件的发送做了进一步简化


SMTP/POP3协议的用处

  • SMTP全称为Simple MailTransfer Protocol,译作简单邮件传输协议,它定义了邮件客户端软件与SMTP服务器之间,以及SMTP服务器与SMTP服务器之间的通信规则。

用处:SMTP服务器就是在不同的服务商之间来传送邮件的,

  • POP3全称为PostOffice Protocol3,译作邮局协议,它定义了邮件客户端与POP3服务器之间的通信规则。

用处;111@163.com用户需要登录服务器查看邮件,这个时候就用上该协议了。

发送邮件

添加依赖

	 <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-mail</artifactId>
  	 </dependency>

配置邮件信息

application.properties中:

	spring.mail.host=smtp.qq.com
	spring.mail.port=465
	spring.mail.username=403401255@qq.com
	//这是SMTP服务商的授权码,可以自己来开启SMTP后获取
	spring.mail.password=opvjfkfiginacafe
	spring.mail.default-encoding=utf-8
	//安全相关的东西
	spring.mail.properties.mail.smtp.socoketFactory.class=javax.net.ssl.SSLSocketFactory
	debug=true

编写MailService



@Component
public class MailService {
    @Autowired
    JavaMailSender javaMailSender;

    /**
     * @param from 发送方地址
     * @param to 收件方地址
     * @param subject 主题
     * @param content 内容
     * @param srcPath 图片路径数组
     * @param resIds 图片id
     *
     * 有的邮件正文中可能要插入图片,使用FileSystemResource可以实现这一功能,代码如下
     */
    public void sendMailWithImg(String from, String to,
                                String subject, String content,
                                String[] srcPath,String[] resIds) {
        if (srcPath.length != resIds.length) {
            System.out.println("发送失败");
            return;
        }
        try {
            MimeMessage message = javaMailSender.createMimeMessage();
            MimeMessageHelper helper =
                    new MimeMessageHelper(message,true);
            helper.setFrom(from);
            helper.setTo(to);
            helper.setSubject(subject);
            helper.setText(content,true);

            for (int i = 0; i < srcPath.length; i++) {
                FileSystemResource res =
                        new FileSystemResource(new File(srcPath[i]));
                //然后调用addInline方法将资源加入邮件对象中
                helper.addInline(resIds[i], res);
            }

            javaMailSender.send(message);
        } catch (MessagingException e) {
            System.out.println("发送失败");
        }
    }

    /**
     * @param from 邮件发送方
     * @param to 接受地址
     * @param cc 抄送者
     * @param subject 主题
     * @param content 内容
     */
    public void sendSimpleMail(String from, String to, String cc, String subject, String content) {
        SimpleMailMessage simpMsg = new SimpleMailMessage();
        simpMsg.setFrom(from);
        simpMsg.setTo(to);
        simpMsg.setCc(cc);
        simpMsg.setSubject(subject);
        simpMsg.setText(content);
        javaMailSender.send(simpMsg);
    }

    /**
     * @param from
     * @param to
     * @param subject
     * @param content
     * @param file 附件
     *
     *  这里使用MimeMessageHelper简化了邮件配置,
     *  它的构造方法的第二个参数true表示构造一个multipart message类型的邮件,
     *  multipart message类型的邮件包含多个正文、附件以及内嵌资源,邮件的表现形式更加丰富。
     *  最后通过addAttachment方法添加附件。
     *
     *
     */
    public void sendAttachFileMail(String from, String to,
                       String subject, String content, File file) {
        try {
            MimeMessage message = javaMailSender.createMimeMessage();
            MimeMessageHelper helper = new MimeMessageHelper(message,true);
            helper.setFrom(from);
            helper.setTo(to);
            helper.setSubject(subject);
            helper.setText(content);
            helper.addAttachment(file.getName(), file);
            javaMailSender.send(message);
        } catch (MessagingException e) {
            e.printStackTrace();
        }
    }



    public void sendHtmlMail(String from, String to,
                             String subject, String content){
        try {
            MimeMessage message = javaMailSender.createMimeMessage();
            MimeMessageHelper helper = new MimeMessageHelper(message, true);
            helper.setTo(to);
            helper.setFrom(from);
            helper.setSubject(subject);
            //true 表示是复html文本
            helper.setText(content, true);
            javaMailSender.send(message);
        } catch (MessagingException e) {
            System.out.println("发送失败");
        }
    }
}

测试用例


public class User {
    private String username;
    private String gender;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }
}

    @Autowired
    MailService mailService;

    @Test
    public void sendMailWithImg() {
        mailService.sendMailWithImg("1510161612@qq.com",
                "584991843@qq.com",
                "测试邮件主题(图片)",
                "<div>hello,这是一封带图片资源的邮件:" +
                        "这是图片1:<div><img src='cid:p01'/></div>" +
                        "这是图片2:<div><img src='cid:p02'/></div>" +
                        "</div>",
                new String[]{"C:\\Users\\sang\\Pictures\\picpick\\p1.png",
                        "C:\\Users\\sang\\Pictures\\picpick\\p2.png"},
                new String[]{"p01", "p02"});
    }

    @Test
    public void sendAttachFileMail() {
        mailService.sendAttachFileMail("1510161612@qq.com",
                "584991843@qq.com",
                "测试邮件主题",
                "测试邮件内容",
                new File("E:\\邮件附件.docx"));
    }

    @Test
    public void sendSimpleMail() {
        mailService.sendSimpleMail(
                "403401255@qq.com",
                "995191647@qq.com",
                "403401255@qq.com",
                "Hello world",
                "Hello world");
    }

    @Autowired
    TemplateEngine templateEngine;
    @Test
    public void sendHtmlMailThymeleaf() {
        Context ctx = new Context();
        ctx.setVariable("username", "sang");
        ctx.setVariable("gender", "男");
        String mail = templateEngine.process("mailtemplate.html", ctx);
        mailService.sendHtmlMail(
                "403401255@qq.com",
                "403401255@qq.com",
                "测试邮件主题",
                mail);
    }

总结

  • 使用JavaMailSenser 发送 SimpleMessage ,
  • 对于复杂的消息 使用的是MimeMessage进行处理。
  • Spring中提供了JavaMailSender用来简化邮件配置,Spring Boot则提供了MailSenderAutoConfiguration对邮件的发送做了进一步简化
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

学长代码

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

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

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

打赏作者

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

抵扣说明:

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

余额充值