前言

在大型互联网公司中,一般都会搭建内部的消息服务平台,处理公司内部的各种消息服务,比如:发送邮件、发送短信、微信推送等,公司内部消息平台再去调用第三发消息平台。
消息服务平台的接口有两种:同步和异步,同步需求一般是需要返回调用第三方平台是否成功,否则都采用异步的。

公司内部消息服务平台

调用内部消息服务平台,使用消息中间件
发送消息一般都会做消息模板,调用的时候传模板id

图片来源:蚂蚁课堂

整合Eamil实现异步发送邮件信息

采用163邮件接口,先注册163邮箱,并开通pop3协议,此时会有一个授权码,发送内容不能带有广告,否则会被163拦截,导致发送失败。

场景:会员服务调用内部消息服务平台发送邮件

会员服务(生产者)
  • Maven依赖
        <!-- SpringBoot整合web组件 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- ActiveMQ依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-activemq</artifactId></dependency><!-- FastJson工具包 --><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>LATEST</version></dependency>
  • YML配置文件
spring:activemq:broker-url: tcp://127.0.0.1:61616    # ActiveMQ消息中间件服务器通讯地址user: admin  # 用户名password: admin  #密码
queue: springboot-queue   #自定义队列名,等下程序中会用到
server:port: 8080
  • 配置类
@Configuration
public class QueueConfig {//获取队列名@Value("${queue}")private String queue;//注册bean@Beanpublic Queue logQueue() {return new ActiveMQQueue(queue);}
}
  • 创建Producer
@Component
@EnableScheduling
public class Producer {@Autowiredprivate JmsMessagingTemplate jmsMessagingTemplate;@Autowiredprivate Queue queue;//每隔5秒向消息队列发送消息@Scheduled(fixedDelay = 5000)public void send(){//用户名,封装邮件内容时使用String userName = "张三"+ new Random().nextInt(20);//指定发送到哪个邮箱 (邮件接收者邮箱)String email = "593****77@qq.com";JSONObject jsonObject = new JSONObject();jsonObject.put("userName",userName);jsonObject.put("email",email);//将发送的消息转换为Json字符串String msg = jsonObject.toJSONString();System.out.println("生产者向消费者发送内容:" +  msg);jmsMessagingTemplate.convertAndSend(queue,msg);}
}
  • 启动类
@EnableScheduling
@SpringBootApplication
public class ActivemqQueueApplication {public static void main(String[] args) {SpringApplication.run(ActivemqQueueApplication.class, args);}}
消息服务平台(消费者)
  • Maven依赖
        <!-- SpringBoot整合Web组件 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- activemq依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-activemq</artifactId></dependency><!-- SpringBoot 整合Emai --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId></dependency><!-- 工具包 --><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>LATEST</version></dependency>
  • YML配置文件
spring:activemq:# ActiveMQ消息中间件服务器通讯地址broker-url: tcp://127.0.0.1:61616user: admin  # 用户名password: admin  #密码# 发送邮件配置mail:# 邮件服务器地址host: smtp.163.com# 邮箱用户名(邮件发送者)username: *********@163.com# 授权码,163邮箱开通协议时设置的那个授权码,不是登录密码password: wx1**********3enable:  truesmtp:auth: truestarttls:enable: truerequired: true#自定义队列名属性,等下程序中会用到(以生产者的队列名一致)
queue: springboot-queue
server:port: 8081
  • 创建Consumer
@Component
public class Consumer{@Autowiredprivate JavaMailSender javaMailSender;@Value("${spring.mail.username}") //发送方邮箱private String toEmail;@JmsListener(destination = "${queue}")     //监听的队列,配置文件中的queue属性public void receive(String msg){if(StringUtils.isEmpty(msg)){return;}System.out.println("收到生产者消息:"+msg);JSONObject jsonObject = JSONObject.parseObject(msg);String userName = jsonObject.getString("userName");String eamil = jsonObject.getString("eamil");//发送邮件sendEmail(userName,toEmail);}/*** 发送简单邮件* @param userName  用户名,用户封装邮件内容* @param toEmail 通过哪个邮箱发送* @return*/public String sendEmail(String userName,String toEmail){//发送消息对象SimpleMailMessage message = new SimpleMailMessage();//发送者message.setFrom(toEmail);//接收者message.setTo(toEmail);//主题(标题)message.setSubject("尊敬的"+userName);//内容message.setText("欢迎使用您使用本公司的产品!");  //发送html,发送html格式源码javaMailSender.send(message);System.out.println("邮件发送完成:"+ JSONObject.toJSONString(message));return  "send success!";}
}
  • 启动类
@SpringBootApplication
public class ActivemqQueueConsumerApplication {public static void main(String[] args) {SpringApplication.run(ActivemqQueueConsumerApplication.class, args);}}

测试

  • 启动会员服务和消息服务平台服务
  • 注意:启动前保证消息队列里面没有消息,有的话则先删除该队列,否则容易造成数据类型不一致导致Json解析异常出错。

会员服务:

消息服务平台:

此时消息服务平台发送邮件成功!

--------------------------------------- 学习不易,需要坚持 ---------------------------------------

使用ActiveMQ中间件方式发送邮件相关推荐

  1. mailx(mail)配置outlook SMTP方式发送邮件

    0x01,环境介绍: 我们用的是微软的邮箱打算用SMTP方式发送邮件.先登录账户看官方给出SMTP信息. 0x02,系统mailx(mail)设置. 通过命令可以看到,mail实际上是mailx的快捷 ...

  2. ActiveMQ持久化方式(转)

    消息持久性对于可靠消息传递来说应该是一种比较好的方法,有了消息持久化,即使发送者和接受者不是同时在线或者消息中心在发送者发送消息后宕机了,在消息 中心重新启动后仍然可以将消息发送出去,如果把这种持久化 ...

  3. ActiveMQ持久化方式

    ActiveMQ持久化方式 发表于8个月前(2014-09-04 15:55)   阅读(686) | 评论(0) 17人收藏此文章, 我要收藏 赞1 慕课网,程序员升职加薪神器,点击免费学习 摘要  ...

  4. bluehost主机php语句,BlueHost主机如何用PHP以SMTP方式发送邮件

    目前使用一些脚本发送邮件的方式有许多,但并不是所有人都会使用,所以小编下面就,BlueHost主机如何用PHP以SMTP方式发送邮件的方式为大家进行介绍. 具体操作方法如下: 首先在系统中添加了一个邮 ...

  5. C# 多种方式发送邮件(附帮助类)

    因项目业务需要,需要做一个发送邮件功能,查了下资料,整了整,汇总如下,亲测可用- QQ邮箱发送邮件 #region 发送邮箱try{MailMessage mail = new MailMessage ...

  6. gitlab配置SMTP方式发送邮件

    环境 安装gitlab及本文环境参考:CentOS7安装git仓库管理平台GitLab教程 公司gitlab服务器上开始使用的默认的postfix发送邮件,但是公司阿里云企业邮箱收不到邮件,因为被阿里 ...

  7. cdo收取邮件_使用Net.Mail、CDO组件、JMail组件三种方式发送邮件

    一.使用Net.Mail 需要服务器认证,大部分服务器端口为25. View Code 1 /// 2 ///用MailMessage通过需要认证的SMTP服务器发送邮件,可以发送附件3 /// 4 ...

  8. ios -静默方式发送邮件

    使用SKPSMTPMessage库发送 邮件地址:https://github.com/jetseven/skpsmtpmessage 这个库比较老旧,使用MRC手动内存管理(如下),当然也可以用po ...

  9. MediaWiki 设置QQ邮箱SMTP(SSl方式)发送邮件

    为什么80%的码农都做不了架构师?>>>    MediaWiki 默认采用本机作为邮件发送服务器,而发出去的邮件很容易被接收方当成垃圾邮件或者直接被屏蔽掉,所以建议直接采用第三方s ...

  10. python 发送邮件的两种方式【终极篇】

    python 发送邮件的两种方式[终极篇] 一,利用python自带的库 smtplib简单高效 from email.mime.multipart import MIMEMultipart from ...

最新文章

  1. python 使用sqlite3
  2. 初学者如何开发出高质量J2EE系统
  3. Java面试题 synchronized底层实现原理?它与lock相比有什么优缺点?
  4. 1001 A+B Format (20分)——12行代码AC
  5. 2020蓝桥杯省赛---java---A---2(既分数组)
  6. 从对象角度阐释五行变化
  7. 使用Python获取Excel文件中单元格公式的计算结果
  8. win11休眠选项在哪 Windows11没有休眠选项的解决方法
  9. XBug:一个强大的JavaScript调试器
  10. node mysql 事件循环_nodejs事件和事件循环详解
  11. 【转】福昕pdf套件注册码激活
  12. 密码技术---密钥和SSL/TLS
  13. SDHC介绍(收集网上资料-仅供学习之用)
  14. JavaScript课堂笔记一
  15. LTE中的RSRP、RSSI、RSRQ、SINR、MCS介绍
  16. php md5算法,php如何实现md5算法?
  17. vue组件库介绍以及组件库Element UI 的使用
  18. Unity3D 制作调色板
  19. C++类与对象入门实践(日期类的实现)
  20. 云计算企业商战宝典:一战定《输赢》

热门文章

  1. 【FLASH实例1000教程】(4)上
  2. ArcGIS中加载各种在线地图
  3. 深度测评 | 五大主流多端开发框架全面对比
  4. 字节面试算法题:用集合中的数凑小于target的最大数(Java实现,各类用例均通过)
  5. 群联PS2251-03芯片量产成功详细图文教程
  6. tomcat升级版本升级
  7. 哥尼斯堡的“七桥问题” (25 分)
  8. 【EC200U】 基站定位
  9. 软件工程中国大学慕课mooc北京大学 答案
  10. html里获得农历时间,获取阴历(农历)和当前日期的js代码_javascript技巧