Springboot+ActiveMQ+JavaMail实现异步邮件发送

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
至于授权码的获取,需要到 qq 邮箱里面 设置->账户,然后到图示的地方,开启服务,然后 根据提示获取授权码:
3.接下来实现发送邮件的代码
package com.mail.service.impl;
import com.mail.service.MailService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.core.io.FileSystemResource; import org.springframework.mail.SimpleMailMessage; import org.springframework.mail.javamail.JavaMailSender; import org.springframework.mail.javamail.MimeMessageHelper; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils;
@RunWith(SpringRunner.class) @SpringBootTest public class MailServiceTest {
@Autowired MailService mailService;
@Value("${mail.to}") private String mailTo;
FileSystemResource file = new FileSystemResource(new File(filePath)); helper.addAttachment(file.getFilename(),file);// 添 加 附 件 , 需 要 用 到 FileStstemResource
一、springboot 整合 JavaMailSender
在发送异步邮件之前,先来简单介绍下邮件发送的基本内容,了解邮件是怎么发送的,然后 再在此基础上添加 activemq。 要发送邮件就要用到 JavaMail,它是 Java 官方为方便 Java 开发人员在应用程序中实现邮件 发送和接收功能而提供的一套标准开发包,它支持常见的邮件协议:SMTP/POP3/IMAP/MIME 等。想要发送邮件只需要调用 JavaMail 的 API 即可。后来,Spring 对于 JavaMail 进行了封装, 然后 springboot 又进一步封装,现在使用起来非常方便。请看代码: 1.新建 springboot 工程:mail-sender 2.添加配置文件:application.properties
@Value("${spring.mail.username}")//从配置文件中获取发件人邮箱 public String from;
/** * 发送普通文本邮件 */
@Override public void sendSimpleMail(String to, String subject, String context){
SimpleMailMessage mailMessage = new SimpleMailMessage(); mailMessage.setFrom(from);//发件人 mailMessage.setTo(to);//收件人 mailMessage.setSubject(subject);//邮件主题 mailMessage.setText(context);//邮件正文
mailSender.send(mailMessage);//发送邮件 logger.info("邮件发送成功"); }
/** * 发送 HTML 邮件
*/
@Override
public void sendMimeMail(String to, String subject, String context){
mailSender.send(message); logger.info("带邮件的附件发送成功"); }catch(Exception ex){ logger.error("带附件的邮件发送失败",ex); } }
/** * 发送正文带图片的邮件
*/ @Override public void sendInlineMail(String to, String subject, String context, String filePath, String resId) {
@Test public void testSendInlineMail(){
String resId = "1"; String context = "<html><body> 你 好 , <br> 这 是 一 封 带 静 态 资 源 的 邮 件 <br><img src=\'cid:"+resId+"\'></body></html>"; mailService.sendInlineMail(mailTo,"带静态图片的邮件",context,"D:\\1.jpg",resId); }
mailSender.send(mailMessage);
logger.info("邮件发送成功");
} catch(Exception ex){
logger.error("邮件发送失败",ex);
}
}
/** * 发送带附件的邮件 */
@Override public void sendAttachMail(String[] to, String subject, String context, String filePath) {
MimeMessage message = mailSender.createMimeMessage(); try{
MimeMessageHelper helper = new MimeMessageHelper(message,true); helper.setFrom(from); helper.setTo(to); helper.setSubject(subject); helper.setText(context);
@Test public void testSimpleMail(){
mailService.sendSimpleMail(mailTo,"纯文本邮件","你好,这是一封测试邮件"); } @Test public void testMimeMail(){
String context = "<html>\n" + "<body>\n" + "你好,<br>" + "这是一封 HTML 邮件\n" + "</body>\n" + "</html>";
helper.setFrom(from);
helper.setTo(to);
//
helper.setBcc("xxxx@qq.com");//抄送人
helper.setSubject(subject);
helper.setText(context,true);//这里的第二个参数要为 true 才会解析 html 内容
import javax.mail.internet.MimeMessage; import java.io.File;
@Service public class MailServiceImpl implements MailService {
private final Logger logger = LoggerFactory.getLogger(this.getClass()); @Autowired private JavaMailSender mailSender;//注入 JavaMailSender,具体发送工作需要它完成
}
代码中分别对发送普通文本邮件、HTML 邮件、代码附件的邮件、带图片的邮件进行了示范
4.编写测试类 packagΒιβλιοθήκη Baidu com.mail;
import com.mail.service.MailService; 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.test.context.junit4.SpringRunner;
###mail config ### spring.mail.host=smtp.qq.com(配置邮件发送协议) spring.mail.username=xxxx@qq.com(发件人,具体配成你需要的邮箱) spring.mail.password=对于 qq 邮箱来说,这里不是密码,而是授权码 spring.mail.default-encoding=utf-8 mail.to=xxxx@qq.com (为了方便,我这里将收件人统一配置成一个,实际业务中肯定按照实际情况发送的)
MimeMessage message = mailSender.createMimeMessage(); try{
MimeMessageHelper helper = new MimeMessageHelper(message,true); helper.setFrom(from); helper.setTo(to); helper.setSubject(subject); helper.setText(context,true);
MimeMessage mailMessage = mailSender.createMimeMessage();
try{//发送非纯文本的邮件都需要用的 helper 来解析
MimeMessageHelper helper = new MimeMessageHelper(mailMessage);
Springboot+ActiveMQ+JavaMail 实现异步邮件发送
现在邮件发送功能已经是几乎每个系统或网址必备的功能了,从用户注册的确认到找回密码 再到消息提醒,这些功能普遍的会用到邮件发送功能。我们都买过火车票,买完后会有邮件 提醒,有时候邮件并不是买完票立马就能收到邮件通知,这个就用到了异步邮件发送。 那怎么实现邮件的异步发送呢? 很显然,引入 MQ 是一个不错的选择。
mailService.sendMimeMail(mailTo,"HTML 邮件",context); }
@Test public void testSendAttachMail(){
String[] to = {mailTo,这里是收件人邮箱}; mailService.sendAttachMail(to," 带 附 件 的 邮 件 "," 你 好 , 这 是 一 封 带 附 件 的 邮 件 ","D:\\1.jpg"); }
FileSystemResource res = new FileSystemResource(new File(filePath)); helper.addInline(resId, res); mailSender.send(message); logger.info("邮件发送成功"); } catch (Exception ex){ logger.error("邮件发送失败",ex); } }
相关文档
最新文档