javamail 学习及实例
JavaMail,是Sun发布的用来处理email的API,提供给开发者处理电子邮件相关的编程接口。通过使用它可以方便地执行一些常用的邮件传输。
可以看下《java邮件开发详解》第四章和第五章的内容,有比较详尽的主要接口的介绍,
相关API介绍参见:JavaMail API
如果要创建一幅图文并茂的邮件正文,最好不要采用在邮件正文中引用外部资源的方式,而是需要把图片文件内容当做邮件的内嵌资源处理,即把资源文件的内容和引用它的HTML邮件正文放在同一封邮件数据中,并把它们组合成MIME组合消息。要把图片当做邮件的内嵌资源进行引用,这需要把图片文件的内容引用它的邮件正文分别保存在单独的MimeBodyPart对象中,然后将这些MimeBodyPart对象加入进一个MimeMultipart对象中。
下面将代码示例列出:
/**
* @Title: Demo1.java
* @Description: 群发邮件demo
* @author :Xingle
* @date 2014-7-14 下午12:01:19
* @version
*/ package com.sendMail; import java.util.ArrayList;
import java.util.List;
import java.util.Properties; import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
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; /**
* 群发邮件
*
* @ClassName: Demo1
* @author Xingle
* @date 2014-7-14 下午12:01:19
*/
public class Demo1 { private static final String MAIL_USER = "****"; // 邮件服务器登录用户名 private static final String MAIL_PASSWORD = "******"; // 邮件服务器登录密码 private static final String MAIL_FROM_SMTP = "xingle@chinatelling.com"; // 发送邮件地址
// 记录所有附件文件的集合
List<String> attachments = new ArrayList<String>(); public void attachfile(String[] fnameLs) {
for (int i = 0; i < fnameLs.length; i++) {
attachments.add(fnameLs[i]);
}
} public void sendmail(String[] mailArray, String subject, String content) { Properties props = new Properties();
// 设置服务器验证
props.setProperty("mail.smtp.auth", "true");
// 设置传输协议
props.setProperty("mail.transport.protocol", "smtp");
// 选择服务类型
props.setProperty("mail.host", "smtp.chinatelling.com");
// 通过认证创建一个session实例
Session session = Session.getInstance(props, new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(MAIL_USER, MAIL_PASSWORD);
}
});
// 构造Multipart
Multipart mp = new MimeMultipart("related"); // 向Multipart添加正文
MimeBodyPart mbpContent = new MimeBodyPart(); try {
// mbpContent.setText(content);
mbpContent.setContent(content, "text/html; charset=utf-8");
// 将BodyPart添加到MultiPart中
mp.addBodyPart(mbpContent);
} catch (MessagingException e1) {
e1.printStackTrace();
} // 创建一个标示图片内容的MimeBodyPart对象,再添加到之前创建的MimeMultipart对象mp中
MimeBodyPart picBodyPart = new MimeBodyPart();
FileDataSource fds = new FileDataSource("D:/other/1.jpg");
try {
picBodyPart.setDataHandler(new DataHandler(fds));
picBodyPart.setContentID("1_jpg");
mp.addBodyPart(picBodyPart);
} catch (MessagingException e1) {
e1.printStackTrace();
} // 向Multipart添加附件
// 遍历附件列表,将所有文件添加到邮件消息里
for (String efile : attachments) {
MimeBodyPart mbpFile = new MimeBodyPart();
// 以文件名创建FileDataSource对象
FileDataSource fds1 = new FileDataSource(efile);
// 处理附件
try {
mbpFile.setDataHandler(new DataHandler(fds1));
mbpFile.setFileName(fds1.getName());
// 将BodyPart添加到MultiPart中
mp.addBodyPart(mbpFile);
} catch (MessagingException e) {
e.printStackTrace();
}
}
// 清空附件列表
attachments.clear();
// 显示邮件发送过程中的交互信息
session.setDebug(true); Message msg = new MimeMessage(session);
Transport transport = null;
try {
// 邮件发送人
msg.setFrom(new InternetAddress(MAIL_FROM_SMTP));
// 邮件主题
msg.setSubject(subject);
// 邮件内容
msg.setContent(mp);
int len = mailArray.length;
InternetAddress address[] = new InternetAddress[len];
for (int i = 0; i < mailArray.length; i++) {
address[i] = new InternetAddress(mailArray[i]);
}
// 邮件接收方
msg.addRecipients(Message.RecipientType.TO, address);
transport.send(msg);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (transport != null) {
transport.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
} public static void main(String[] args) throws Exception {
Demo1 demo2 = new Demo1();
String[] mailArray = { "xingle0917@gmail.com", "450137300@qq.com" };
String subject = "测试邮件群发";
String content = "<H1>hello,这里是群发邮件测试demo</H1> "
+ " <a href = http://www.baidu.com/> 测试链接</a>"
+ " <img src=\"cid:1_jpg\">";
// 附件列表
String[] attachLs = { "D:/other/fujian2.docx", "D:/other/fujian1.txt" };
// 粘贴附件
demo2.attachfile(attachLs);
demo2.sendmail(mailArray, subject, content);
} }
javamail 学习及实例的更多相关文章
- javamail模拟邮箱功能--邮件回复-中级实战篇【邮件回复方法】(javamail API电子邮件实例)
引言: JavaMai下载地址l jar包:http://java.sun.com/products/javamail/downloads/index.html 此篇是紧随上篇文章而封装出来的,阅读本 ...
- SQL语句学习手册实例版
SQL语句学习手册实例版 表操作 例1 对于表的教学管理数据库中的表 STUDENTS ,可以定义如下: CREATE TABLE STUDENTS (SNO NUMERIC (6, ...
- JavaMail学习笔记
适逢计算机网络课程设计,本着挑战自己的态度,选择了一个从未接触的东西:邮箱客户端代理软件的设计.由于对相关协议非常陌生,只能依靠查找资料完成,在学习过程中碰到了一个非常好的博客,故向大家推荐一下. 一 ...
- TCP/IP协议学习之实例ping命令学习笔记
TCP/IP协议学习之实例ping命令学习笔记(一) 一. 目的为了让网络协议学习更有效果,在真实网络上进行ping命令前相关知识的学习,暂时不管DNS,在内网中,进行2台主机间的ping命令的整个详 ...
- javamail模拟邮箱功能获取邮件内容-中级实战篇【内容|附件下载方法】(javamail API电子邮件实例)
引言: JavaMail jar包下载地址:http://java.sun.com/products/javamail/downloads/index.html 此篇是紧随上篇文章而封装出来的,阅读本 ...
- JavaMail学习笔记(七)、帐号激活与忘记密码 实例(zhuan)
一.帐户激活 在很多时候,在某些网站注册一个用户之后,网站会给这个用户注册时填写的email地址发送一封帐户激活邮件,这封邮件的内容就是一个激活帐户的链接和一段简短的文字描述,如果用户没有去邮箱将 ...
- javamail模拟邮箱功能发送电子邮件-基础实战篇(javamail API电子邮件实例)
引言: JavaMail 是一种可选的.能用于读取.编写和发送电子消息的包 JavaMail jar包下载地址:http://java.sun.com/products/javamail/downlo ...
- javamail模拟邮箱功能发送电子邮件-中级实战篇【新增附件发送方法】(javamail API电子邮件实例)
引言: JavaMail jar包下载地址:http://java.sun.com/products/javamail/downloads/index.html 此篇是紧随上篇文章而封装出来的,阅读本 ...
- day9-复习学习python实例
学习实例代码 #求1到100的和print ("##################1到100求和#################")def sum(a,b): s = 0 fo ...
随机推荐
- 哈理工软件学院"兆方美迪"杯第六届程序设计大赛【高年级组】--决赛 题解
比赛链接:http://acm-software.hrbust.edu.cn/contest.php?cid=1082 A.好SB啊真是,还以为lis-数有多少个数不一样. #include < ...
- 用wordpress制作网站的总结
在没有自己的网站的时候很像拥有一个属于自己的网站,可以说是自己的一个愿望吧.但是当我真正的运行起来了之后觉得没有多么的兴奋,自己也折腾了几天wordpress,从买域名空间,到安装WP,遇到了一些问题 ...
- git学习笔记06-创建分支合并分支-比svn快多了,因为只有指针在改变
一开始git只有一条时间线,这个分支叫主分支,即master分支. HEAD严格来说不是指向提交,而是指向master,master才是指向提交的,所以,HEAD指向的就是当前分支. 每次提交,mas ...
- JavaScript算法题之–随机数的生成
JavaScript算法题之–随机数的生成 需求描述:从一组有序的数据中生成一组随机并且不重复的数,类似于简单的抽奖程序的实现. 先来生成一个有序的数组: 1 var arr = [], 2 ...
- 操作系统基础知识之————单线程(Thread)与多线程的区别
单线程(Thread)与多线程的区别 (一)首先了解一下cpu: 随着主频(cpu内核工作时钟频率,表示在CPU内数字脉冲信号震荡的速度,等于外频(系统基本时间)乘倍频)的不断攀升,X86构架的硬件逐 ...
- HTTP refere
什么是 http refere ? 简言之,放在web浏览器的header上的 当我通过我的主页访问我朋友的网站时,就可以获得refere , 可以获取网页访问流量,也可以防盗链 一般 referer ...
- Win7_刻录DVD
1.刻录 临时文件夹: 1.1.C:\Users\具体的用户名\AppData\Local\Microsoft\Windows\Burn 1.2.双击 插入刻录盘的光驱,直接将文件复制到 这里,实际上 ...
- (九)uboot配置编译、源码分析
一.X210官方uboot配置编译实践1.找到官方移植好的uboot(BSP概念)(1)源头的源代码是uboot官网下载的.这个下载的源代码可能没有你当前使用的开发板的移植,甚至找不到当前开发板使用的 ...
- 对SIGQUIT的实验 & Java dump
写了一个Java程序,sleep 20秒. package com.company; public class Main { public static void main(String[] args ...
- Java集合类源码分析
常用类及源码分析 集合类 原理分析 Collection List Vector 扩充容量的方法 ensureCapacityHelper很多方法都加入了synchronized同步语句,来保 ...