Java Mail 发送带有附件的邮件
1、小编用的是163邮箱发送邮件,所以要先登录163邮箱开启POP3/SMTP/IMAP服务方法:
2、下载所需的java-mail 包
https://maven.java.net/content/repositories/releases/com/sun/mail/javax.mail/
3、贴上代码
public class sendMail {
/**
* 创建邮件信息
* @param session
* @param fromAccount
* @param toAccount
* @param sourcePath xml文件目录 e.g. xml
* @param zipPath zip文件目录 e.g. zip/person.zip
*/
public static void CreateMessage(final Session session, final String fromAccount, final String toAccount,final String sourcePath,final String zipPath){
try{
final String subjectStr="圣诞节快乐";//主题
final StringBuffer contentStr=new StringBuffer();//内容
contentStr.append("<h2>Dear Friends,</h2><br/>");
contentStr.append("Christmas is coming up soon. <br/> Wish you lots of love, joy &happiness. happy christmas.");
contentStr.append("<h3>Regards,</h3>").append("<h3>ZHBIT College</h3>"); //创建默认的 MimeMessage 对象
final MimeMessage message = new MimeMessage(session);
//Set From: 头部头字段
message.setFrom(new InternetAddress(fromAccount));
//Set To: 头部头字段
message.addRecipient(Message.RecipientType.TO,
new InternetAddress(toAccount));
//Set Subject: 头部头字段
message.setSubject(subjectStr);
//创建消息部分
final BodyPart messageBodyPart = new MimeBodyPart();
//消息
messageBodyPart.setContent(contentStr.toString(),"text/html;charset=UTF-8");
//创建多重消息
final Multipart multipart = new MimeMultipart();
//设置文本消息部分
multipart.addBodyPart(messageBodyPart);
//为邮件添加多个附件
MimeBodyPart attachment = null;
final File source = new File(sourcePath);
if (!source.exists()) {
System.out.println(sourcePath + " not exists");
return;
}
final File[] files = source.listFiles();
for (final File f : files) {
attachment = new MimeBodyPart();
final String filePath =f.getPath();
//根据附件文件创建文件数据源
final DataSource ds = new FileDataSource(filePath);
attachment.setDataHandler(new DataHandler(ds));
//为附件设置文件名
attachment.setFileName(ds.getName());
multipart.addBodyPart(attachment);
} //添加zip附件
attachment = new MimeBodyPart();
//根据附件文件创建文件数据源
final DataSource ds = new FileDataSource(zipPath);
attachment.setDataHandler(new DataHandler(ds));
//为附件设置文件名
attachment.setFileName(ds.getName());
multipart.addBodyPart(attachment); // 发送完整消息
message.setContent(multipart);
// 发送消息
Transport.send(message); }catch (final MessagingException mex) {
mex.printStackTrace();
}
} /**
* 将源文件目录下的所有文件打包成zip文件
* @param sourceFilePath e.g. xml
* @param zipFilePath e.g. zip
* @param fileName e.g. person
* @return 返回生成的zip文件目录 e.g. zip/person.zip
*/
public static String tozip(final String sourceFilePath, final String zipFilePath,
final String fileName) {
final File sourceFile = new File(sourceFilePath);
FileInputStream fis = null;
BufferedInputStream bis = null;
FileOutputStream fos = null;
ZipOutputStream zos = null;
final String createZipPath=zipFilePath+ "/" + fileName+ ".zip"; if(!sourceFile.exists()){
System.out.println("待压缩的文件目录:" + sourceFilePath + "不存在");
} else {
try {
final File zipFile = new File(createZipPath);
final File[] sourceFiles = sourceFile.listFiles();
if(null == sourceFiles || sourceFiles.length < 1) {
System.out.println("待压缩的文件目录:" + sourceFilePath + " 里面不存在文件,无需压缩");
}else{
fos = new FileOutputStream(zipFile);
zos = new ZipOutputStream(new BufferedOutputStream(fos));
final byte[] bufs = new byte[1024*10];
for(int i=0;i<sourceFiles.length;i++) {
// 创建ZIP实体,并添加进压缩包
final ZipEntry zipEntry = new ZipEntry(sourceFiles[i].getName());
zos.putNextEntry(zipEntry);
// 读取待压缩的文件并写进压缩包里
fis = new FileInputStream(sourceFiles[i]);
bis = new BufferedInputStream(fis,1024*10);
int read = 0;
while((read=bis.read(bufs, 0, 1024*10)) != -1) {
zos.write(bufs, 0, read);
}
}
} } catch (final FileNotFoundException e) {
e.printStackTrace();
throw new RuntimeException(e);
} catch (final IOException e) {
e.printStackTrace();
throw new RuntimeException(e);
} finally {
try {
if (null != bis) {
bis.close();
}
if (null != zos) {
zos.close();
}
} catch (final IOException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
}
return createZipPath;
} public static void main(final String[] args) {
//收件人电子邮箱
final String toAccount = "********@qq.com";
//发件人的 邮箱 和 密码
final String fromAccount = "**********@163.com";
final String fromPassword = "**********";
//指定发送邮件的主机
final String host = "smtp.163.com"; //创建参数配置, 获取系统属性
final Properties properties = System.getProperties();
properties.setProperty("mail.transport.protocol", "smtp");
properties.setProperty("mail.smtp.host", host);
properties.put("mail.smtp.auth", "true"); //根据配置创建会话对象,获取默认session对象
final Session session = Session.getDefaultInstance(properties,new Authenticator(){
@Override
public PasswordAuthentication getPasswordAuthentication()
{
return new PasswordAuthentication(fromAccount, fromPassword); //发件人邮件用户名、密码
}
});
session.setDebug(true); final String xmlPath="xml";
final String zipPath=tozip(xmlPath,"zip","person");
CreateMessage(session,fromAccount,toAccount,xmlPath,zipPath);
} }
4、收到邮件
Java Mail 发送带有附件的邮件的更多相关文章
- 解决java mail发送TXT附件被直接显示在正文中的问题
这两天遇到一个问题,关于使用java mail发送邮件的问题. 详细是这样子的:我使用java mail发送异常报告邮件,邮件中有一个包含异常日志的附件,和关于设备信息的邮件正文.假设日志为log后缀 ...
- Android在发送带有附件的邮件
准备好工作了-下载最新的版本号JMail https://java.net/projects/javamail/pages/Home#Download_JavaMail_1.5.2_Release h ...
- java mail发送html格式的邮件
// 获取系统属性 Properties properties = System.getProperties(); // 设置邮件服务器 properties.setProperty("ma ...
- spring boot:发送带附件的邮件和html内容的邮件(以163.com邮箱为例/spring boot 2.3.2)
一,网站哪些情况下需要发送电子邮件? 作为一个电商网站,以下情况需要发邮件通知用户: 注册成功的信息 用邮箱接收验证码 找回密码时发链接 发送推广邮件 下单成功后的订单通知 给商户的对账单邮件 说明: ...
- 【Mail】JavaMail发送带附件的邮件(二)
上一篇讲了使用JavaMail发送普通邮件([Mail]JavaMail介绍及发送邮件(一)),本例讲发送复杂的邮件(带有附件的邮件) 生成一封复杂的邮件 新建一个JavaWeb的Maven工程,引入 ...
- java发送带附件的邮件
/** * java发送带附件的邮件 * 周枫 * 2013.8.10 */ package com.dsideal.Util; import javax.mail.*; import javax.m ...
- [Xcode 实际操作]八、网络与多线程-(7)使用MessageUI框架,创建并发送一封带有附件的邮件
目录:[Swift]Xcode实际操作 本文将演示如何使用MessageUI框架,创建并发送一封带有附件的邮件. 使用邮件编辑视图控制器(MFMailComposeViewController)实现邮 ...
- [SpringBoot] - 发送带附件的邮件
<!--发送email依赖--> <dependency> <groupId>org.springframework.boot</groupId> &l ...
- 利用Python+163邮箱授权码发送带附件的邮件
背景 前段时间写了个自动爬虫的脚本,定时在阿里云服务器上执行,会从某个网站上爬取链接保存到txt文本中,但是脚本不够完善,我需要爬虫完毕之后通过邮件把附件给我发送过来,之前写过一个<利用Pyth ...
随机推荐
- 22.Java面试学习平台-整合OSS对象存储
SpringCloud实战项目全套学习教程连载中 PassJava 学习教程 简介 PassJava-Learning项目是PassJava(佳必过)项目的学习教程.对架构.业务.技术要点进行讲解. ...
- Django ORM 查询表中某列字段值
场景: 有一个表中的某一列,你需要获取到这一列的所有值,你怎么操作? 解决办法: 有一个model为:Event 方式一: 获取内容: Event.objects.values('title') 输出 ...
- Linux open() 一个函数,两个函数原型
open在手册中有两个函数原型, 如下所示: int open(const char *pathname, int flags); int open(const char *pathname, int ...
- Github C 编译器项目 8cc main函数中用到的 C库函数
atexit C 库函数 int atexit(void (*func)(void)) 当程序正常终止时,调用指定的函数 func.您可以在任何地方注册你的终止函数,但它会在程序终止的时候被调用. s ...
- JQuery学习(一)
本文是学习廖老师的Javascript全栈教程后的一些笔记. 使用jQuery: 方法一:下载jQuery库,并在html页面中引入,方式如下: 1 <html> 2 <head&g ...
- Java泛型和编译优化的一个例子
public class Main { public static void main(String[] args) { ArrayList<String> strList = new A ...
- CF思维联系– Codeforces-990C Bracket Sequences Concatenation Problem(括号匹配+模拟)
ACM思维题训练集合 A bracket sequence is a string containing only characters "(" and ")" ...
- 概率dp部分题目
记录一些比较水不值得单独写一篇blog的概率dp题目 bzoj3036 绿豆蛙的归宿 Description 随着新版百度空间的下线,Blog宠物绿豆蛙完成了它的使命,去寻找它新的归宿. 给出一个有向 ...
- Python(Redis 中 String/List/Hash 类型数据操作)
1.下载 redis 模块 pip install redis 2.redis 数据库两种连接方式 简单连接 decode_responses=True,写入和读取的键值对中的 value 为 str ...
- CentOS上安装比较习惯的代码编辑器
linux下的vim用起来不是很习惯,可能是能力有限.所以一直在找一种自己比较熟悉的代码编辑器,所以就找到了sublime text,安装方法网上有很多种,比较方便的方法:直接在csdn上下载一个破解 ...