配置邮件发送器
Spring使用MailSender接口完成连接邮件服务器,发送邮件的功能。Spring自带了它的实现类JavaMailSenderImpl,我们只需要配置好配置好邮件发送器,就可以使用它来发送邮件了。
如果我们使用springboot构建我们的项目,我们只需要在application.properties(或application.yml)添加以下配置:
spring:
mail:
host: smtp.qq.com # qq邮箱的SMTP
username: 123456789@qq.com # 发送方的qq邮箱
password: asdfasdfasdfasdf # smtp密码(是16位授权码,不是邮箱密码)
sender: 123456789@qq.com # 发送方的qq邮箱,与username一致
senderName: qsm # 发送方的姓名,随意填写
receiver: 987654321@qq.com # 接收方邮箱,随意填写
如果我们使用springboot,只需在pom.xml加入以下依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
springboot默认帮我们建了一个JavaMailSenderImpl bean。 如果项目没有使用springboot,那我们需要手动配置一个JavaMailSenderImpl bean。
@Bean
public MailSender mailSender(Enviroment env){
JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
mailSender.setHost(env.getProperty("mailSender.host"));
...//在这里配置完其他属性
return mailSender;
}
装配和使用邮件发送器
@Autowired
private JavaMailSender javaMailSender;
这里我们使用的是JavaMailSender,JavaMailSender接口继承了MailSender接口,拥有更多的可供使用方法。
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class SendMailController {
@Autowired
private JavaMailSender mailSender;
@GetMapping("/send")
public String send(){
SimpleMailMessage mailMessage=new SimpleMailMessage();
mailMessage.setFrom("123456789@qq.com");
mailMessage.setTo("987654321@qq.com");
mailMessage.setSubject("subject");
mailMessage.setText("text");
mailSender.send(mailMessage);
return "send successfully";
}
}
发送带附件的邮件
前面使用的SimpleMailMessage只支持简单文本的发送,要发送带附件的邮件,需使用MimeMessage。 由于MimeMessage的api比较笨重,这里我们使用MimeMessageHelper帮助我们。
@GetMapping("/send2")
public String send2() throws MessagingException {
MimeMessage mimeMessage = mailSender.createMimeMessage();
MimeMessageHelper helper=new MimeMessageHelper(mimeMessage,true);
helper.setFrom("123@qq.com");
helper.setTo("321@qq.com");
helper.setSubject("subject2");
helper.setText("text");
FileSystemResource resource = new FileSystemResource("wx.jpg");
helper.addAttachment("附件",resource);
mailSender.send(mimeMessage);
return "send successfully";
}