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写错了。
相关阅读
评论:
↓ 广告开始-头部带绿为生活 ↓
↑ 广告结束-尾部支持多点击 ↑