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 ...
随机推荐
- nyoj 779-兰州烧饼 (ceil)
779-兰州烧饼 内存限制:64MB 时间限制:1000ms 特判: No 通过数:6 提交数:8 难度:1 题目描述: 烧饼有两面,要做好一个兰州烧饼,要两面都弄热.当然,一次只能弄一个的话,效率就 ...
- opencv 6 图像轮廓与图像分割修复 1 查找并绘制轮廓 寻找物体的凸包
查找并绘制轮廓 寻找轮廓(findContours)函数 绘制轮廓(drawContours()函数) 基础实例程序:轮廓查找 #include <opencv2/opencv.hpp> ...
- 【01】主函数main
java和C#非常相似,它们大部分的语法是一样的,但尽管如此,也有一些地方是不同的. 为了更好地学习java或C#,有必要分清它们两者到底在哪里不同. 首先,我们将探讨主函数main. java的主函 ...
- GeoServer 安装教程
准备内容 安装环境:win10*64位专业版 安装文件:geoserver-2.15.2 安装步骤 安装JDK 1.安装GeoServer是基于Java的环境,所以需要先装Jdk环境. 2.前往官网下 ...
- Redis 的底层数据结构(对象)
目前为止,我们介绍了 redis 中非常典型的五种数据结构,从 SDS 到 压缩列表,这都是 redis 最底层.最常用的数据结构,相信你也掌握的不错. 但 redis 实际存储键值对的时候,是基于对 ...
- css三大特效之优先级
1.什么是优先级作用:当多个选择器选中同一个标签,并且给同一个标签设置相同的属性时,如何层叠就由优先级来确定
- word2vec:CBOW和skip-gram模型
1.CBOW模型 之前已经解释过,无论是CBOW模型还是skip-gram模型,都是以Huffman树作为基础的.值得注意的是,Huffman树中非叶节点存储的中间向量的初始化值是零向量,而叶节点对应 ...
- ganglia 客户端部署
#!/bin/bash #配置参数 #serverIP=192.168.1.16 #network=ens32 #关闭selinux #setenforce #sed -i 's/SELINUX=en ...
- 天了噜,为什么外链css要放在头部,js要放在尾部?
我们最开始学前端的时候都会看到教程在处理外部css,js的时候会将css放在header中,js放在body的最后.为什么要这样子处理,今天参考一些资料好好分析下. 为什么外链css为什么要放头部? ...
- 小白学 Python 爬虫(10):Session 和 Cookies
人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...