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 ...
随机推荐
- 1005 Spell It Right(20 分)
1005 Spell It Right(20 分) Given a non-negative integer N, your task is to compute the sum of all the ...
- nyoj 242-计算球体积 (pi*r*r*r*4/3)
242-计算球体积 内存限制:64MB 时间限制:3000ms 特判: No 通过数:21 提交数:74 难度:1 题目描述: 根据输入的半径值,计算球的体积. 输入描述: 输入数据有多组,每组占一行 ...
- 力扣(LeetCode)计数质数 个人题解
统计所有小于非负整数 n 的质数的数量. 示例: 输入: 10 输出: 4 解释: 小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 . 一般方法,也就是一般人都会用的,将数从2到它本 ...
- mysql注意:
本例测试数据表 CREATE TABLE `test_student` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键自增id' ...
- 拎壶学python3-----(5)python之格式化输出
一.格式化输入可以减少代码开发量如下是格式化输出: 上边的%是什么意思呢?%是一个占位符,s代表字符串的类型. 二.我们看下边的例子 看使用%d %i的用法. %d %i 这种格式化只能用数字来填补占 ...
- Spring项目中优雅的异常处理
前言 如今的Java Web项目多是以 MVC 模式构建的,通常我们都是将 Service 层的异常统一的抛出,包括自定义异常和一些意外出现的异常,以便进行事务回滚,而 Service 的调用者 Co ...
- 高性能消息队列(MQ)Kafka 简单由来介绍(1)
Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写.Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据. 这种动作(网页浏 ...
- React躬行记(14)——测试框架
测试不仅可以发现和预防问题,还能降低风险.减少企业损失.在React中,涌现了多种测试框架,本节会对其中的Jest和Enzyme做详细的讲解. 一.Jest Jest是由Facebook开源的一个测试 ...
- mysql中运用条件判断筛选来获取数据
### part1 单表查询 sql查询完整语法: select .. from .. where .. group by .. having .. order by .. limit .. 一.wh ...
- Web渗透测试流程
什么是渗透测试? 渗透测试 (penetration test)并没有一个标准的定义,国外一些安全组织达成共识的通用说法是:渗透测试是通过模拟恶意黑客的攻击方法,来评估计算机网络系统安全的一种评估方法 ...