目录

  • Java实现发邮件功能

    • 前言
    • 开发环境
    • 代码
    • 效果
    • 结束语

Java实现发邮件功能

前言

电子邮件的应用场景非常广泛,例如新用户加入,即时发送优惠清单、通过邮件找回密码、监听后台程序,出现异常自动邮件通知等。

本文以网易邮箱为例,通过Java代码实现发送邮件功能。

开发环境

请参照: 基于SpringBoot构建分模块项目

代码

  1. pom.xml引入依赖

    <properties><java.version>1.8</java.version><!-- 你的其他依赖... --><javax.mail.version>1.6.0</javax.mail.version>
    </properties><dependencies><!-- 你的其他依赖... --><!-- 发送短信 --><dependency><groupId>com.sun.mail</groupId><artifactId>javax.mail</artifactId><version>${javax.mail.version}</version></dependency>
    </dependencies>
  2. 发送邮件工具类

    package com.wayne.common.utils;import com.wayne.common.entity.CmsMailConfig;
    import com.wayne.common.vo.MailVo;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Component;import javax.mail.*;
    import javax.mail.internet.InternetAddress;
    import javax.mail.internet.MimeMessage;
    import java.util.Date;
    import java.util.Properties;/*** 发送邮件工具类* @author Wayne* @date 2019/6/19*/
    @Component
    public class MailUtils {/*** 发送邮件* @param isSingle 是否单发: true-单发 false-群发* @param mailVo 邮件内容* @param sendTime 发送时间, 如果为null,表示立即发送* @param mailConfig 发件人信息及授权*/public void sendMail(Boolean isSingle, MailVo mailVo, Date sendTime, CmsMailConfig mailConfig) throws MessagingException {Session session = this.authenticationMail();MimeMessage message = getMimeMessage(isSingle, session, mailConfig.getMailAccount(), mailVo.getRecipients());message = getContent(message, mailVo.getMailTiTle(), mailVo.getMailContent(), sendTime);Transport transport = session.getTransport();transport.connect(mailConfig.getMailAccount(), mailConfig.getMailLicense());transport.sendMessage(message, message.getAllRecipients());transport.close();}/*** 校验发送的邮件内容*/private MimeMessage getContent(MimeMessage message, String messageTitle, String messageContent, Date sendTime) throws MessagingException {if (null == messageTitle) {throw new MessagingException("邮件标题不能为空");}if (null == messageContent) {throw new MessagingException("邮件内容不能为空");}sendTime = sendTime == null ? new Date() : sendTime;message.setSubject(messageTitle, "UTF-8");message.setContent(messageContent, "text/html;charset=UTF-8");message.setSentDate(sendTime);return message;}/*** 验证认证信息*/private Session authenticationMail() throws MessagingException {Session session;try {Properties props = new Properties();//设置用户的认证方式props.setProperty("mail.smtp.auth", "true");//设置传输协议props.setProperty("mail.transport.protocol", "smtp");//设置发件人的SMTP服务器地址props.setProperty("mail.smtp.host", "smtp.163.com");session = Session.getInstance(props);session.setDebug(true);} catch (Exception e) {e.printStackTrace();throw new MessagingException("认证失败");}return session;}/*** @param isSingle 是否单发*                 <P>true-向指定的一个收件人发送邮件,比如:找回密码、登录验证*                 <P>false-向多个收件人群发邮件,比如:优惠活动推送*                 <P>群发时多个收件人之间用英文逗号','分割* @param senderAddress 发件人地址* @param recipientAddress 收件人地址*/private MimeMessage getMimeMessage(Boolean isSingle, Session session, String senderAddress, String recipientAddress) throws MessagingException {MimeMessage message = new MimeMessage(session);try {message.setFrom(new InternetAddress(senderAddress));} catch (MessagingException e) {throw new MessagingException("发件人地址错误");}/*设置收件人地址MimeMessage.RecipientType.TO:发送MimeMessage.RecipientType.CC:抄送MimeMessage.RecipientType.BCC:密送*/if (isSingle) {message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(recipientAddress));} else {message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(recipientAddress));}return message;}
    }
  3. 邮件内容对象-MailVo

    package com.wayne.common.vo;import lombok.Data;/*** @author Wayne* @date 2019/6/24*/
    @Data
    public class MailVo {/*** 邮件标题*/private String mailTiTle;/*** 邮件内容*/private String mailContent;/*** 收件人(们)*/private String recipients;
    }
  4. 发件人信息及授权

    注: 此处我假定有多个发件人,且不确定,可以动态添加、选择由哪个发件人发送,因此我将发件人信息存储在数据库中。假如你的应用中发件人是固定的,则此处可写在项目中或配在配置文件!

    我们正常发送邮件时需要输入密码,登录我们的邮箱账户。而通过程序发送邮件不需要密码登录,而是使用授权码,网易邮箱授权码获得方式如下

    1. 启用授权

    1. 获得授权码

    package com.wayne.common.entity;import lombok.Data;import javax.persistence.*;@Data
    @Table(name = "cms_mail_config")
    public class CmsMailConfig {/*** 主键*/@Id@Column(name = "MAIL_ID")private Integer mailId;/*** 邮箱账号*/@Column(name = "MAIL_ACCOUNT")private String mailAccount;/*** 授权码*/@Column(name = "MAIL_LICENSE")private String mailLicense;/*** 状态,0:使用,1:未使用*/@Column(name = "IS_USE")private String isUse;/*** 是否删除,0:否,1:是*/@Column(name = "IS_DELETE")private String isDelete;/*** 创建者ID*/@Column(name = "CREATE_ADMIN_ID")private Integer createAdminId;@Column(name = "EXTEND1")private String extend1;@Column(name = "EXTEND2")private String extend2;@Column(name = "EXTEND3")private String extend3;@Column(name = "EXTEND4")private String extend4;@Column(name = "EXTEND5")private String extend5;@Column(name = "EXTEND6")private String extend6;
    }
  5. Service

    @Override
    public ResponseBean sendMails(MailVo mailVo) {if (null == mailVo) {return ResponseBean.createInstance(Boolean.FALSE, 400, "参数异常");}// 获取当前正在使用的发件人配置List<CmsMailConfig> mailConfigList = mailConfigMapper.selectCurrUseMailConfig();if (null == mailConfigList || mailConfigList.size() != 1) {return ResponseBean.createInstance(Boolean.FALSE, 400, "参数异常");}try {// 发送邮件mailUtils.sendMail(Boolean.FALSE, mailVo, null, mailConfigList.get(0));return ResponseBean.createInstance();} catch (Exception e) {e.printStackTrace();}return ResponseBean.createInstance(Boolean.FALSE, 400, "参数异常");
    }
  6. Controller

    @PostMapping("/mail/sendMails")
    public ResponseBean sendMails(MailVo mailVo) {return mailService.sendMails(mailVo);
    }

效果

此处发送为手动发送,主要体验代码功能。具体应用场景可根据实际生产环境,随机应变。比如:通过结合定时器任务,每天定时发送报表;检测用户登录地址不是常用地址时,自动发邮件通知用户;普通用户登录时,触发发送邮件向管理员等

结束语

本人已开通公众号,欢迎大家前来灌水

转载于:https://www.cnblogs.com/L-Wirepuller/p/11415652.html

Java实现发邮件功能---网易邮箱相关推荐

  1. 如何用java实现发邮件功能

    如何用java实现发邮件功能 前言 前置条件 邮件服务器 电子邮件协议 JavaMail 实现 参考 前言 今天突然心学来潮,想用Java来实现发邮件的功能,想想这个在实际中还是蛮有用的,比如我举几个 ...

  2. Java实现发邮件功能

    代码如下: package com.weimob.finance.utils; import java.io.UnsupportedEncodingException; import java.uti ...

  3. 网易企业邮箱:给国外公司发邮件用什么邮箱?

    给国外公司发邮件用什么邮箱?与国外客户打交道的话,经常免不了发送邮件.海外邮件的收发环境复杂,导致邮件退信与丢失的因素较多.因此,选用具有海外智能中继功能的专业企业邮箱非常重要,例如网易企业邮箱 (h ...

  4. java之实现发邮件功能

    实现发邮件功能 1.配置邮件服务器主机名:private static String myEmailSMTPHost = "smtp.qq.com";(邮箱服务器前面加" ...

  5. 使用PHPMailer实现PHP通过QQ邮箱发邮件功能

    第一步 composer require phpmailer/phpmailer 或直接访问https://github.com/PHPMailer/PHPMailer/下载 第二步 检查是否开启so ...

  6. javaMail实现发邮件功能

    基础概念 1.SMTP邮件发送的请求的邮件服务器简称为SMTP服务器 默认端口号25 2.POP3协议 全名:邮局协议版本3 用来接收电子邮件 3.javaMial 顾名思义开发处理电子邮件的编程接口 ...

  7. Spring Java Mail发邮件

    今天测试了下spring的发邮件的功能 下上代码 在说遇到的问题 首先在applicationContext.xml配置邮件信息 <bean id="mailSender" ...

  8. android 信息添加附件功能,网易邮箱Android新版 添加附件可直接预览

    网易邮箱Android客户端近日发布了新版本V2.3,新版安卓客户端对附件处理做出较大改进.用户转发邮件附件时,不需要下载到本地实现直接转发,更加方便:写信时,添加附件由原先的列表形式变成预览图形式, ...

  9. 西门子精智HMI-TP1200发邮件功能

    不是所有的工厂都可以派个员工,24小时盯着设备.因此我们可以借助西门子人机界面的自动发送邮件功能,可以实现远程报警功能,! 具体步骤如下: 服务器名称.端口:可以查看所使用邮箱的SMTP服务器设置(如 ...

最新文章

  1. R语言ggplot2可视化分组的重叠图实战:grouped overlay plot
  2. [codevs 2236] 终极情报网
  3. 安装软件要求输入服务器配置信息,信息技术考试软件配置安装与操作规范(管理服务端与客户端)(30页)-原创力文档...
  4. [转载]:合并两个已排序好的int数组,并排序返回c#实现
  5. 手机安卓学习 内核开发
  6. android客户端cookies,android – 将cookie添加到客户端请求OkHttp
  7. Nginx(七):nginx原理解析
  8. ZZULIOJ 1083: 数值统计(多实例测试)
  9. style 字体加粗_第9篇 Qt Quick入门教程之基础(九)文本显示和字体
  10. Linux基础命令的使用
  11. 多媒体台式计算机安装方法,台式机如何组装 台式机组装注意事项【详解】
  12. 常用User-Agent大全 -《狗嗨默示录》-
  13. java的HashCode方法(转载)
  14. 网络安全法对计算机人员的影响,网络安全法的基本原则-网络安全论文-计算机论文.docx...
  15. atitit 技术选型之道. attilax著 艾龙著 1. 标准 2 1.1. 符合趋势度 2 1.2. 简单易用 2 1.3. 文档丰富度 2 1.4. 下载便利性 2 1.5. 性能 2 1.
  16. 智能小家居——智能插座TOP10方案合集
  17. python pdf转word并保持原有的格式_将PDF转换为Word文档后,格式即可解决问题
  18. 计算机更新好不,Win10自动更新好不好有必要吗?如何关闭屏蔽Windows更新?
  19. 中国软件测试有多少人,测试全国有多少人重名,查重名(无需安装软件)
  20. !!!全球最流行开源硬件平台!不知道就OUT了!

热门文章

  1. 2.14 OrCAD中怎么运用表格创建复杂的元器件?
  2. html怎么让两个div重叠,两个DIV或多个DIV顺序重叠加
  3. Android app 崩溃 Crash 分析(一)
  4. 体育赛事会用到动作捕捉相机吗?还是超高速相机呢?
  5. 纯JS加vue脚手架书写的对阵表(promise异步控制+nodejs+mongodb数据库)
  6. Spring EL 表达式的简单介绍和使用
  7. 文件传输(xmodem协议)
  8. 关于Android2.2定制出厂默认输入法的一些心得
  9. 华为有机系统鸿蒙,重磅!华为鸿蒙操作系统2.0版支持的设备清单流出,快来看看有你的机型吗?...
  10. 判断具有多个属性的行的连通性