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 ...
随机推荐
- I2C总线信号时序总结
I2C总线信号时序总结 总线空闲状态 I2C总线总线的SDA和SCL两条信号线同时处于高电平时,规定为总线的空闲状态.此时各个器件的输出级场效应管均处在截止状态,即释放总线,由两条信号线各自的上拉电 ...
- wooyunAPI
经常要爬去乌云的信息,但是每次都是硬爬,写完了发现乌云有提供API的,整理给大家: 1. WooYun Api是什么 通过WooYun开放的Api接口,其它网站或应用可以根据自己获取的权限调用WooY ...
- jquery的$.与$.fn的区别
这个是jquery插件的形式,举个例子: <div id="myDiv"></div> (function($){ $.fn.extend({ test:f ...
- nancy的诊断2
接上文. 一 再看看第二个面板内容 点击带文号 的 Interactive Diagnostics 这个面板 如下 上面的是诊断程序,默认是系统提供的测试用的诊断程序. 你可以 通过实现IDiag ...
- Python入门-行和缩进
学习Python与其他语言最大的区别就是,Python的代码块不使用大括号({})来控制类,函数以及其他逻辑判断.python最具特色的就是用缩进来写模块. 缩进的空白数量是可变的,但是所有代码块语句 ...
- [置顶] 将项目从tomcat 迁移到JBoss
注:针对的是jboss5.0,其它版本没有测试过 ,主要参考了:http://www.diybl.com/course/3_program/java/javajs/20100719/460908.ht ...
- Nexus4铃声目录
1. 我的铃声 是通过下面的命令 传到手机上面去的: “ adb push fringe_01_long.mp3 /sdcard/ZC/ adb push fringe_02_short.mp3 /s ...
- IO端口和IO内存的区别及分别使用的函数接口
每个外设都是通过读写其寄存器来控制的.外设寄存器也称为I/O端口,通常包括:控制寄存器.状态寄存器和数据寄存器三大类.根据访问外设寄存器的不同方式,可以把CPU分成两大类.一类CPU(如M68K,Po ...
- HBase分享会议笔记
今天参加了一个关于HBase的分享,有一些内容是之前的知识的补充. 之前关于Hadoop家族,包括HBase的内容,可以参考:http://www.cnblogs.com/charlesblc/p/6 ...
- 关于协程的学习 & 线程栈默认10M
先看的这篇文章:http://blog.csdn.net/qq910894904/article/details/41699541 以nginx为代表的事件驱动的异步server正在横扫天下,那么事件 ...