【Mail】JavaMail发送带附件的邮件(二)
上一篇讲了使用JavaMail发送普通邮件(【Mail】JavaMail介绍及发送邮件(一)),本例讲发送复杂的邮件(带有附件的邮件)
生成一封复杂的邮件
- 新建一个JavaWeb的Maven工程,引入javamail.jar包,maven引用如下:
<!-- javamail -->
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.7</version>
</dependency> - 新建邮件的结构图,以及邮件MIME关系图如下


- 新建一个Demo3.java,如下:
package com.hd.javamail; import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Properties; import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.Address;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Session;
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 com.sun.mail.util.MimeUtil; /**
*
* @author H__D
* @date 2016年12月6日 下午7:38:33
*
*/
public class Demo3 { /**
* 生成一份本地的邮件
* @param args
* @throws MessagingException
* @throws IOException
*/
public static void main(String[] args) throws MessagingException, IOException {
//环境
Session session = Session.getDefaultInstance(new Properties()); //邮件
MimeMessage msg = new MimeMessage(session);
//设置主题
msg.setSubject("test123456");
//发件人,注意中文的处理
msg.setFrom(new InternetAddress("\"" + MimeUtility.encodeText( "某某") + "\"<xxxxxx@163.com>"));
//设置邮件回复人
msg.setReplyTo(new Address[]{new InternetAddress("123456@163.com")}); //整封邮件的MINE消息体
MimeMultipart msgMultipart = new MimeMultipart("mixed");//混合的组合关系
//设置邮件的MINE消息体
msg.setContent(msgMultipart); //附件1
MimeBodyPart attch1 = new MimeBodyPart();
//附件2
MimeBodyPart attch2 = new MimeBodyPart();
//正文内容
MimeBodyPart content = new MimeBodyPart(); //把内容,附件1,附件2加入到 MINE消息体中
msgMultipart.addBodyPart(attch1);
msgMultipart.addBodyPart(attch2);
msgMultipart.addBodyPart(content); //把文件,添加到附件1中
//数据源
DataSource ds1 = new FileDataSource(new File("C:/Users/H__D/Desktop/1.txt"));
//数据处理器
DataHandler dh1 = new DataHandler(ds1 );
//设置第一个附件的数据
attch1.setDataHandler(dh1);
//设置第一个附件的文件名
attch1.setFileName("file1.jpg"); //把文件,添加到附件2中
DataSource ds2 = new FileDataSource(new File("C:/Users/H__D/Desktop/2.txt"));
DataHandler dh2 = new DataHandler(ds2 );
attch2.setDataHandler(dh2);
attch2.setFileName(MimeUtility.encodeText( "文件2.jpg")); //正文(图片和文字部分)
MimeMultipart bodyMultipart = new MimeMultipart("related");
//设置内容为正文
content.setContent(bodyMultipart); //html代码部分
MimeBodyPart htmlPart = new MimeBodyPart();
//html中嵌套的图片部分
MimeBodyPart imgPart = new MimeBodyPart(); //正文添加图片和html代码
bodyMultipart.addBodyPart(htmlPart);
bodyMultipart.addBodyPart(imgPart); //把文件,添加到图片中
DataSource imgds = new FileDataSource(new File("C:/Users/H__D/Desktop/logo.png"));
DataHandler imgdh = new DataHandler(imgds );
imgPart.setDataHandler(imgdh);
//说明html中的img标签的src,引用的是此图片
imgPart.setHeader("Content-Location", "http://sunteam.cc/logo.jsg"); //html代码
htmlPart.setContent("<span style='color:red'>中文呵呵</span><img src=\"http://sunteam.cc/logo.jsg\">","text/html;charset=utf-8"); //生成文件邮件
msg.saveChanges(); //输出
OutputStream os = new FileOutputStream("C:/Users/H__D/Desktop/demo.eml");
msg.writeTo(os);
os.close();
} } - 运行main方法,等到邮件文件。可以使用记事本和Foxmail打开效果如下:
记事本效果:
Foxmai效果:

发送本地邮件文件
- 新建一个Demo4.类,如下:
package com.hd.javamail; import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.Properties; import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage; /**
*
* @author H__D
* @date 2016年12月6日 下午7:51:43
*
*/
public class Demo4 {
public static void main(String[] args) throws FileNotFoundException, MessagingException {
// 属性对象
Properties properties = new Properties();
// 开启debug调试 ,打印信息
properties.setProperty("mail.debug", "true");
// 发送服务器需要身份验证
properties.setProperty("mail.smtp.auth", "true");
// 发送服务器端口,可以不设置,默认是25
properties.setProperty("mail.smtp.port", "25");
// 发送邮件协议名称
properties.setProperty("mail.transport.protocol", "smtp");
// 设置邮件服务器主机名
properties.setProperty("mail.host", "smtp.163.com");
// 环境信息
Session session = Session.getInstance(properties, new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
// 在session中设置账户信息,Transport发送邮件时会使用
return new PasswordAuthentication( "xxxx@163.com", "xxxxx");
}
}); //读取本地邮件
Message message = new MimeMessage(session, new FileInputStream(new File("C:/Users/H__D/Desktop/demo.eml"))); //发送邮件
Transport.send(message, InternetAddress.parse("123456@qq.cn") );
}
}
【Mail】JavaMail发送带附件的邮件(二)的更多相关文章
- 使用JavaMail发送带附件的邮件
所需jar包 链接:http://pan.baidu.com/s/1dFo4cDz 密码:akap 工具类: package com.javamail.utils; import java.util. ...
- (转)用javamail发送带附件的邮件
本文转载自:http://redleaf.iteye.com/blog/78217 mail.java 代码 package mail; import java.util.* ; import jav ...
- UiPath: Send SMTP Mail Message 发送带附件的邮件
Tips:关于Hotmail的server和port的获取方式,请参考以下链接 https://support.office.com/en-us/article/Server-settings-you ...
- [SpringBoot] - 发送带附件的邮件
<!--发送email依赖--> <dependency> <groupId>org.springframework.boot</groupId> &l ...
- java发送带附件的邮件
/** * java发送带附件的邮件 * 周枫 * 2013.8.10 */ package com.dsideal.Util; import javax.mail.*; import javax.m ...
- 利用Python+163邮箱授权码发送带附件的邮件
背景 前段时间写了个自动爬虫的脚本,定时在阿里云服务器上执行,会从某个网站上爬取链接保存到txt文本中,但是脚本不够完善,我需要爬虫完毕之后通过邮件把附件给我发送过来,之前写过一个<利用Pyth ...
- C#发送带附件的邮件的代码
如下的代码是关于C#发送带附件的邮件的代码. MailMessage m = new MailMessage();m.Subject = "File attachment!";m. ...
- 接口测试基础——第2篇smtplib发送带附件的邮件
我先给大家补充一个用QQ发送纯文本电子邮件的代码,用QQ的朋友可以参考一下: # coding=utf-8 import smtplib from email.mime.text import MIM ...
- spring boot:发送带附件的邮件和html内容的邮件(以163.com邮箱为例/spring boot 2.3.2)
一,网站哪些情况下需要发送电子邮件? 作为一个电商网站,以下情况需要发邮件通知用户: 注册成功的信息 用邮箱接收验证码 找回密码时发链接 发送推广邮件 下单成功后的订单通知 给商户的对账单邮件 说明: ...
随机推荐
- leetcode 6. ZigZag Conversion
https://leetcode.com/problems/zigzag-conversion/ 题目: 将字符串转化成zigzag模式. 例如 "abcdefghijkmlnpq" ...
- c/c++创建动态链接库
extern "C" C++保留了一部分过程式语言的特点,因而它可以定义不属于任何类的全局变量和函数.但是,C++毕竟是一种面向对象的程序设计语言,为了支持函数的重载,C++对全局 ...
- 对于.h文件和.c文件
C语言中.h文件和.c文件详细解析_云止水_新浪博客http://blog.sina.com.cn/s/blog_73006d600102wcx5.html
- 表有主外键约束时的delete 方法 2008
--1.禁用约束 ALTER TABLE abppmgr.MST_ITEMMASTER disable CONSTRAINT C0248833319_7676; --2.删除数据 truncate t ...
- FP_PR2SAP 除包材、半成品以外的半成品下层物料展望期7天更改为40日
--除包材.半成品以外的半成品下层物料展望期7天更改为40日 INSERT INTO OUT_PR (pr_id, ITEM, SUPPLIER_ID, DUE_DATETIME, QTY, PROC ...
- 介绍开源的.net通信框架NetworkComms框架之四 消息边界
原文网址: http://www.cnblogs.com/csdev Networkcomms 是一款C# 语言编写的TCP/UDP通信框架 作者是英国人 以前是收费的 目前作者已经开源 许可是 ...
- oracle合并版本
1) 添加字段,并自增 第一步:alter table TOWN add ID int 第二步:Update TOWN set id=rownum; Commit; 2) 更新表(另一张表) ...
- Java Iterator, ListIterator 和 foreach语句使用
Java Iterator, ListIterator 和 foreach语句使用 foreach语句结构: for(part1:part2){part3}; part2 中是一个数组对象,或者是带 ...
- 【BZOJ3123】森林(主席树,启发式合并)
题意:一个带点权的森林,要求维护以下操作: 1.询问路径上的点权K大值 2.两点之间连边 n,m<=80000 思路:如果树的结构不发生变化只需要维护DFS序 现在因为树的结构发生变化,要将两棵 ...
- python中的时间转换
Python中的时间相关库有: datetime 和time. 主要形式有: datetime timestamp 相互转换: timestamp->datetime: dt = datetim ...