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多人多附件多格式邮件发送的更多相关文章

  1. Python添加邮件附件并通过邮件发送测试报告

    import smtplib from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText c ...

  2. System.Net.Mail 邮件发送示例

    前言:OA自动发送邮件的程序不好使,SQL Server 存储过程邮件发送程序好使,但是不利于标准化和维护,于是觉得是适合找些“轮子”武装一下.想起之前学习过System.Net.Mail ,于是再次 ...

  3. python学习笔记(SMTP邮件发送)

    想着给框架添加邮件发送功能.所以整理下python下邮件发送功能 首先python是支持邮件的发送.内置smtp库.支持发送纯文本.HTML及添加附件的邮件 之后是邮箱.像163.qq.新浪等邮箱默认 ...

  4. java mail邮件发送(带附件) 支持SSL

    java mail邮件发送(带附件)有三个类 MailSenderInfo.java package mail; import java.util.Properties; import java.ut ...

  5. 利用springframework+javax.mail发邮件(普通邮件、带附件邮件、HTML格式邮件)

    Spring提供了发送电子邮件的支持,可以发送普通邮件.带附件邮件.HTML格式邮件,甚至还可以使用Velocity模板定制化邮件内容. 一.引入相关的库 1 2 3 4 5 6 7 8 9 10 1 ...

  6. SSL邮件发送(腾讯企业邮箱测试通过,可以支持多附件)

    参考网址:http://www.cnblogs.com/LUA123/p/5575134.html ,谢谢! package net.common.utils.common; import java. ...

  7. 基于javaMail的邮件发送--excel作为附件

    基于JavaMail的Java邮件发送 Author xiuhong.chen@hand-china.com Desc 简单邮件发送 Date 2017/12/8 项目中需要根据物料资质的状况实时给用 ...

  8. Java 基于javaMail的邮件发送(支持附件)

    基于JavaMail的Java邮件发送Author xiuhong.chen@hand-china.com Desc 简单邮件发送 Date 2017/12/8 项目中需要根据物料资质的状况实时给用户 ...

  9. JavaMail实现带附件的收发邮件

    一.前言 参考博客: http://blog.csdn.net/xietansheng/article/details/51722660 http://www.cnblogs.com/HigginCu ...

随机推荐

  1. Day1_Python基础一

    一.基本认识 1.计算机基础 CPU:计算 内存:缓存 硬盘:存储 操作系统:硬件与软件的桥梁 应用程序:应用的平台 2.Python的历史 1989年龟叔,追求清晰.简单.优美的原则. 主要领域:云 ...

  2. 介绍一下 NDK?

    1.NDK 是一系列工具的集合 NDK 提供了一系列的工具,帮助开发者快速开发 C(或 C++)的动态库,并能自动将 so 和 java 应用一起打包成 apk.NDK 集成了交叉编译器,并提供了相应 ...

  3. 问题:unknown error: call function result missing 'value' 解决方法

    问题:unknown error: call function result missing 'value' 页面也没有 填充信息 原因是:安装与chrome和对应的chromedriver版本问题 ...

  4. SQL查询的嵌套

    SQL查询过程中,可以将查询嵌套为表,嵌套时需要给每个派生出来的表一个自己的别名. 如图:

  5. KVM + LinuxBridge 的网络虚拟化解决方案实践

    目录 文章目录 目录 前言 Linux bridge 的基本操作 创建 Bridge 将 veth pair 连上 Bridge 为 Bridge 配置 IP 地址 将物理网卡接口设备挂靠 Bridg ...

  6. 分布式任务celery

    Celery的架构由三部分组成,消息中间件(message broker),任务执行单元(worker)和任务执行结果存储(task result store)组成. 消息中间件 Celery本身不提 ...

  7. 依赖注入——angular

    在Angular中创建一个对象时,需要依赖另一个对象,这是代码层的一种依赖关系,当这种依赖被声明后,Angular通过injector注入器将所依赖的对象进行注入操作. 一.依赖注入的原理 看下面的示 ...

  8. OpenCV 中获取图像或矩阵最大、最小值的简便方法

    C++: void minMaxLoc(InputArray src, double* minVal, double* maxVal=0, Point* minLoc=0, Point* maxLoc ...

  9. 从git上pull下的代码,执行时提示:ModuleNotFoundError: No module named '......',解决方法如下:

    方法一: 如果没有安装,如下: 1.PyCharm : file-> setting->Project interpreter–>package2.右侧有个+ 点击3.进入后 搜索p ...

  10. Python学习之表的数据类型

    数据类型 数值类型 类型 大小 范围(有符号) 范围(无符号)unsigned约束 用途 TINYINT 1 字节 (-128,127) (0,255) 小整数值 SMALLINT 2 字节 (-32 ...