Java发送邮件(网易163邮箱)(简单易操作篇)
文章目录
- 一、前言
- 二、事先准备步骤
- 三、Java具体代码实现
- 1. 类有哪几个?
- 2.jar包配置
- 3.关键代码功能简介
- 4.具体代码
- 4.1 MailConst.java 负责存放一些配置
- 4.2 MailSenderUtil.java 主要功能的实现
- 4.3 TestMail.java 测试java邮箱是否生效
- 四、感悟
一、前言
想必发送邮件在日常开发中是十分常见的需求吧,鉴于官方网站一些不友好的例子,自己简化了下邮件发送的工具类。
废话不多说,这次的分享是Java发送邮件,进行发送邮件的邮箱是网易163邮箱,其中分为群发和单发邮件两个功能。先说下有什么步骤吧。
(若想直接借鉴的可以跳转到具体代码那一块,有完整的代码)
二、事先准备步骤
未注册邮箱的先注册邮箱,网易163邮箱的注册地址:https://mail.163.com/register/index.htm?from=163mail
已经有网易邮箱的,输入网址:https://mail.163.com, 登录进入网易邮箱中,点击设置下拉框中的POP3/SMTP/IMAP。
- 开启IMAP和POP3服务,这样才能通过Java代码进行发送邮件。
3.1 开启服务需要发送短信到指定号码。
3.2 开通IMAP服务之后,会出现一个显示着授权密码的窗口,请立马保存这个授权密码(如果忘记了,可以重新关闭IMAP服务,再次开启获得新的授权密码)。
3.3 接着开通POP3服务,一样的套路。开通成功之后。
三、Java具体代码实现
1. 类有哪几个?
src文件夹下(哪个文件夹都可以)
-MailConst.java 负责存放一些配置
-MailSenderUtil.java 主要功能的实现
-TestMail.java 测试java邮箱是否生效
2.jar包配置
2.1 pom项目下,在dependencies节点下增加两个子节点,内容如下(发送邮件的jar包)
<!-- javaMail --><dependency><groupId>javax.mail</groupId><artifactId>mail</artifactId><version>1.4.1</version></dependency><!-- https://mvnrepository.com/artifact/com.sun.mail/javax.mail --><dependency><groupId>com.sun.mail</groupId><artifactId>javax.mail</artifactId><version>1.4.4</version></dependency>
</dependencies>
2.2 若为普通Javaee项目,则引入以上两个jar包。
3.关键代码功能简介
(MailSenderUtil.java)
sendMailToSingle()方法 是选择单发邮件的
sendMailToUserArray() 方法是选择群发邮件的
4.具体代码
4.1 MailConst.java 负责存放一些配置
package com.lzh;/*** @Description 邮件常量* @Author 林泽鸿* @Date 2020/4/3 21:13*/
public class MailConst {//你的进行发送邮件的邮箱public static final String USER_NAME = "xxxxxxxxxx@163.com";//授权密码public static final String PWD_CODE = "xxxxxxxxxx这里是刚才保存的授权密码";public static final String MAIL_HOST = "smtp.163.com";public static final String MAIL_SMTP_AUTH = "true";//邮件主题public static final String NOTIFICATION_MAIL_TITLE = "xxxxxxxxx邮件主题";//邮件内容public static final String NOTIFICATION_MAIL_CONTENT = "xxxxxxxxx你有一个新的通知,请前往xxxx进行查看!";}
4.2 MailSenderUtil.java 主要功能的实现
package com.lzh;import com.lzh.MailConst;import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.ArrayList;
import java.util.Properties;/*** @Description 邮件* @Author 林泽鸿* @Date 2020/4/3 21:03*/
public class MailSenderUtil {//建立服务器的邮件连接,从而可以进行发送邮件public static Session getMailSession(){//0.1 确定连接位置Properties properties = new Properties();//获取163邮箱smtp服务器的地址,properties.setProperty("mail.host", MailConst.MAIL_HOST);//是否进行权限验证。properties.setProperty("mail.smtp.auth", MailConst.MAIL_SMTP_AUTH);//0.2确定权限(账号和密码)Authenticator authenticator = new Authenticator() {@Overridepublic PasswordAuthentication getPasswordAuthentication() {//填写自己的163邮箱的登录帐号和授权密码(不是登录密码)。return new PasswordAuthentication(MailConst.USER_NAME,MailConst.PWD_CODE);}};//1 获得连接/*** properties:包含配置信息的对象,Properties类型* 配置邮箱服务器地址、配置是否进行权限验证(帐号密码验证)等** authenticator:确定权限(帐号和密码)** 所以就要在上面构建这两个对象。*/Session session = Session.getDefaultInstance(properties, authenticator);return session;}/*** 指定一个人发送邮件,单个发送* @Param toEmailAddress 单个接受邮件的邮箱地址* @Param title 主题* @Param content 内容* @Author 林泽鸿* @Date 2020/4/3 22:00**/public static void sendMailTOSingleUser(String toEmailAddress,String title, String content){//获得邮箱服务器的连接Session session = getMailSession();//2 创建消息Message message = new MimeMessage(session);// 2.1 发件人 我们自己的邮箱地址,就是名称try {message.setFrom(new InternetAddress(MailConst.USER_NAME));/*** 2.2 收件人* 第一个参数:* RecipientType.TO 代表收件人* RecipientType.CC 抄送* RecipientType.BCC 暗送* 比如A要给B发邮件,但是A觉得有必要给要让C也看看其内容,就在给B发邮件时,* 将邮件内容抄送给C,那么C也能看到其内容了,但是B也能知道A给C抄送过该封邮件* 而如果是暗送(密送)给C的话,那么B就不知道A给C发送过该封邮件。* 第二个参数* 收件人的地址,或者是一个Address[],用来装抄送或者暗送人的名单。或者用来群发。可以是相同邮箱服务器的,也可以是不同的* 这里我们发送给我们的qq邮箱*/message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(toEmailAddress));//设置抄送人,这里设置自己的是抄送人,免得被网易邮箱列为垃圾邮件message.setRecipient(Message.RecipientType.CC, new InternetAddress( MailConst.USER_NAME ));// 2.3 主题(标题)message.setSubject(title);//设置编码,防止发送的内容中文乱码。message.setContent(content, "text/html;charset=UTF-8");//3发送消息Transport.send(message);} catch (MessagingException e) {e.printStackTrace();}}/*** 群发邮件,也可以只发一个人。可设置主题和邮件内容,无附件* @Param toEmailAddressArray 接受邮件的所有邮箱地址* @Param title 主题* @Param content 内容* @Author 林泽鸿* @Date 2020/4/3 21:59**/public static void sendMailToUserArray(ArrayList<String> toEmailAddressArrayList , String title, String content) {String[] toEmailAddressArray = (String[]) toEmailAddressArrayList.toArray(new String[0]);//获得邮箱服务器的连接Session session = getMailSession();//2 创建消息Message message = new MimeMessage(session);// 2.1 发件人 我们自己的邮箱地址,就是名称try {message.setFrom(new InternetAddress(MailConst.USER_NAME));if (toEmailAddressArray != null) {// 为每个邮件接收者创建一个地址Address[] toEmailRecipients = null;toEmailRecipients = new InternetAddress[toEmailAddressArray.length];for (int i = 0; i < toEmailAddressArray.length; i++) {toEmailRecipients[i] = new InternetAddress(toEmailAddressArray[i]);}message.setRecipients(MimeMessage.RecipientType.TO, toEmailRecipients);}//设置抄送人,这里设置自己的是抄送人,免得被网易邮箱列为垃圾邮件message.setRecipient(Message.RecipientType.CC, new InternetAddress( MailConst.USER_NAME ));// 2.3 主题(标题)message.setSubject(title);//设置编码,防止发送的内容中文乱码。message.setContent(content, "text/html;charset=UTF-8");//3发送消息Transport.send(message);} catch (MessagingException ex) {ex.printStackTrace();}}}
4.3 TestMail.java 测试java邮箱是否生效
package com.lzh;import java.util.ArrayList;/*** @Description 测试发送邮件* @Author 林泽鸿* @Date 2020/4/3 20:55*/
public class TestMail {public static void main(String[] args) {ArrayList<String> emailArray = new ArrayList<>();//测试,收取邮件的邮箱,可以填写自己的发送邮件的邮箱emailArray.add("xxxxxxxxx@163.com");MailSenderUtil.sendMailToUserArray(emailArray,MailConst.NOTIFICATION_MAIL_TITLE,MailConst.NOTIFICATION_MAIL_CONTENT);}
}
四、感悟
- 学东西还是得实践比较有效率。
- 邮箱要是没有抄送人的话,多次尝试可能会被网易列为垃圾邮件,所以我这里弄了个抄送人,并将其设置为我发送邮件的邮箱。
Java发送邮件(网易163邮箱)(简单易操作篇)相关推荐
- Java使用QQ邮箱或网易163邮箱发送自定义CSS样式邮件
Java使用QQ邮箱或网易163邮箱发送自定义CSS样式邮件 前言 一.战前准备 1.导入依赖 2.配置文件 3.邮箱工具类 二.战争开始 1.QQ邮箱发送 2.网易邮箱发送 战后反思 前言 我们可能 ...
- java发送邮件到qq邮箱_javamail发送邮件(简单邮件qq邮箱)
/* * com.sun.mail javax.mail 1.5.4 */ /*上面是maven需要添加的依赖*/ package com.weiling.wl_erp.util; import or ...
- android mail发送邮件(包含163邮箱及qq邮箱,使用mail.jar,activation.jar,additionnal.jar)
最近项目里有个发邮件的功能,不能调系统发邮件,也不能调用第三方的客户端,还必须可以发网易163邮箱,也可以发QQ邮箱.这让我想起来,当年初学java时自己写了个发送邮件的小demo,就是发给网易邮箱的 ...
- python模拟登录网易163邮箱并发送SOS邮件
基本环境配置 1. Selenium - 建议使用低版本的Python-Selenium库,因为高版本在Chrome中不支持. pip3 install selenium==2.48.0 2. chr ...
- Java发送网易企业邮箱邮件
Java发送网易企业邮箱邮件 /** 此方法使用smtp协议 查看网易企业邮箱各种协议的主机和端口可访问https://qiye.163.com/help/client-profile.html查看* ...
- java163邮箱服务器地址,JavaEmail发送网易163邮箱和QQ邮箱
引入javamail的坐标依赖!省略!直接展示中心思想! @Component public class EmailUtil { /** * todo 发送QQ邮箱 */ public void se ...
- 新技能获取:如何查询网易163邮箱具体的注册日期,包括年月日
这几天突发奇想,脑子里凭空产生了壹個困扰我好几天的问题:应该怎么做才能查询到网易163邮箱的具体注册日期?之所以会产生这样的疑问,是因为网易163邮箱本身提供的信息不够精确,在网易免费邮箱官方博客里, ...
- python 创建文件_Python入学首次项目,新手必看,简单易操作
继昨天文章python软件pycharm安装教程之后,今天则给新手小白们分享一哈,怎么制作并创建文件.print "hello world": 如后期需要资料文件的则可以私信留言, ...
- 程序模拟网易163邮箱注册帮助文档
今天有朋友想要用程序模拟网易163邮箱注册,但是遇到了一些小问题,小菜特准备了一篇文档,希望可以帮到需要的朋友. 模拟程序整体流程图: 整个过程必须使用同一个模拟对象! 注册说明: l post方式 ...
最新文章
- 为什么不用原生Spring-Cloud-Config
- 信息系统分析与设计杨选辉_信息系统分析与设计(第2版)
- 给一份Webservice接口通用实现!!
- css 浮动在最上层_CSS的“层”峦“叠”翠
- MySQL数据库的备份和还原
- 40. Combination Sum II 组合总和 II
- BZOJ #3625 CF #438E 小朋友和二叉树
- 12.GitLab System Hooks
- 使用radioGroup的时候,每个radioButton的状态选择器要使用 state_checked=属性,不能使用selected...
- Rainmeter雨滴桌面秀教程
- r2游戏服务器网站,神秘揭晓《R2》公测服务器名称首度公布
- matlab产生大气湍流,一种大气湍流模拟装置的制造方法
- 软件开发流程中的测试及测试方法简介
- numpy.linalg 中的逆矩阵 inv
- Python+Vue计算机毕业设计个人学习博客系统wyz5v(源码+程序+LW+部署)
- dad my_My dad英语绘本.ppt
- java se1.6配套Jdk,javase 1.6与jdk1.6
- 压缩文件已损坏如何修复
- 重新渲染echarts图形
- 看清大厂面目:美光宣布暂停向华为供货!