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 ...
随机推荐
- Using Post-Form Trigger In Oracle Forms
Post-Form trigger in Oracle Forms fires during the Leave the Form process, when a form is exited. ...
- Sqlserver2008日志压缩
SqlServer2008日志压缩语句如下: USE [master] GO ALTER DATABASE DBName SET RECOVERY SIMPLE WITH NO_WAIT GO ALT ...
- 访问者模式,visitor
定义: 表示作用于某对象结构中的各个元素的操作. 可以在不改变各元素的类的前提下定义作用于这些元素的新操作. 前提: 适用于数据结构(Element)相对稳定的系统,这样visitor中的方法就是稳定 ...
- C运行时的数据结构
本文描述一下:C运行时的数据结构,相关的段,压栈等 unix默认的编译器会将编译生成的文件默认命名为a.out 目标文件和可执行文件可以有几种不同的格式,所有这些不同格式具有一个共同的概念,那就是段. ...
- Android Fast ImageLoader
前段时间写的Android平台开源项目:Fast ImageLoader,现在分享给大家 源码地址:https://github.com/cumtkangyi/Android-Fast-ImageLo ...
- 几种HtmlEncode的区别(转)
一.C#中的编码 HttpUtility.HtmlDecode.HttpUtility.HtmlEncode与Server.HtmlDecode.Server.HtmlEncode与HttpServe ...
- poj1244Slots of Fun
链接 几何的简单题,建立坐标,判断相等以及不共线 #include <iostream> #include<cstdio> #include<cstring> #i ...
- mysql 性能问题
1.场景,模拟一天的数据,每个10秒,遍历1000个设备,每个设备模拟一个实时数据,总的数据量为:24*60*60/10*1000 = 864万条记录.2.采用策略,对时间分段,拼接sql语句查询,对 ...
- (二)ubuntu学习前传—uboot常见命令
1.uboot命令类似于linux行缓冲命令行,当我们向终端命令行输入命令的时候,这些命令没有立即被系统识别,而是被缓冲到一个缓存区(也就是系统认为我换没有输入完),当我们按下回车键(换行)后,系统就 ...
- 自定义获取焦点的TextView
自定义控件编写流程 创建一个默认就能获取焦点的TextView 1.创建一个类继承至TextView,FocusTextView 2.重写其构造方法 //使用在通过java代码创建控件 public ...