ssl多人多附件多格式邮件发送
package com.dfmy.util;
import java.io.File;
import java.security.Security;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.Authenticator;
import javax.mail.BodyPart;
import javax.mail.Message;
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;
import org.junit.Test; /**
* javaMail的邮件工具类
*
*/
public class sendEmailUtils {
/**
* 使用加密的方式,利用465端口进行传输邮件,开启ssl
* @param to 收件人邮箱
* @param message 发送的消息
*/
@SuppressWarnings("restriction")
public static void sendEmil(String to, String subject,String message,String html,List<File> files ) {
try {
Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";
//设置邮件会话参数
Properties props = new Properties();
//邮箱的发送服务器地址
props.setProperty("mail.smtp.host", "smtp.exmail.qq.com");
props.setProperty("mail.smtp.socketFactory.class", SSL_FACTORY);
props.setProperty("mail.smtp.socketFactory.fallback", "false");
//邮箱发送服务器端口,这里设置为465端口
props.setProperty("mail.smtp.port", "465");
props.setProperty("mail.smtp.socketFactory.port", "465");
props.put("mail.smtp.auth", "true");
final String username = "echo@luotuowenxueshe.cn";
final String password = "Wxdlt1314";
//获取到邮箱会话,利用匿名内部类的方式,将发送者邮箱用户名和密码授权给jvm
Session session = Session.getDefaultInstance(props, new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
});
//通过会话,得到一个邮件,用于发送
Message msg = new MimeMessage(session);
//设置发件人
msg.setFrom(new InternetAddress("echo@luotuowenxueshe.cn"));
//设置收件人,to为收件人,cc为抄送,bcc为密送
msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to, false));
msg.setRecipients(Message.RecipientType.CC, InternetAddress.parse(to, false));
msg.setRecipients(Message.RecipientType.BCC, InternetAddress.parse(to, false)); //设置发送的日期
msg.setSentDate(new Date()); //设置邮件主题
msg.setSubject(subject); //设置邮件消息
// msg.setText(message); /**/ //整封邮件的MINE消息体
MimeMultipart msgMultipart = new MimeMultipart("mixed");//混合的组合关系
//设置邮件的MINE消息体
msg.setContent(msgMultipart); //related
MimeMultipart relatedPart = new MimeMultipart("related"); //alternative
MimeMultipart alternativePart = new MimeMultipart("alternative"); //
MimeBodyPart relatedcontent = new MimeBodyPart();
MimeBodyPart alternativecontent = new MimeBodyPart(); //
relatedcontent.setContent(relatedPart);
alternativecontent.setContent(alternativePart); if (message != null && message!="") {
//纯文本消息
BodyPart textpart = new MimeBodyPart();
textpart.setText(message);
alternativePart.addBodyPart(textpart);
} if (html != null && html != "") {
//html代码部分
MimeBodyPart htmlPart = new MimeBodyPart();
//html代码
htmlPart.setContent(html,"text/html;charset=utf-8");
alternativePart.addBodyPart(htmlPart);
} //html中嵌套的图片部分
//MimeBodyPart imgPart = new MimeBodyPart();
//正文添加图片和html代码
//relatedPart.addBodyPart(imgPart);
//图片代码
//imgPart.setHeader("Content-Location", "http://www.luotuowenxueshe.cn/upload/avatar/0/13.jpg"); //附件
// 添加附件的内容
if (null != files && files.size() != 0) {
for (File file : files) {
MimeBodyPart attachmentBodyPart = new MimeBodyPart();
DataSource source = new FileDataSource(file);
attachmentBodyPart.setDataHandler(new DataHandler(source));
//MimeUtility.encodeWord可以避免文件名乱码
attachmentBodyPart.setFileName(MimeUtility.encodeWord(file.getName()));
//把附件加入到 MINE消息体中
msgMultipart.addBodyPart(attachmentBodyPart);
}
} //把内容加入到 MINE消息体中
//relatedPart.addBodyPart(alternativecontent);
msgMultipart.addBodyPart(alternativecontent); //生成文件邮件
msg.saveChanges(); /**/
//调用Transport的send方法去发送邮件
Transport.send(msg);
} catch (Exception e) {
e.printStackTrace();
}
} @Test
public void testsend(){ String to ="1334663563@qq.com,18293169616@163.com";
String subject ="测试主题";
String text ="测试文本内容aaa111";
String html ="<span style='color:red'>中文呵呵5464646kl;kd</span> <img src='http://www.luotuowenxueshe.cn/upload/avatar/0/13.jpg'>";
File testFile=new File("D:\\test/123.txt");
File testFileimg=new File("D:\\test/93438.jpg");
File mydoc=new File("D:\\test/mydoc1.doc"); List<File> files=new ArrayList<File>(); files.add(testFile);
files.add(testFileimg);
files.add(mydoc); sendEmil(to, subject, text,html, files);
} }
ssl多人多附件多格式邮件发送的更多相关文章
- Python添加邮件附件并通过邮件发送测试报告
import smtplib from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText c ...
- System.Net.Mail 邮件发送示例
前言:OA自动发送邮件的程序不好使,SQL Server 存储过程邮件发送程序好使,但是不利于标准化和维护,于是觉得是适合找些“轮子”武装一下.想起之前学习过System.Net.Mail ,于是再次 ...
- python学习笔记(SMTP邮件发送)
想着给框架添加邮件发送功能.所以整理下python下邮件发送功能 首先python是支持邮件的发送.内置smtp库.支持发送纯文本.HTML及添加附件的邮件 之后是邮箱.像163.qq.新浪等邮箱默认 ...
- java mail邮件发送(带附件) 支持SSL
java mail邮件发送(带附件)有三个类 MailSenderInfo.java package mail; import java.util.Properties; import java.ut ...
- 利用springframework+javax.mail发邮件(普通邮件、带附件邮件、HTML格式邮件)
Spring提供了发送电子邮件的支持,可以发送普通邮件.带附件邮件.HTML格式邮件,甚至还可以使用Velocity模板定制化邮件内容. 一.引入相关的库 1 2 3 4 5 6 7 8 9 10 1 ...
- SSL邮件发送(腾讯企业邮箱测试通过,可以支持多附件)
参考网址:http://www.cnblogs.com/LUA123/p/5575134.html ,谢谢! package net.common.utils.common; import java. ...
- 基于javaMail的邮件发送--excel作为附件
基于JavaMail的Java邮件发送 Author xiuhong.chen@hand-china.com Desc 简单邮件发送 Date 2017/12/8 项目中需要根据物料资质的状况实时给用 ...
- Java 基于javaMail的邮件发送(支持附件)
基于JavaMail的Java邮件发送Author xiuhong.chen@hand-china.com Desc 简单邮件发送 Date 2017/12/8 项目中需要根据物料资质的状况实时给用户 ...
- JavaMail实现带附件的收发邮件
一.前言 参考博客: http://blog.csdn.net/xietansheng/article/details/51722660 http://www.cnblogs.com/HigginCu ...
随机推荐
- Redis的高可用详解:Redis哨兵、复制、集群的设计原理,以及区别
谈到Redis服务器的高可用,如何保证备份的机器是原始服务器的完整备份呢?这时候就需要哨兵和复制. 哨兵(Sentinel):可以管理多个Redis服务器,它提供了监控,提醒以及自动的故障转移的功能. ...
- spark MLlib 概念 2:Stratified sampling 层次抽样
定义: In statistical surveys, when subpopulations within an overall population vary, it is advantageou ...
- spark 笔记 5: SparkContext,SparkConf
SparkContext 是spark的程序入口,相当于熟悉的'main'函数.它负责链接spark集群.创建RDD.创建累加计数器.创建广播变量. ) scheduler.initialize(ba ...
- ActiveMQ配置文档
本文介绍一对一.一对多.持久化.非持久化消息配置方式 一.创建项目 导入jar 二.创建MQ.xml <!-- 配置JMS连接工厂 --> <bean id="connec ...
- FusionCharts的属性
FusionCharts 的 XML标签属性有一下四种数据类型 * Boolean - 布尔类型,只能为1或者0.例如:<graph showNames='1′ > * Number - ...
- [flask]jinjia2处理表单-实现搜索界面
思路: 通过flask-wtf创建forms表单类 在app.py中创建search_name()视图函数,实例化form表单类,将通过render_template将form传给html模板 创建h ...
- GIS开源程序收集
每一个项目包含以下信息: 名称 主题 分类 描述 开始时间 语言 许可 演示网址 项目网址 成熟度 活跃度 评价 分类包括:GIS基础函数库.GIS控件.GIS桌面程序.GIS数据引擎.WEBGI ...
- ArcGISDynamicMapServiceLayer 和 ArcGISTiledMapServiceLayer 区别
ArcGISDynamicMapServiceLayer(动态地图服务)通常用于实时显示经常变化的数据,支持控制单个图层可见性,可动态投影.但缺点是显示效果较差,整个服务出图较慢:ArcGISTile ...
- 在java poi导入Excel通用工具类示例详解
转: 在java poi导入Excel通用工具类示例详解 更新时间:2017年09月10日 14:21:36 作者:daochuwenziyao 我要评论 这篇文章主要给大家介绍了关于在j ...
- Networking 基本术语/概念
目录 文章目录 目录 基本概念 冲突域(Collision Domain) 广播域(Broadcast Domain) 冲突域与广播域的区别 IP 网络数据传输方式 物理网络设备 发展简述 中继器(R ...