1.JavaMail介绍
JavaMail API用于连接E-mail系统,程序员可以通过JavaMail实现电子邮件的收取、发送。JavaMail可以支持POP3、IMAP4和SMTP等主要的电子邮件协议。JavaMail API与具体的邮件服务器供应商无关,而是提供了一种开放的、简单的E-mail开发环境。
开发JavaMail程序前需要将JavaMail的开发包加入到项目的类加载路径下,如果jdk的版本低于jdk6的话,还需添加JAF。
2.JavaMail实现邮件发送
下面通过一个邮件发送的案例来介绍一下JavaMail API的开发步骤。
① 创建邮件Session实例。Session类代表JavaMail中的一次邮件会话。每个基于JavaMail的应用程序至少会产生一次会话,也可以产生多次会话。发送邮件之前,通常应该建立邮件会话。
② 以Session实例为参数创建MimeMessage对象。MimeMessage对象是实际的电子邮件对象,创建该对象时应该传入一个邮件会话参数。
③ 为MimeMessage对象设置合适的属性和内容。MimeMessage类提供一系列的setter和getter方法,可以用来返回和设置MimeMessage对象的属性和内容。
④ 使用抽象类Transport的send或sendMessage方法发送邮件。调用send方法时,只要将MimeMessage对象传入,即可完成邮件的发送。sendMessage可以将邮件发送到多个地址。
下面是一个完整的邮件发送程序,运行时请将相关的账号密码换成自己的。
import java.util.*;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.*;
public class SendAnEmail {
private String to;// 收件人邮箱地址
private String from;// 发件人邮箱地址
private String smtpServer;// SMTP服务器地址
private String username;// 登陆SMTP服务器的用户名
private String password;// 登陆SMTP服务器的秘密
private String subject;// 邮件主题
private String content;// 邮件内容
List<String> attachments = new ArrayList<String>();// 邮件附件
public void setTo(String to) {
this.to = to;
}
public void setFrom(String from) {
this.from = from;
}
public void setSmtpServer(String smtpServer) {
this.smtpServer = smtpServer;
}
public void setUsername(String username) {
this.username = username;
}
public void setPassword(String password) {
this.password = password;
}
public void setSubject(String subject) {
this.subject = subject;
}
public void setContent(String content) {
this.content = content;
}
public void attachfile(String filename) {
attachments.add(filename);
}
public boolean send() {
// 创建Session所需的Properties对象
Properties props = new Properties();
props.put("mail.smtp.host", smtpServer);
props.put("mail.smtp.auth", "true");
// 创建Session对象
Session session = Session.getDefaultInstance(props,
//登陆服务器的认证对象。
new Authenticator() {
public PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
});
try {
// 实例化MimeMessage并设置相关属性
MimeMessage msg = new MimeMessage(session);
//设置发件人
msg.setFrom(new InternetAddress(from));
//设置收件人
InternetAddress[] addresses = { new InternetAddress(to) };
msg.setRecipients(Message.RecipientType.TO, addresses);
//设置邮件主题
msg.setSubject(subject);
//通过Multipart创建邮件内容的容器对象
Multipart mp = new MimeMultipart();
MimeBodyPart mbpContent = new MimeBodyPart();
mbpContent.setText(content);
//向Multipart添加正文
mp.addBodyPart(mbpContent);
//遍历附件列表,将所有附件添加到邮件消息里。
for (String efile : attachments) {
MimeBodyPart mbpFile = new MimeBodyPart();
FileDataSource fds = new FileDataSource(efile);
mbpFile.setDataHandler(new DataHandler(fds));
mbpFile.setFileName(fds.getName());
//向Multipart添加附件
mp.addBodyPart(mbpFile);
}
attachments.clear();
msg.setContent(mp);
msg.setSentDate(new Date());
//发送邮件
Transport.send(msg);
} catch (MessagingException e) {
e.printStackTrace();
return false;
}
return true;
}
public static void main(String[] argss) {
SendAnEmail mail = new SendAnEmail();
mail.setTo("*****@qq.com");
mail.setFrom("*****@126.com");
mail.setSmtpServer("smtp.126.com");
mail.setPassword("********");
mail.setSubject("This is an subject of a mail");
mail.setContent("This is the content of my mail");
mail.setUsername("*****@126.com");
mail.attachfile("src/SendAnEmail.java");
if (mail.send()) {
System.out.println("Send an Email successfully!");
}
}
}
运行的结果如下: