java实现发送一封带有附件的邮件
java实现发送一封带有附件的邮件
java实现一封带有附件的邮件
继上一篇javamail发邮件的博客接着写,如何实现发送一封带有附件的邮件
直接上代码
import java.io.File;
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.Address;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.Multipart;
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 MailFileSendTest {
public static void main(String[] args) throws Exception {
File affix1 = new File("d:/ceshi.xlsx");
List tempList = new ArrayList();
tempList.add(affix1);
//发送邮件
String fileName1 = "测试附件" ; //新文件名字
String sendContent = "您好,你的订单统计表已经给您发送,详见附件!";//正文
String mainTitle = "测试附件T-2";//标题
sendFileMail(mainTitle, sendContent, fileName1, tempList, "1********[email protected]");
}
/**
* 发送带有附件的邮件
*
* @param mailTitle
* @param sendContent
* @param attachFileList
* @Description:
* @author
* @date 2019年9月25日
*/
public static void sendFileMail(String mailTitle, String sendContent, String fileName, List attachFileList,String tomail) {
Properties prop = new Properties();
prop.put("mail.transport.protocol", "smtp");
prop.put("mail.smtp.host", "smtp.163.com");
prop.put("mail.smtp.auth", "true");
final String smtpPort = "465";
prop.setProperty("mail.smtp.port", smtpPort);
prop.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
prop.setProperty("mail.smtp.socketFactory.fallback", "false");
prop.setProperty("mail.smtp.socketFactory.port", smtpPort);
Session session = Session.getInstance(prop);
try {
// 发送邮件
send(session, tomail, mailTitle, sendContent, attachFileList);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 发送带附件的邮件
*
* @param session 发件人信息
* @param subject 邮件标题
* @param content 邮件内容
* @param recipients 收件人地址
*/
public static void send(Session session, String recipients, String subject, String content, List attachments) {
MimeMessage message = new MimeMessage(session);
try {
System.getProperties().setProperty("mail.mime.splitlongparameters", "false");
String EmailAccount = "*******@163.com";// 发件人的邮箱
String EmailPassword = "*********************";//客户端授权码***
// 创建多重消息
Multipart multipart = new MimeMultipart();
message.setFrom(new InternetAddress(EmailAccount, "qc测试", "utf-8"));
// 邮件标题
message.setSubject(subject);
// 添加邮件正文
BodyPart contentPart = new MimeBodyPart();
contentPart.setContent(content, "text/html;charset=UTF-8");
multipart.addBodyPart(contentPart);
message.setSentDate(new Date());
// 创建邮件的接收者地址,并设置到邮件消息中
Address to = new InternetAddress(recipients);
// Message.RecipientType.TO属性表示接收者的类型为TO
message.setRecipient(Message.RecipientType.TO, to);
// 添加附件的内容
if (attachments != null) {
for (int i = 0; i < attachments.size(); i++) {
BodyPart attachmentBodyPart = new MimeBodyPart();
DataSource source = new FileDataSource(attachments.get(i));
attachmentBodyPart.setDataHandler(new DataHandler(source));
// MimeUtility.encodeWord可以避免文件名乱码
attachmentBodyPart.setFileName(MimeUtility.encodeText(attachments.get(i).getName()));
multipart.addBodyPart(attachmentBodyPart);
}
}
System.out.println("发件人邮箱:" + EmailAccount);
System.out.println("发件人的密码:" + EmailPassword);
// 发送完整消息
message.setContent(multipart);
Transport transport = session.getTransport();
transport.connect(EmailAccount, EmailPassword);// 敲门开门
transport.sendMessage(message, message.getAllRecipients());// 送到对方手里
} catch (Exception e) {
e.printStackTrace();
}
}
}
效果如下
java实现发送一封带有附件的邮件相关教程
JAVA对象布局之对象头(Object Header)
JAVA对象布局之对象头(Object Header) 由于Java面向对象的思想,在JVM中需要大量存储对象,存储时为了实现一些额外的功能,需要在对象中添加一些标记字段用于增强对象功能 。在学习并发编程知识 synchronized 时,我们总是难以理解其实现原理,因为偏向锁、轻
Java 优雅判空的方法
Java 优雅判空的方法 为了避免 NullPointerException 出现,我们经常会进行如下操作。 if (object != null) { object.do();} 那么每次使用一个不确定的对象,都需要进行一次判空。so: 可能你会想,项目中肯定不止你一个人会这样一顿操作,然后按下 Ctrl+Shift
java数据结构和算法——图的深度优先(DFS)遍历
java数据结构和算法——图的深度优先(DFS)遍历 目录 一、图的遍历介绍 二、图的深度优先搜索(Depth First Search) 三、图的深度优先遍历算法步骤 四、图的深度优先遍历示例需求 五、图的深度优先遍历代码示例 所谓图的遍历,即是对结点的访问。一个图有那么
利用keepalived+arptables+ipvsadm实现LVS负载均衡的高可用集群
利用keepalived+arptables+ipvsadm实现LVS负载均衡的高可用集群 什么是LVS负载均衡 在生产环境中往往有很庞大的访问量,这种情况下一台服务器是满足不了的,需要利用调度器来控制多台服务器的访问,并且将负载压力均衡分担。 实验环境 准备四台可以互相ping通
java 插入排序
java 插入排序 java插入排序 ********************* 插入排序 算法描述:将无序数组中的元素按数值大小插入到有序队列,逐渐增大有序队列,直至全部插入完成 空间复杂度: 只需要一个额外辅助空间,o(1) 平均时间复杂度: o(n^2) 算法稳定性: 相同大小元素的
zookeeper实现分布式锁的原理及基于zookeeper的 curator 客户端
zookeeper实现分布式锁的原理及基于zookeeper的 curator 客户端实现分布式锁 Zookeeper实现分布式锁的原理: 1、利用Zookeeper的瞬时有序节点的特性; 2、多线程并发创建瞬时节点时,得到有序的序列; 3、序号最小的线程获得锁; 4、其他的线程则监听自己序号
JavaScript回顾01:函数和对象
JavaScript回顾01:函数和对象 文章目录 4 函数 4.1 定义函数 4.2 变量的作用域 4.3 方法 5 内部对象 5.1 Date 5.2 JSON 5.3 Ajax 6 面向对象编程 6.1 什么是面向对象 6.2 继承 4 函数 方法:对象(属性,方法) 函数:对象外 1.定义方式1 function 函数名(){
python实现Bresenham 算法
python实现Bresenham 算法 Bresenham 算法由 Bresenham 在 1965 年提出,是计算机图形学领域中使用最为广泛的线段光栅化算法。该算法最初是为数字绘图仪设计的,由于它也适用于光栅图形显示器,后来被广泛应用于直线的光栅化与其他一些应用。 为方便讨论,这