引入依赖:

        <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>

配置文件:

spring:
activemq:
broker-url: tcp://127.0.0.1:61616
in-memory: true
pool:
enabled: false
mail:
host: smtp.163.com
username: 你的邮箱
password: 你的密码
properties:
mail:
smtp: true
starttls:
enable: true
required: true
freemarker:
allow-request-override: false
cache: true
check-template-location: true
charset: UTF-8
content-type: text/html
expose-request-attributes: false
expose-session-attributes: false
expose-spring-macro-helpers: false mail:
fromMail:
addr: dandingdedanding@163.com

邮件服务:

public interface MailService {

    boolean sendEmail(String to, String subject, String content);

    boolean sendEmailByTemplate(String to, String subject, String templateFile, Map<String, String> content);

}
@Service
public class MailServiceImpl implements MailService { @Autowired
private JavaMailSender mailSender; @Value("${mail.fromMail.addr}")
private String from; // 邮件发送者 @Override
public boolean sendEmail(String to, String subject, String content) {
MimeMessage message = mailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message);
try {
helper.setFrom(from); // 邮件发送者
helper.setTo(to); // 邮件接收者
helper.setSubject(subject); // 邮件主题
helper.setText(content, true); // 邮件正文,是否支持html格式
mailSender.send(message); // 发送邮件
} catch (MessagingException e) {
e.printStackTrace();
return false;
}
return true;
} @Override
public boolean sendEmailByTemplate(String to, String subject, String templateFile, Map<String, String> content) {
Configuration cfg = new Configuration(Configuration.VERSION_2_3_23);
cfg.setClassForTemplateLoading(this.getClass(), "/templates");
try {
Template template = cfg.getTemplate(templateFile);
String html = FreeMarkerTemplateUtils.processTemplateIntoString(template, content);
return this.sendEmail(to, subject, html);
} catch (Exception e) {
e.printStackTrace();
return false;
}
} }

模板文件:

<html>
<body>
<h3>你好,这是绿茵狙击手的测试邮件,我是${name}</h3>
</body>
</html>

spring boot启动类:

@SpringBootApplication
@EnableJms
public class Application { @Bean("emailQueue")
public Queue emailQueue() {
return new ActiveMQQueue("email.queue");
} public static void main(String[] args) {
SpringApplication.run(Application.class, args);
} }

email rest 接口:

/**
* 邮件服务暴露给外部的rest接口
*/
@RestController
@RequestMapping("/mail")
public class MailRestController { @Autowired
private MailProducer mailProducer; /**
* 发送简单邮件消息缓存在activeMq队列中
*/
@PostMapping("/send")
public String send(@RequestParam String to,
@RequestParam String subject,
@RequestParam String content) {
Map<String, String> map = new HashMap<>();
map.put("to", to);
map.put("subject", subject);
map.put("content", content);
String msg = JSONObject.toJSONString(map); mailProducer.send(msg);
return "success";
} }

通过请求 /test/send 接口,通过调用邮件消息生产者,将想要发送的邮件信息缓存在activeMq的email.queue队列中,

由邮件消息消费者调用邮件服务类发送邮件

邮件消息生产者:

/**
* 邮件消息生产者
*/
@Component
public class MailProducer { @Autowired
private JmsMessagingTemplate jmsMessagingTemplate; @Autowired
@Qualifier("emailQueue")
private Queue emailQueue; public void send(String msg) {
this.jmsMessagingTemplate.convertAndSend(this.emailQueue, msg);
} }

邮件消息消费者:

/**
* 邮件消息消费者
*/
@Component
public class MailConsumer { @Autowired
private MailService mailService; @JmsListener(destination = "email.queue")
public void receiveQueue(String text) {
System.out.println("消费邮件消息:" + text);
// 将activeMq email.queue队列中的邮件消息发送至接收者邮箱
JSONObject jsonObject = JSONObject.parseObject(text);
String to = jsonObject.getString("to");
String subject = jsonObject.getString("subject");
String content = jsonObject.getString("content");
mailService.sendEmail(to, subject, content);
} }

启动项目测试接口:

发送post请求

初次调用接口会报这个错误:邮箱不可用 550 User has no permission

可以参考这篇文章解决问题:https://blog.csdn.net/Hughnes/article/details/52070878

邮箱不可用 550 User has no permission

2016年07月30日 09:18:43

阅读数:17974

当传入发送邮箱正确的用户名和密码时,总是收到到:550 User has no permission这样的错误,

其实我们用Java发送邮件时相当于自定义客户端根据用户名和密码进行登录,然后使用SMTP服务发送邮件。但新注册的163邮件默认是不开启客户端授权验证的(对自定的邮箱大师客户端默认开启),

因此登录总是会被拒绝,验证没有权限。解决办法是进入163邮箱,进入邮箱中心——客户端授权密码,选择开启即可,如下截图

设置完毕后,在代码中用使用客户端授权密码代替原始的邮箱密码,这样就可以正确的发送邮件了。

继续发送post请求,观察结果

邮箱收到邮件:

最新文章

  1. 我的屌丝giser成长记-工作篇之A公司
  2. java.lang.NoClassDefFoundError:org/apache/commons/lang/exception/NestableRuntimeException错误的解决
  3. {POJ}{3971}{Scales}{O(N)动态规划}
  4. linux下cp目录时排除一个或者多个目录的方法
  5. js判断是否是pc
  6. 【C#设计模式——创建型模式】抽象工厂模式
  7. hdf5 api
  8. Git创建一个自己的本地仓库
  9. 科学计算工具Numpy
  10. springboot2 pagehelper 使用笔记
  11. vue IE 报错 引用babel-polyfill
  12. EUV光刻!宇宙最强DDR4内存造出
  13. django之用户表的继承
  14. Centos常用快捷键
  15. HDU 6053 TrickGCD (莫比乌斯函数)
  16. VC++ 崩溃处理以及打印调用堆栈
  17. GCD学习(五) dispatch_barrier_async
  18. 【Hibernate那点事儿】—— Hibernate知识总结
  19. SqlSugar批量添加修改问题
  20. python3开发进阶-Django框架的详解

热门文章

  1. 提升Java代码质量(二)
  2. 策略模式和php实现
  3. AngularJS(三):重复HTML元素、数据绑定
  4. Kendo DataSource 概述
  5. Effective C++ 重要条款
  6. mysql 5.7.20 在线安装与卸载(yum卸载与rpm卸载方式)
  7. MySql自动默认时间及更新时间
  8. Mandelbrot图像
  9. 用 label 控制 Pod 的位置
  10. NOIP模拟赛 机器人