Java之springboot邮件发送

2020-09-29  本文已影响0人  兰觅
一.获取授权码

在此以qq邮箱为例


进入设置界面

开启IMAP/SMTP服务


开启IMAP/SMTP服务
根据操作用手机号发送短信,获取授权码
授权码

在项目中引入依赖:pom.xml

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

在配置文件中填写参数:application.properties
username为邮箱账号,这里的password密码是指授权码

spring.mail.host=smtp.qq.com
spring.mail.username=xxxx@qq.com
spring.mail.password=授权码
spring.mail.protocol=smtp
spring.mail.default-encoding=UTF-8

或者
在application.yml中配置

 mail:
    host: smtp.qq.com
    username: xxxx@qq.com
    password: 授权码
    properties:
      mail:
        smtp:
          auth: true
          starttls:
            enable: true
            required: true
    default-encoding: UTF-8

以上操作参考如下:报空指针
操作参考1

修改如下:

public class testSendEmail{

    public JavaMailSenderImpl JavaMailSender() {
        JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
        mailSender.setHost("smtp.qq.com");
        mailSender.setUsername("xxxx@qq.com");
        mailSender.setPassword("授权码");
        return mailSender;
    }
    //一个简单的邮件,只有text信息
    /**
     * @Description:
     * @Param: [subject:标题, text:内容, email:接收人的邮件地址]
     * @return: void
     * @Author: 你自己
     * @Date: 2020/2/27
     */
    public void SendSimpleEmail(String subject, String text, String email) {
        JavaMailSenderImpl javaMailSender = JavaMailSender();
        SimpleMailMessage mailMessage = new SimpleMailMessage();
        mailMessage.setSubject(subject); //邮件的主题
        mailMessage.setText(text);
        mailMessage.setTo(email); //发送给谁
        mailMessage.setFrom(Objects.requireNonNull(javaMailSender.getUsername())); //谁发送的
        javaMailSender.send(mailMessage);
    }

    /**
     * @Description:
     * @Param: [subject:标题, text:内容, html,Boolean html:是否进行html解析
     * email:接收人的邮件地址, attachmentMap:附件的名称和文件路径]
     * @return: void
     * @Author: 你自己
     * @Date: 2020/2/27
     */
    public void SendMimeEmail(String subject, String text, Boolean html,
                              String email, Map<String, String> attachmentMap) throws MessagingException {
        JavaMailSenderImpl javaMailSender = JavaMailSender();
        //一个复杂的邮件`
        MimeMessage mimeMessage = javaMailSender.createMimeMessage();
        //进行组装
        MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, html);
        helper.setSubject(subject);
        helper.setText(text, html);

        //附件
        if (attachmentMap != null) {
            Iterator<Map.Entry<String, String>> iterator = attachmentMap.entrySet().iterator();
            //map.entrySet()得到的是set集合,可以使用迭代器遍历
            while (iterator.hasNext()) {
                Map.Entry<String, String> entry = iterator.next();
                helper.addAttachment(entry.getKey(),
                        //附件名称,要写好文件的后缀,不要少写和写错
                        new File(entry.getValue()));
                //附件的文件地址,可以写绝对路径,若是相对路径,如./1.png,代表的是resources下的1.png
            }
        }
        helper.setTo(email); //发送给谁
        helper.setFrom(Objects.requireNonNull(javaMailSender.getUsername())); //谁发送的
        javaMailSender.send(mimeMessage);
    }
}

编写测试方法:

public class testEmail {

    @Autowired
    private JavaMailSender javaMailSender;

    @Test
    public void testSend() throws MessagingException{
        testSendEmail sendEmail=new testSendEmail();
        sendEmail.SendSimpleEmail("测试邮件是否能发送成功","test成功!你真棒!哈哈哈哈哈,猜猜我是谁??","aaaa@163.com");//第一个方法
    }
效果1

发送文件:

    @Test
    public void Test1() throws MessagingException {
        testSendEmail e=new testSendEmail();
//        e.SendSimpleEmail("又是崭新的一天","天气真好,要开心要快乐","aaaa@163.com");
        HashMap<String, String> map = new HashMap<>(); //定义附件
//        map.put("1.png","./1.png");  //相对路径,相对于resources目录下
        map.put("2.png","H:\\Desktop\\testInfo\\testImage\\timg (1).jpg"); //绝对路径
        e.SendMimeEmail("test标题","testContent",true,"aaaa@163.com",
                map);

    }
效果2
上一篇 下一篇

猜你喜欢

热点阅读