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 学习及实例的更多相关文章

  1. javamail模拟邮箱功能--邮件回复-中级实战篇【邮件回复方法】(javamail API电子邮件实例)

    引言: JavaMai下载地址l jar包:http://java.sun.com/products/javamail/downloads/index.html 此篇是紧随上篇文章而封装出来的,阅读本 ...

  2. SQL语句学习手册实例版

    SQL语句学习手册实例版 表操作 例1  对于表的教学管理数据库中的表 STUDENTS ,可以定义如下: CREATE  TABLE  STUDENTS (SNO      NUMERIC (6, ...

  3. JavaMail学习笔记

    适逢计算机网络课程设计,本着挑战自己的态度,选择了一个从未接触的东西:邮箱客户端代理软件的设计.由于对相关协议非常陌生,只能依靠查找资料完成,在学习过程中碰到了一个非常好的博客,故向大家推荐一下. 一 ...

  4. TCP/IP协议学习之实例ping命令学习笔记

    TCP/IP协议学习之实例ping命令学习笔记(一) 一. 目的为了让网络协议学习更有效果,在真实网络上进行ping命令前相关知识的学习,暂时不管DNS,在内网中,进行2台主机间的ping命令的整个详 ...

  5. javamail模拟邮箱功能获取邮件内容-中级实战篇【内容|附件下载方法】(javamail API电子邮件实例)

    引言: JavaMail jar包下载地址:http://java.sun.com/products/javamail/downloads/index.html 此篇是紧随上篇文章而封装出来的,阅读本 ...

  6. JavaMail学习笔记(七)、帐号激活与忘记密码 实例(zhuan)

    一.帐户激活   在很多时候,在某些网站注册一个用户之后,网站会给这个用户注册时填写的email地址发送一封帐户激活邮件,这封邮件的内容就是一个激活帐户的链接和一段简短的文字描述,如果用户没有去邮箱将 ...

  7. javamail模拟邮箱功能发送电子邮件-基础实战篇(javamail API电子邮件实例)

    引言: JavaMail 是一种可选的.能用于读取.编写和发送电子消息的包 JavaMail jar包下载地址:http://java.sun.com/products/javamail/downlo ...

  8. javamail模拟邮箱功能发送电子邮件-中级实战篇【新增附件发送方法】(javamail API电子邮件实例)

    引言: JavaMail jar包下载地址:http://java.sun.com/products/javamail/downloads/index.html 此篇是紧随上篇文章而封装出来的,阅读本 ...

  9. day9-复习学习python实例

    学习实例代码 #求1到100的和print ("##################1到100求和#################")def sum(a,b): s = 0 fo ...

随机推荐

  1. servlet&jsp高级:第二部分

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  2. [SAP ABAP开发技术总结]ALV

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  3. 线程入门之start()和run()的区别

    package com.thread; /** * start()和run()的区别 * start():并行执行 * run():方法调用,顺序执行 * @author 95Yang */ publ ...

  4. 2013 Multi-University Training Contest 8

    HDU-4676 Sum Of Gcd 题意:给定一个1-N的全排列序列,N<=20000,有Q组询问,Q<=20000,每组询问给出左右区间[l, r],问区间内的任意两个数的gcd之和 ...

  5. Nginx入门笔记之————配置文件结构

    在nginx.conf的注释符号位# nginx文件的结构,这个对刚入门的同学,可以多看两眼. 默认的config: #user nobody; worker_processes ; #error_l ...

  6. [转载] tcp那些事2

    原文: http://coolshell.cn/articles/11609.html 这篇文章是下篇,所以如果你对TCP不熟悉的话,还请你先看看上篇<TCP的那些事儿(上)> 上篇中,我 ...

  7. (转)接口自动化测试 – Java+TestNG 测试 Restful Web Service

    本文主要介绍如何用Java针对Restful web service 做接口自动化测试(数据驱动),相比UI自动化,接口自动化稳定性可靠性高,实施难易程度低,做自动化性价比高.所用到的工具或类库有 T ...

  8. VIM跳到指定行

    ngg nG :n n is the line number

  9. C++——输入、输出和文件

    一.C++输入和输出概述 1.1.流和缓冲区 C++程序把输入和输出看作字节流.输入时,程序从输入流中抽取字节:输出时,程序将字节插入到输出流中.对于面相文本的程序,每个字节代表一个字符,更通俗地说, ...

  10. 三大平衡树(Treap + Splay + SBT)总结+模板[转]

    Treap树 核心是 利用随机数的二叉排序树的各种操作复杂度平均为O(lgn) Treap模板: #include <cstdio> #include <cstring> #i ...