博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpringBoot-Email多邮箱发送实例
阅读量:7092 次
发布时间:2019-06-28

本文共 4659 字,大约阅读时间需要 15 分钟。

hot3.png

一, 简介

    为什么会用到多邮箱发送? 在实际应用中,不管是腾讯邮箱,网易邮箱都有上限阈值,即使开通VIP也一样会遇到该问题;

    各大邮箱每天发送数量限制: 

    在项目中, 经常会遇到 550连接频率受限 的错误:

com.sun.mail.smtp.SMTPSendFailedException: 550 Connection frequency limited

二, 解决方法

    既然遇到该问题,哪我们总不能不管吧,哪怎么解决该问题呢?

    当然最简单的办法就是: 增加发送邮箱数量,轮流执行发送;

    想想看,既然一个邮箱遭到限制, 那有10个邮箱轮流发送呢?发件数量将会是之前的10倍; 100个发送邮箱呢....

三, 具体实例

    1, 引入Maven Jar包

org.springframework.boot
spring-boot-starter-mail

    2, 邮件发送接口

package com.richfun.wxappi.utils.email;/** * 多邮箱发送邮件 * */public interface EmailMoreService {    /**     * 发送文本邮件     * */    boolean sendSimpleMail(String to, String subject, String content);    /**     * 发送HTML邮件     * */    boolean sendHtmlMail(String to, String subject, String content);}

    3, 邮件发送实现

package com.richfun.wxappi.utils.email;import com.richfun.wxappi.mapper.CommonDao;import com.richfun.wxappi.utils.Namespace;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.mail.SimpleMailMessage;import org.springframework.mail.javamail.JavaMailSenderImpl;import org.springframework.mail.javamail.MimeMessageHelper;import org.springframework.stereotype.Service;import javax.annotation.PostConstruct;import javax.mail.internet.MimeMessage;import java.util.List;import java.util.Map;import java.util.Properties;@Servicepublic class EmailMoreServiceImpl implements EmailMoreService {    private Logger logger = LoggerFactory.getLogger(getClass());    @Autowired    private CommonDao
> commonDao; private int emailId = 0; private List
> listEmail; @PostConstruct private void setListEmail() { // 设置邮箱发送列表, 从数据库中获取可发送邮箱列表 logger.info("=== 初始化可发送邮箱列表 ==="); this.listEmail = commonDao.findByMapList(Namespace.EMAIL + "listEmail", null); if (listEmail == null || listEmail.isEmpty()) { logger.error("=== 可发送邮箱列表为NULL, 请检测代码 ==="); } else { for (Map
email : listEmail) { logger.info("=== 可发送邮箱: " + email.get("email")); } } } private synchronized void setEmailId() { // 设置下次可发送邮箱 boolean isMax = emailId == (listEmail.size()-1); emailId = isMax ? 0 : emailId+1; } private synchronized Map
getEmail() { // 获取当前可发送邮箱 Map
email = listEmail.get(emailId); setEmailId(); return email; } private synchronized JavaMailSenderImpl getJavaMailSender() { // 获取邮箱发送实例 Map
email = getEmail(); String host = email.get("host_addr").toString(); String username = email.get("email").toString(); String password = email.get("pwd").toString(); String sslPort = email.get("ssl_port").toString(); JavaMailSenderImpl javaMailSenderImpl = new JavaMailSenderImpl(); javaMailSenderImpl.setHost(host); javaMailSenderImpl.setUsername(username); javaMailSenderImpl.setPassword(password); javaMailSenderImpl.setDefaultEncoding("UTF-8"); Properties properties = new Properties(); properties.setProperty("mail.smtp.auth", "true"); properties.setProperty("mail.smtp.socketFactory.port", sslPort); properties.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); javaMailSenderImpl.setJavaMailProperties(properties); return javaMailSenderImpl; } @Override public boolean sendSimpleMail(String to, String subject, String content) { logger.info("简单邮件开始发送"); try { JavaMailSenderImpl javaMailSender = getJavaMailSender(); String username = javaMailSender.getUsername(); logger.info("当前发送邮箱: " + username); SimpleMailMessage message = new SimpleMailMessage(); message.setFrom(username); message.setTo(to); message.setSubject(subject); message.setText(content); javaMailSender.send(message); logger.info("简单邮件发送成功"); return true; } catch (Exception e) { logger.error("简单邮件发送异常", e); e.printStackTrace(); } return false; } @Override public boolean sendHtmlMail(String to, String subject, String content) { logger.info("HTML邮件开始发送"); try { JavaMailSenderImpl javaMailSender = getJavaMailSender(); MimeMessage message = javaMailSender.createMimeMessage(); MimeMessageHelper messageHelper = new MimeMessageHelper(message, true); String username = javaMailSender.getUsername(); logger.info("当前发送邮箱: " + username); messageHelper.setFrom(username); messageHelper.setTo(to); messageHelper.setSubject(subject); messageHelper.setText(content, true); javaMailSender.send(message); logger.info("HTML邮件发送成功"); return true; } catch (Exception e) { logger.error("HTML邮件发送异常", e); e.printStackTrace(); } return false; }}

四, 总结

    1, 邮件发送的配置参数都已经放到数据库,需要注意;

    2, 如果你不知道有哪些配置参数,请阅读: 

转载于:https://my.oschina.net/u/3681868/blog/3001091

你可能感兴趣的文章
生成二维码(支持中文)
查看>>
cannot create windows service for mysql
查看>>
单反对焦模式与区域模式总结
查看>>
组件的props属性和state状态
查看>>
svn command
查看>>
Java语言概述
查看>>
方伯伯的玉米田[SCOI2014]
查看>>
条件语句
查看>>
bzoj1708[Usaco2007 Oct]Money奶牛的硬币*
查看>>
keil中使用_at_绝对地址定位问题
查看>>
ios中二维码的用法
查看>>
读C#程序
查看>>
POJ 1753 枚举二进制+BFS
查看>>
当采集中的url包含%2F时
查看>>
NLPIR/ICTCLAS智能语义挖掘从文字语言到行业应用
查看>>
关于重用
查看>>
vue2.0 新手教程(一)
查看>>
updatepanel的用法之triggers
查看>>
iOS6、7、8、9新特性汇总和适配说明
查看>>
php语法技巧
查看>>