在之前的文章,介绍了如何使用纯Java、JavaMail来发送邮件(解决中文乱码,发送HTML邮件),详见:https://blog.terrynow.com/2021/03/30/java-mail-smtp-send-email/
SpringBoot下发送邮件的文章,请查看:https://blog.terrynow.com/2021/07/26/java-springboot-send-mail-example-include-html-inline-attachment/
本篇介绍如何使用SpringMVC发送邮件,因为Spring对邮件做了进一步的封装,所以发邮件相对来说更优雅和简介一些。
首先配置文件增加javaMailSender(JavaMailSenderImpl实现类)
application-context.xml 增加如下:
<!-- 增加mail.properties配置文件,例如smtp帐号密码等 -->
<context:property-placeholder location="classpath:jdbc.properties,classpath:mail.properties"/>
<!-- 发送邮件配置 -->
<bean id="javaMailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
<property name="host" value="${mail.host}"/>
<property name="javaMailProperties">
<props>
<prop key="mail.smtp.auth">true</prop>
<prop key="mail.smtp.timeout">25000</prop>
</props>
</property>
<property name="username" value="${mail.username}"/>
<property name="password" value="${mail.password}"/>
<property name="defaultEncoding" value="UTF-8"/>
</bean>
mail.properties如下(smtp发送邮件的帐号具体查看邮件供应商的smtp设置文档)
mail.host=smtp.example.com [email protected] mail.password=password [email protected] mail.fromName=ServiceBot
新建一个发邮件的工具类MailUtils.java
里面会注入刚才我们在application-context.xml的javaMailSender
@Component
public class MailUtils {
@Autowired
JavaMailSender javaMailSender;
@Value("${mail.from}")
private String mailFrom;
@Value("${mail.fromName}")
private String mailFromName;
/**
* 发送简单邮件
*
* @param toAddress 邮件接受者邮件地址
* @param title 邮件主题
* @param text 邮件文本内容
*/
public void sendSimpleMail(String toAddress, String title, String text) {
SimpleMailMessage message = new SimpleMailMessage();
// message.setFrom(mailFrom);
message.setFrom(mailFromName + " <" + mailFrom + ">");
message.setTo(toAddress);
message.setSubject(title);
message.setText(text);
javaMailSender.send(message);
}
/**
* html邮件
*
* @param toAddress 邮件接受者邮件地址
* @param title 邮件主题
* @param html 邮件Html内容
*/
public void sendHtmlMail(String toAddress, String toName, String title, String html) throws Exception {
MimeMessage message = null;
message = javaMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setFrom(mailFrom, mailFromName);
if (toName != null && toName.trim().length() > 0) {
helper.setTo(new InternetAddress(toAddress, toName));
} else {
helper.setTo(toAddress);
}
helper.setSubject(title);
helper.setText(html, true);
javaMailSender.send(message);
}
}
调用示例
这样我们就可以在Controller或者Service中,直接调用MailUtils发送邮件了:
@Autowired
MailUtils mailUtils;
public void test() {
try {
String html = "<body><div><h2>测试HTML内容</h2></div></body>";
mailUtils.sendHtmlMail("[email protected]", "小张", "测试邮件主题", html);
} catch (Exception e) {
e.printStackTrace();
}
}
如果你要发送更复杂的内容,比如附件、inline的图片等等,那么可以直接@Autowired JavaMailSender javaMailSender; 直接操作javaMailSender:
@Autowired
JavaMailSender javaMailSender;
public void test() {
//<img src='cid:test.jpg' />内嵌图片
String html = "<body><div><h2>测试HTML内容</h2><img src='cid:test.jpg' width='120' height='120' style='border: none; width: 120px; height: 120px;' /></div></body>";
message = javaMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setFrom(mailFrom, mailFromName); //可以设置发件人的地址和昵称
if (toName != null && toName.trim().length() > 0) {
helper.setTo(new InternetAddress(toAddress, toName)); //可以设置收件人的地址和昵称
} else {
helper.setTo(toAddress);
}
helper.setSubject(title);//title主题
helper.setText(html, true);
helper.addInline("test.jpg", new File("xxx"));//发送HTML内嵌的图片
helper.addAttachment(xxx);//发送附件
javaMailSender.send(message);
}
文章评论