参考网址:http://www.cnblogs.com/LUA123/p/5575134.html ,谢谢!

package net.common.utils.common;

import java.io.File;
import java.util.Date;
import java.util.List;
import java.util.Properties; import javax.mail.Authenticator;
import javax.mail.Message;
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 org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import com.sun.mail.util.MailSSLSocketFactory; /**
*
* 类描述: 用于SSL邮件发送,QQ企业邮箱测试通过。
*
*/
public class SslMailUtil { private final Logger logger = LoggerFactory.getLogger(SslMailUtil.class); private String account; // 登录用户名
private String pass; // 登录密码
private String host; // 服务器地址(邮件服务器)
private String port; // 端口
private String protocol = "smtp"; // 协议
private boolean isDebug = false;// 是否开启debug模式 public SslMailUtil(String account, String pass, String host, String port) {
super();
this.account = account;
this.pass = pass;
this.host = host;
this.port = port;
} class MyAuthenricator extends Authenticator {
String u = null;
String p = null; public MyAuthenricator(String u, String p) {
this.u = u;
this.p = p;
} protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(u, p);
}
} /**
* 发送邮件
*
* @param to
* 收件人
* @param subject
* 主题
* @param content
* 内容
*/
public void send(String to, String subject, String content) throws Exception {
this.send(null, to, subject, content, null);
} /**
* 发送邮件
*
* @param to
* 收件人
* @param subject
* 主题
* @param content
* 内容
* @param attachment
* 附件
*/
public void send(String to, String subject, String content, List<File> attachment) throws Exception {
this.send(null, to, subject, content, attachment);
} /**
* 发送邮件
*
* @param alias
* 发件人别名
* @param to
* 收件人
* @param subject
* 主题
* @param content
* 内容
* @param attachment
* 附件
*/
public void send(String alias, String to, String subject, String content, List<File> attachment) throws Exception {
Properties properties = this.getProperties();
// 使用SSL,企业邮箱必需, 开启安全协议
try {
// 邮件会话
Session session = this.getSession(properties);
// 设置邮件内容
MimeMessage mimeMessage = this.getMimeMessage(session, alias, to, subject, content, attachment);
// 发送邮件
Transport.send(mimeMessage);
} catch (Exception e) {
logger.error(e.toString());
throw e;
}
} private Properties getProperties() {
Properties properties = new Properties();
// 协议
properties.setProperty("mail.transport.protocol", protocol);
// 服务器
properties.setProperty("mail.smtp.host", this.host);
// 端口
properties.setProperty("mail.smtp.port", this.port);
// 使用smtp身份验证
properties.setProperty("mail.smtp.auth", "true");
properties.put("mail.smtp.ssl.enable", "true");
return properties;
} private Session getSession(Properties properties) throws Exception {
MailSSLSocketFactory mailSSLSocketFactory = new MailSSLSocketFactory();
mailSSLSocketFactory.setTrustAllHosts(true);
properties.put("mail.smtp.ssl.socketFactory", mailSSLSocketFactory);
Session session = Session.getDefaultInstance(properties, new MyAuthenricator(this.account, this.pass));
session.setDebug(this.isDebug);
return session;
} private MimeMessage getMimeMessage(Session session, String alias, String to, String subject, String content,
List<File> attachment) throws Exception {
MimeMessage mimeMessage = new MimeMessage(session);
// 如果没有设置别名,则默认为发件人的邮箱账号
if (StringUtils.isBlank(alias)) {
alias = this.account;
}
//发件人账号以及别名
mimeMessage.setFrom(new InternetAddress(this.account, alias));
// 收件人
mimeMessage.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
// 主题
mimeMessage.setSubject(subject);
// 时间
mimeMessage.setSentDate(new Date());
// 容器类,可以包含多个MimeBodyPart对象
Multipart multipart = new MimeMultipart();
// MimeBodyPart可以包装文本,图片,附件
MimeBodyPart mimeBodyPart = new MimeBodyPart();
// HTML正文,可以添加多个附件
mimeBodyPart.setContent(content, "text/html; charset=UTF-8");
multipart.addBodyPart(mimeBodyPart);
if (attachment != null && !attachment.isEmpty()) {
for (File file : attachment) {
// 添加图片&附件

if (file.exists() && file.isFile()) {
  mimeBodyPart = new MimeBodyPart();
  mimeBodyPart.attachFile(file);
  multipart.addBodyPart(mimeBodyPart);
}

      }
}
// 设置邮件内容
mimeMessage.setContent(multipart);
// 仅仅发送文本
// mimeMessage.setText(content);
mimeMessage.saveChanges();
return mimeMessage;
} /**
* 获得:是否开启debug模式
*
* @return the isDebug
*/
public final boolean isDebug() {
return isDebug;
} /**
* 设置:是否开启debug模式
*
* @param isDebug
* the isDebug to set
*/
public final void setDebug(boolean isDebug) {
this.isDebug = isDebug;
} }

SSL邮件发送(腾讯企业邮箱测试通过,可以支持多附件)的更多相关文章

  1. centos 邮件服务 腾讯企业邮箱(免费) 使用iRedmail 需要有公网的centos主机 发邮件协议:smtp 端口25 收邮件协议:pop3 端口110 iredmail安装配置 使用邮箱系统 第三十一节课

    centos   邮件服务  腾讯企业邮箱(免费) 使用iRedmail 需要有公网的centos主机 发邮件协议:smtp 端口25  收邮件协议:pop3 端口110  iredmail安装配置 ...

  2. python使用smtplib和email发送腾讯企业邮箱邮件

    公司每天要发送日报,最近没事搞了一下如何自动发邮件,用的是腾讯企业邮箱,跟大家分享一下我的研究过程吧. 以前弄的发邮件的是用qq邮箱发的,当时在网上查资料最后达到了能发图片,网页,自定义收件人展示,主 ...

  3. C#发送腾讯企业邮箱

    腾讯企业邮箱客户端配置介绍 http://email-qq.cn/tengxun/201610303793.html?akvezc=smt0n2 POP3/SMTP协议 POP3/SMTP协议: 接收 ...

  4. Java + 腾讯企业邮箱 + javamail + SSL 发送邮件

    说实话腾讯的企业邮箱真心不错! 腾讯企业邮箱官网:http://exmail.qq.com/login/ 新用户注册:http://exmail.qq.com/onlinesell/intro 点击开 ...

  5. 记一次邮件推送的坑,c#基于smtp使用腾讯企业邮箱发送邮件总是失败的原因

    今天在弄企业邮箱推送的东西,原版代码是这样的 public void SendEmail(string title, string content) { try { MailMessage mailM ...

  6. 利用腾讯企业邮箱开放API获取账户未读邮件数初探

    公司一直使用腾讯提供的免费企业邮箱服务,今天用管理员帐户登录后发现,原来现在腾讯的企业邮箱也开放了部分API 你可以通过开放接口实现以下功能: 数据同步 数据同步可以帮助你同步部门成员信息,你还可以创 ...

  7. 腾讯企业邮箱SMTP-邮件发送失败异常:“ SMTPSendFailedException:501 ϵͳÒÑÇ¿ÖÆ¿ªÆôÕʺÅÉý¼¶ÉèÖã¬ÇëµÇ¼e

    这里我们在报警发送邮件用的是腾讯的企业邮箱,突然这两天没有报警邮件,很是奇怪 发送邮件报错 SMTP-邮件发送失败异常:“ SMTPSendFailedException:501 ϵͳÒÑÇ¿ÖÆ ...

  8. MVC4/5+jquery+bootstrap样式+dataTables+linq+WCF+EF6后台和前台的框架集合!好蛋疼哦!数据库支持MYSQL 和MSSQL,oracle。集成腾讯企业邮箱收邮件同步用户SSO登陆等功能。

    花费了我好多心血,才做出来,下个项目准备用这个框架! 大家有没有做这方面的可以交流一下! 花费了我好多心血,才做出来,下个项目准备用这个框架! 大家有没有做这方面的可以交流一下! 花费了我好多心血,才 ...

  9. 腾讯企业邮箱又一次隐藏了qq邮件列表的入口

    今天登陆腾讯企业邮箱,发现腾讯企业邮箱又一次隐藏了qq邮件列表的入口,很不方便操作, 我们切换到工具箱选项,然后随便点击里面的一个工具,比如:企业网盘,然后看浏览器地址栏的地址如下:http://ex ...

随机推荐

  1. 打包spring项目遇到的坑 Unable to locate Spring NamespaceHandler for XML schema ……shcema/context 产生的原因及解决方法

    图1 图2 问题原因:导致该问题的原因就是打包的时候,同时将 spring-context 和 spring-aop包提取到了我们的程序应用的包中,在package过程中,这2个依赖包的 XML sc ...

  2. Node.js使用UDP通讯

    Node.js 的 dgram 模块可以方便的创建udp服务,,以下是使用 dgram模块创建的udp服务和客户端的一个简单例子. 一.创建 UDP Server var dgram = requir ...

  3. 一条sql语句搞定基于mysql的sql执行顺序的基本理解

    对数据库基本操作是每个程序员基本功,如何理解并快速记住sql执行的顺序呢,其实一条复杂的sql就能搞定: SELECT DISTINCT <select_list> FROM <le ...

  4. DELPHI 字符串与日期格式互转

    procedure TForm1.Button1Click(Sender: TObject); var D:TDateTime; s:string; begin D:=VarToDateTime('0 ...

  5. C# 爬虫小程序

    设计思路 主要基于Http Get请求网页数据,进行分析.涉及递归调用,多线程提高效率,守护线程等. 相关技术 抽象类 多线程 队列 Http Get请求 字符串解析 项目结构 AbsChain 职责 ...

  6. 51nod 1476 括号序列的最小代价(贪心+优先队列)

    题意 我们这有一种仅由"(",")"和"?"组成的括号序列,你必须将"?"替换成括号,从而得到一个合法的括号序列. 对于 ...

  7. 使用VBA批量转换Excel格式,由.xls转换成.xlsx

    问题分析: Excel2007以前的格式是.xls,之后的格式是.xlsx.打开单独的一个Excel文档,使用“另存为”功能,可以很轻松的转换格式.但是面对几百个Excel表这样就太累了,搜索很久,也 ...

  8. 普通平衡树Treap(含旋转)学习笔记

    浅谈普通平衡树Treap 平衡树,Treap=Tree+heap这是一个很形象的东西 我们要维护一棵树,它满足堆的性质和二叉查找树的性质(BST),这样的二叉树我们叫做平衡树 并且平衡树它的结构是接近 ...

  9. BZOJ5093 [Lydsy1711月赛]图的价值 【第二类斯特林数 + NTT】

    题目链接 BZOJ5093 题解 点之间是没有区别的,所以我们可以计算出一个点的所有贡献,然后乘上\(n\) 一个点可能向剩余的\(n - 1\)个点连边,那么就有 \[ans = 2^{{n - 1 ...

  10. 置换群和Burnside引理,Polya定理

    定义简化版: 置换,就是一个1~n的排列,是一个1~n排列对1~n的映射 置换群,所有的置换的集合. 经常会遇到求本质不同的构造,如旋转不同构,翻转交换不同构等. 不动点:一个置换中,置换后和置换前没 ...