SSL邮件发送(腾讯企业邮箱测试通过,可以支持多附件)
参考网址: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邮件发送(腾讯企业邮箱测试通过,可以支持多附件)的更多相关文章
- centos 邮件服务 腾讯企业邮箱(免费) 使用iRedmail 需要有公网的centos主机 发邮件协议:smtp 端口25 收邮件协议:pop3 端口110 iredmail安装配置 使用邮箱系统 第三十一节课
centos 邮件服务 腾讯企业邮箱(免费) 使用iRedmail 需要有公网的centos主机 发邮件协议:smtp 端口25 收邮件协议:pop3 端口110 iredmail安装配置 ...
- python使用smtplib和email发送腾讯企业邮箱邮件
公司每天要发送日报,最近没事搞了一下如何自动发邮件,用的是腾讯企业邮箱,跟大家分享一下我的研究过程吧. 以前弄的发邮件的是用qq邮箱发的,当时在网上查资料最后达到了能发图片,网页,自定义收件人展示,主 ...
- C#发送腾讯企业邮箱
腾讯企业邮箱客户端配置介绍 http://email-qq.cn/tengxun/201610303793.html?akvezc=smt0n2 POP3/SMTP协议 POP3/SMTP协议: 接收 ...
- Java + 腾讯企业邮箱 + javamail + SSL 发送邮件
说实话腾讯的企业邮箱真心不错! 腾讯企业邮箱官网:http://exmail.qq.com/login/ 新用户注册:http://exmail.qq.com/onlinesell/intro 点击开 ...
- 记一次邮件推送的坑,c#基于smtp使用腾讯企业邮箱发送邮件总是失败的原因
今天在弄企业邮箱推送的东西,原版代码是这样的 public void SendEmail(string title, string content) { try { MailMessage mailM ...
- 利用腾讯企业邮箱开放API获取账户未读邮件数初探
公司一直使用腾讯提供的免费企业邮箱服务,今天用管理员帐户登录后发现,原来现在腾讯的企业邮箱也开放了部分API 你可以通过开放接口实现以下功能: 数据同步 数据同步可以帮助你同步部门成员信息,你还可以创 ...
- 腾讯企业邮箱SMTP-邮件发送失败异常:“ SMTPSendFailedException:501 ϵͳÒÑÇ¿ÖÆ¿ªÆôÕʺÅÉý¼¶ÉèÖã¬ÇëµÇ¼e
这里我们在报警发送邮件用的是腾讯的企业邮箱,突然这两天没有报警邮件,很是奇怪 发送邮件报错 SMTP-邮件发送失败异常:“ SMTPSendFailedException:501 ϵͳÒÑÇ¿ÖÆ ...
- MVC4/5+jquery+bootstrap样式+dataTables+linq+WCF+EF6后台和前台的框架集合!好蛋疼哦!数据库支持MYSQL 和MSSQL,oracle。集成腾讯企业邮箱收邮件同步用户SSO登陆等功能。
花费了我好多心血,才做出来,下个项目准备用这个框架! 大家有没有做这方面的可以交流一下! 花费了我好多心血,才做出来,下个项目准备用这个框架! 大家有没有做这方面的可以交流一下! 花费了我好多心血,才 ...
- 腾讯企业邮箱又一次隐藏了qq邮件列表的入口
今天登陆腾讯企业邮箱,发现腾讯企业邮箱又一次隐藏了qq邮件列表的入口,很不方便操作, 我们切换到工具箱选项,然后随便点击里面的一个工具,比如:企业网盘,然后看浏览器地址栏的地址如下:http://ex ...
随机推荐
- WPF使用路径(URI)引用资源文件
Uri uri = new Uri("pack://application:,,,/程序集名称;component/Resources/bj.png", UriKind.Absol ...
- python项目离线环境配置指南
参考文献: http://blog.csdn.net/candcplusplus/article/details/52156324 https://www.cnblogs.com/michael-xi ...
- PHP 验证IP的合法性
php验证IP的合法性! function get_ip(){ //判断服务器是否允许$_SERVER if(isset($_SERVER)){ if(isset($_SERVER[HTTP_X_FO ...
- OneZero第二周第四次站立会议(2016.3.31)
会议时间:2016年3月30日 13:00~13:20 会议成员:冉华,张敏,王巍,夏一鸣. 会议目的:汇报前一天工作,全体成员评论,确定会后修改内容或分配下一步任务. 会议内容: 1.前端,夏.张 ...
- BZOJ1815 SHOI2006有色图(Polya定理)
置换数量是阶乘级别的,但容易发现本质不同的点的置换数量仅仅是n的整数拆分个数,OEIS(或者写个dp或者暴力)一下会发现不是很大,当n=53时约在3e5左右. 于是暴力枚举点的置换,并且发现根据点的置 ...
- Tree Constructing CodeForces - 1003E(构造)
题意: 就是让构造一个直径为d的树 每个结点的度数不能超过k 解析: 先构造出一条直径为d的树枝 然后去遍历这条树枝上的每个点 为每个点在不超过度数和直径的条件下添加子嗣即可 #include & ...
- 【刷题】BZOJ 3745 [Coci2015]Norma
Description Input 第1行,一个整数N: 第2~n+1行,每行一个整数表示序列a. Output 输出答案对10^9取模后的结果. Sample Input 4 2 4 1 4 Sam ...
- 用Python建设企业认证和权限控制平台
目前大家对Python的了解更多来源是数据分析.AI.运维工具开发,在行业中使用Python进行web开发,同样也是非常受欢迎的,例如:FaceBook,豆瓣,知乎,饿了么等等,本文主要是介绍是利用P ...
- java旋转图片
/** * 旋转角度 * @param src 源图片 * @param angel 角度 * @return 目标图片 */ public static BufferedImage rotate(I ...
- POJ 3259 Wormholes(最短路径,求负环)
POJ 3259 Wormholes(最短路径,求负环) Description While exploring his many farms, Farmer John has discovered ...