javamail 学习及实例

时间:2022-09-17 08:22:50

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);
} }