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 ...
随机推荐
- 简单的 smartpointer
水水地 发第一篇blog, 瘦身版的smartpointer. template <typename T> class CountedPtr { private: T* ptr; long ...
- 用 GitBook 创建一本书
用 GitBook 创建一本书 Gitbook 首先是一个软件,它使用 Git 和 Markdown 来编排书本,如果你没有听过 Git 和 Markdown,那么 gitbook 可能不适合你直接入 ...
- 菜鸟手把手学Shiro之shiro授权流程
一.首先我们从整体去看一下授权流程,然后再根据源码去分析授权流程.如下图: 流程如下: 1.首先调用 Subject.isPermitted*/hasRole*接口,其会委托给 SecurityMan ...
- Composer依赖管理 – PHP的利器
别再到处搜PHP类扩展包了,对于现代语言而言,包管理器基本上是标配.Java 有 Maven,Python 有 pip,Ruby 有 gem,Nodejs 有 npm.PHP 的则是 PEAR,不过 ...
- mac 安装zmap
mac安装zmap有两种方式 1.命令行安装 brew install zmap export PATH=$PATH:/usr/local/sbin 很多人安装的时候只有第一步,然后直接bash:zm ...
- vsftpd cmds_allowed 权限控制
vsftpd cmds_allowed cmds_allowed=ABOR,CWD,LIST,MDTM,MKD,NLST, PASS,PASV,PORT,PWD,QUIT,RETR,RMD,RNFR, ...
- Oracle SQL command slash
We know that there is "commit" in oracle to submit all data in the session and used very c ...
- 关于小码哥kylin
技术格言: 用双手改变人生,用代码改变世界! 个人网站:http://www.isainttech.com QQ:56619556 Email:dragonsaint@qq.com 微信:kylin1 ...
- 在docker中加入加速器的方法
前提条件:在一台Linux中安装好了docker 目的:在docker中加如这入个加速器的目的,是让docker pull 时能速度快一点,但是好像docker push速度并没有加快. 换句话说,就 ...
- 品HashMap(java8)
前言 作为java开发人员,HashMap可谓是业务中的一把利器,9龙再次捡起这老生常谈的知识点,深入源码,细细品味. 首先,我们抛出几个关于HashMap的问题,带着问题去学习,就像捉迷藏一样有意思 ...