java发送邮件基础方法(另附部分主流邮箱服务器地址、端口及设置方法)
java发送邮件基础方法,可通过重载简化参数
import java.io.File;
import java.io.UnsupportedEncodingException;
import java.util.Properties; import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Authenticator;
import javax.mail.BodyPart;
import javax.mail.Message.RecipientType;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeUtility; public class MailUtil { /**
* @Description: 使用QQ邮箱发送不带附件的邮件,收件人邮箱类型不限。
* @date: 2019年12月17日 下午4:51:01
* @author: ggwudivs
* @param subject 邮件标题
* @param content 邮件内容
* @param fromUser 发件人邮箱
* @param fromPass 发件人邮箱密码,应为16位SMTP口令
* @param tO_Recipients 收件人邮箱,多个收件人用","分隔
* @param openSSL 是否开启SSL
* @throws UnsupportedEncodingException
* @throws MessagingException:
* @return: void
*/
public static void sendMessage_QQ (String subject, String content, String fromUser, String fromPass, String tO_Recipients, boolean openSSL) throws UnsupportedEncodingException, MessagingException{
sendMessage(subject, content, fromUser, fromPass, null, tO_Recipients, null, null, "smtp.qq.com", openSSL?"465":"587", null, openSSL);
} /**
* @Description: 使用QQ邮箱发送带附件的邮件,收件人邮箱类型不限。
* @date: 2019年12月17日 下午5:25:14
* @author: ggwudivs
* @param subject 邮件标题
* @param content 邮件内容
* @param fromUser 发件人邮箱
* @param fromPass 发件人邮箱密码,应为16位SMTP口令
* @param tO_Recipients 收件人邮箱,多个收件人用","分隔
* @param attachmentFilesPath 邮件附件路径,多个附件用","分隔
* @param openSSL 是否开启SSL
* @throws UnsupportedEncodingException
* @throws MessagingException:
* @return: void
*/
public static void sendMessage_QQ (String subject, String content, String fromUser, String fromPass, String tO_Recipients, String attachmentFilesPath, boolean openSSL) throws UnsupportedEncodingException, MessagingException{
sendMessage(subject, content, fromUser, fromPass, null, tO_Recipients, null, null, "smtp.qq.com", openSSL?"465":"587", attachmentFilesPath, openSSL);
} /**
* @Description: smtp发送邮件
* @date: 2019年12月17日 下午3:22:35
* @author: ggwudivs
* @param subject 邮件标题
* @param content 邮件文本内容
* @param fromUser 发件人邮箱
* @param fromPass 发件人邮箱密码,QQ邮箱应为16位SMTP口令
* @param nickname 发件人昵称
* @param tO_Recipients 收件人邮箱,多个收件人用","分隔
* @param cC_Recipients 抄送人邮箱,多个抄送人用","分隔
* @param bCC_Recipients 密送人邮箱,多个密送人用","分隔
* @param smtpHost smtp服务器地址
* @param smtpPort smtp服务器端口
* @param attachmentFilesPath 邮件附件路径,多个附件用","分隔
* @throws MessagingException
* @throws UnsupportedEncodingException:
* @return: void
*/
public static void sendMessage(String subject, String content, String fromUser, String fromPass, String nickname, String tO_Recipients, String cC_Recipients, String bCC_Recipients, String smtpHost, String smtpPort, String attachmentFilesPath, boolean openSSL) throws MessagingException, UnsupportedEncodingException {
//创建Properties类,用于记录邮箱的一些属性
Properties props = new Properties();
//表示SMTP发送邮件,必须进行身份验证
props.put("mail.smtp.auth", "true");
//SMTP服务器地址
props.put("mail.smtp.host", smtpHost);
//是否开启SSL
if(!openSSL){
//SMTP服务器端口号
props.put("mail.smtp.port", smtpPort);
}else{
//SMTP服务器ssl端口号
props.setProperty("mail.smtp.socketFactory.port", smtpPort);
props.setProperty("mail.smtp.socketFactory.fallback", "false");
props.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
} //构建授权信息,用于进行SMTP进行身份验证
Authenticator authenticator = new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
//发件人账号,发件人密码(QQ邮箱应为16位SMTP口令)
return new PasswordAuthentication(fromUser, fromPass);
}
}; //使用环境属性和授权信息,创建邮件会话
Session mailSession = Session.getInstance(props, authenticator); //创建邮件消息
MimeMessage message = new MimeMessage(mailSession); //设置发件人,有昵称时同时设置昵称
try {
message.setFrom((nickname==null||"".equals(nickname))?new InternetAddress(fromUser):new InternetAddress(fromUser, nickname, "UTF-8"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} //设置一个或多个收件人
message.setRecipients(RecipientType.TO, tO_Recipients); //设置一个或多个抄送人
message.setRecipients(RecipientType.CC, cC_Recipients); //设置一个或多个密送人
message.setRecipients(RecipientType.BCC, bCC_Recipients); //设置邮件标题
message.setSubject(subject); //设置邮件的内容
if(attachmentFilesPath == null || "".equals(attachmentFilesPath)){
//设置邮件的正文文本
message.setContent(content, "text/html;charset=UTF-8");
}else{
//向multipart对象中添加邮件的各个部分内容,包括文本内容和附件
Multipart multipart = new MimeMultipart(); //添加邮件文本内容
BodyPart contentBodyPart = new MimeBodyPart();
contentBodyPart.setContent(content, "text/html;charset=utf-8");
multipart.addBodyPart(contentBodyPart); //添加邮件附件内容
BodyPart attachmentBodyPart = new MimeBodyPart();
String[] attachmentFiles = attachmentFilesPath.split(",");
for (String attachmentFile : attachmentFiles) {
if (attachmentFile != null && !"".equals(attachmentFile)) {
attachmentBodyPart = new MimeBodyPart(); //根据附件路径获取文件,
FileDataSource dataSource = new FileDataSource(new File(attachmentFile));
attachmentBodyPart.setDataHandler(new DataHandler(dataSource)); //MimeUtility.encodeWord可以避免文件名乱码
String strFileName=dataSource.getFile().getName();
attachmentBodyPart.setFileName(MimeUtility.encodeText(strFileName)); multipart.addBodyPart(attachmentBodyPart);
}
} //设置邮件的正文内容
message.setContent(multipart);
} //发送邮件
Transport.send(message);
}
}
| 邮箱类型 | SMTP服务器地址 | 普通端口 | SSL端口 | 服务器配置参考地址 |
| QQ邮箱 | smtp.qq.com | 587 | 465 | https://service.mail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=167 |
| 阿里企业邮箱 | smtp.qiye.aliyun.com | 25 | 465 | http://mailhelp.mxhichina.com/smartmail/detail.vm?knoId=5871700 |
| 网易163免费邮箱 | smtp.163.com | 25 | 465/994 | https://help.mail.163.com/faqDetail.do?code=d7a5dc8471cd0c0e8b4b8f4f8e49998b374173cfe9171305fa1ce630d7f67ac22dc0e9af8168582a |
| 网易企业邮箱 | smtp.qiye.163.com | 25 | 994 | https://qiye.163.com/help/client-profile.html |
| 网易免费企业邮箱 | smtp.ym.163.com | 25 | 994 | http://app.ym.163.com/ym/help/help.html |
tips:
QQ邮箱需先设置独立密码才能使用smtp功能(https://service.mail.qq.com/cgi-bin/help?subtype=1&&no=1001220&&id=28)。
QQ邮箱设置方法:设置--账户--账户安全--独立密码。
网易163免费邮箱同QQ邮箱一样,需先设置授权码才能使用smtp功能(https://help.mail.163.com/faqDetail.do?code=d7a5dc8471cd0c0e8b4b8f4f8e49998b374173cfe9171305fa1ce630d7f67ac24a2130dd2fad05b1)
网易163免费邮箱开启授权码方法:https://help.mail.163.com/faqDetail.do?code=d7a5dc8471cd0c0e8b4b8f4f8e49998b374173cfe9171305fa1ce630d7f67ac2cda80145a1742516
网易企业邮箱在开启客户端授权密码的功能时才需要设置客户端授权码:https://qiye.163.com/help/3f85a9.html
网易企业邮箱开启授权码方法:https://qiye.163.com/help/af988e.html
java发送邮件基础方法(另附部分主流邮箱服务器地址、端口及设置方法)的更多相关文章
- linux下通过iptables只允许指定ip地址访问指定端口的设置方法
这篇文章主要介绍了linux下通过iptables只允许指定ip地址访问指定端口的设置方法,需要的朋友可以参考下. 首先,清除所有预设置 iptables -F#清除预设表filter中的所有规则链的 ...
- ECS服务里或者阿里云服务器的二级域名设置方法
我们要实现的效果是,xuxinshuai.abc.com ,具体怎么实现,看下面的流程 第一步:备案域名要有,假如就是www.abc.com 第二步:网站的服务器是IIS的情况下,在部署网站时,需要设 ...
- 两个IP实现IIS和Apache公用80端口的设置方法
1. 打开命令提示符并确保您位于 X:\Inetpub\Adminscripts 文件夹(其中 X 是 IIS 安装驱动器)中.为此,请在命令提示符下键入以下命令行: X: CD \Inetpub ...
- Java发送邮件----自己封装的方法
发送邮件的封装类: package com.email; import java.util.Properties; import javax.mail.Authenticator; import ja ...
- Java Web(十三) 使用javamail进行发送邮件,(使用QQ,163,新浪邮箱服务器)
加油加油. --WH 一.发送邮件的原理 在了解其原理之前,先要知道两个协议,SMTP和POP3 SMTP:Simple Mail Transfer Protocol,即简单邮件传输协议,发送邮件的协 ...
- web开发(九) 使用javamail进行发送邮件,(使用QQ,163,新浪邮箱服务器)
在网上看见一篇不错的文章,写的详细. 以下内容引用那篇博文.转载于<http://www.cnblogs.com/whgk/p/6506027.html>,在此仅供学习参考之用. 一.发送 ...
- 三菱plc编程电缆通讯端口设置方法(转载)
三菱plc编程电缆通讯端口如何设置?三菱plc编程电缆通讯端口设置方法 时间:2015-10-21 05:09:20编辑:电工栏目:三菱plc 导读:三菱plc编程电缆通讯端口的设置方法,三菱plc上 ...
- Atitit 表达式原理 语法分析 原理与实践 解析java的dsl 递归下降是现阶段主流的语法分析方法
Atitit 表达式原理 语法分析 原理与实践 解析java的dsl 递归下降是现阶段主流的语法分析方法 于是我们可以把上面的语法改写成如下形式:1 合并前缀1 语法分析有自上而下和自下而上两种分析 ...
- Java语言基础之方法的设计
开发遵循原则之一: DRY原则:Don't Repeat Yourself(不要重复你自己的代码) 原因:重复意味着维护成本的增大 public static void main(String[] a ...
随机推荐
- Jumpserver v2.0.0 使用说明
官方文档:http://www.jumpserver.org/ — 登录脚本 — 1.1 使用paramiko原生ssh协议登录后端主机(原来版本使用pexpect模拟登录) 1.2 新增使用别名或备 ...
- nyoj 25-A Famous Music Composer(字符串)
25-A Famous Music Composer 内存限制:64MB 时间限制:1000ms Special Judge: No accepted:4 submit:9 题目描述: Mr. B i ...
- ArcGIS API For Javascript :双屏(多屏)地图联动的方法
在遇到地图对比的应用场景下,我们需要双屏地图或者多屏地图来满足我们的业务需求. 解决思路:首先生成两份(多份)地图,然后通过监听地图缩放拖拽,用地图四至将不同的地图对象做绑定,实现多地图联动. 前端部 ...
- caffe网络在多线程中无法使用GPU的解决方案 | cpp caffe net run in multiple threads
本文首发于个人博客https://kezunlin.me/post/8d877e63/,欢迎阅读! cpp caffe net run in multiple threads Guide set_mo ...
- .NET Core 3.0 使用Nswag生成Api文档和客户端代码
摘要 在前后端分离.Restful API盛行的年代,完美的接口文档,成了交流的纽带.在项目中引入Swagger (也称为OpenAPI),是种不错的选择,它可以让接口数据可视化.下文将会演示 利用N ...
- 性能测试——记weblogic 连接池满无法链接故障诊断过程
记weblogic 连接池满无法链接故障诊断过程 前段时间公司负责建行的一个票据系统在,上线前几个分行试运行环境下,每天后台日志都会报oracle.jdbc.xa.OracleXAException, ...
- 微信中使用popup等弹窗组件时点击输入框input键盘弹起导致IOS中按钮无效处理办法
因为在IOS微信中在弹窗中使用input使键盘弹起,使弹窗的位置上移,当键盘关闭时页面还在上面,弹窗位移量也在上面,只有下拉才能回到原位,这样弹窗也消失了.我的处理办法就是在键盘弹起和消失的时候,让页 ...
- SQL查询优化实践
为什么要优化 系统的吞吐量瓶颈往往出现在数据库的访问速度上,即随着应用程序的运行,数据库的中的数据会越来越多,处理时间会相应变慢,且数据是存放在磁盘上的,读写速度无法和内存相比 如何优化 设计数据库时 ...
- Java方法之定义形式及可变参数
目录 Java方法之定义形式及可变参数 方法调用 使用static修饰的方法 没有static修饰的方法 方法的定义格式 无参无返 无参有返 有参无返 有参有返 形参个数可变的方法 采用数组形参来定义 ...
- [ASP.NET Core 3框架揭秘] 异步线程无法使用IServiceProvider?
标题反映的是上周五一个同事咨询我的问题,我觉得这是一个很好的问题.这个问题有助于我们深入理解依赖注入框架在ASP.NET Core中的应用,以及服务实例的生命周期. 一.问题重现 我们通过一个简单的实 ...