springboot发邮件

1.引入pom.xml

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-test</artifactId>
	<!--在spring boot项目里不需要版本号-->
	<!--<version>2.7.3</version>-->
</dependency>


2.配置

spring:
  mail:
    default-encoding: UTF-8
    host: smtp.126.com
    username: xx@126.com
    password: xx

注意这里的password需要是在126里的授权码。

3.测试代码

package mail;

import com.xx.Application;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.test.context.junit4.SpringRunner;



@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class Test1ApplicationTests {
    @Autowired
    private JavaMailSenderImpl mailSender;


    @Test
    public void contextLoads() {
        SimpleMailMessage mailMessage = new SimpleMailMessage();
        mailMessage.setFrom("koolfret@126.com");      
        mailMessage.setTo("xx@163.com");
        mailMessage.setText("你好 hello world");
        mailMessage.setSubject("测试Spring邮箱服务");
        mailSender.send(mailMessage);
         //等待邮件发送完毕再结束进程
        Thread.sleep(3000);
        System.out.println("====完成发送!====");        
    }

}


其中的坑:

1.把自己的密码放到公司的nacos,不太合适,怎么使用本地的配置?

在nacos里配置:

spring:
  cloud:
    config:
      # 如果本地配置优先级高,那么 override-none 设置为 true,包括系统环境变量、本地配置文件等配置
      override-none: true
      # 如果想要远程配置优先级高,那么 allow-override 设置为 false,如果想要本地配置优先级高那么 allow-override 设置为 true
      allow-override: true
      # 只有系统环境变量或者系统属性才能覆盖远程配置文件的配置,本地配置文件中配置优先级低于远程配置;注意本地配置文件不是系统属性
      override-system-properties: false
这样就可以在本地配置:

spring:
  mail:
    default-encoding: UTF-8
    host: smtp.126.com
    username: xx@126.com
    password: xx
    from: xx@126.com

2.个人126邮箱不要配置properties

@Autowired
private JavaMailSender mailSender;




@Test
public void sendEmail() throws Exception{
    //个人126邮件不需要设置这些properties,设置了会发不出去
    if(mailSender instanceof JavaMailSenderImpl){
        ((JavaMailSenderImpl)mailSender).setJavaMailProperties(new Properties());
    }
}


3.发送完邮件要等几秒,不然可能进程结束发不出去


4.如何发富文本(html)邮件

try {
    List<MimeMessage> mimeMessage=new ArrayList<>();
    for(SimpleMailMessage sm:mailMessage){
        MimeMessage message = mailSender.createMimeMessage();
        MimeMessageHelper helper= new MimeMessageHelper(message, true);
        helper.setFrom(sm.getFrom());
        helper.setTo(sm.getTo());
        helper.setSubject(sm.getSubject());
        helper.setText(sm.getText(), true);
        mimeMessage.add(message);
    }
    mailSender.send(mimeMessage.stream().toArray(MimeMessage[]::new));
}catch(Exception e){
    logger.error(e.getMessage(),e);
}

其实就是把SimpleMailMessage转成MimeMessageHelper,注意其中的正文设置方法为:helper.setText(sm.getText(), true);


5.如何出现 SMTPSenderFailedException: 550 Invalid User

那么是发信人写错了,也就是from写错了。


文/程忠 浏览次数:0次   2023-08-16 15:05:23

相关阅读


评论:
点击刷新

↓ 广告开始-头部带绿为生活 ↓
↑ 广告结束-尾部支持多点击 ↑