import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
/**
* 邮件发送
* @author 刘立喜
* @since 2013-3-26 16:21:30
*/
public class HTMLMessageSender {
private String protocol = "smtp";
// 向邮件服务器发送时所使用的协议
/**
* @param args
* @throws MessagingException
* @throws AddressException
*/
public static void main(String[] args) throws AddressException, MessagingException {
Session session = null;
// 定义一封邮件
MimeMessage message = null;
// 该对象由于发送邮件
Transport transport = null;
String body = "";
String subject = "";
String user = "";
String password = "";
String server = "";
HTMLMessageSender sender = new HTMLMessageSender();
body = "<h1>你好!你已成功注册</h1>";
subject = "用户注册成功";
session = sender.createSession();
message = sender.createMessage(session, body, subject);
transport = session.getTransport();
user = "1342158501";
password = "05646292253";
server = "smtp.qq.com";
transport.connect(server, user, password);
// 发送邮件
transport.sendMessage(message, message.getRecipients(Message.RecipientType.TO));
transport.close();
}
/**
* <p>生成邮件对象</p>
* <p>该邮件的邮件体包括两个部分,一部分是html,另一部分是内嵌的一幅图片</p>
* @param session javax.mail.Session 对象
* @param body 邮件内容
* @return MimeMessage 对象
* @throws MessagingException
* @throws AddressException
*/
public MimeMessage createMessage(Session session, String body, String subject) throws AddressException, MessagingException {
// MimeMessage对象代表一封邮件
MimeMessage message = new MimeMessage(Session.getDefaultInstance(new Properties()));
// 定义发送者
message.setFrom(new InternetAddress(from));
// 定义接收者
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
// 定义邮件主题
message.setSubject(subject);
// 一封邮件可能由多个部分组成,比如有text/html部分,还有附件部分,还有可能由图片部分
// 下面定义的这个MimeMultiPart对象从其名字就能得出:由于我们定义了很多邮件部分,所以需要将这些部分组装起来,
// 此对象就起着这种组装的功能,将所有部分都加到该对象中
MimeMultipart multipart = new MimeMultipart("related");
// 这里定义了一封邮件中text/html 部分 部分
MimeBodyPart htmlBodyPart = new MimeBodyPart();
htmlBodyPart.setContent(body, "text/html; charset=gb2312");
// 将html部分加到MimeMultiPart对象中
multipart.addBodyPart(htmlBodyPart);
// 内嵌图片部分
MimeBodyPart picBodyPart = new MimeBodyPart();
FileDataSource fds = new FileDataSource("E:\\邮件开发\\代码\\JavaMail使用的附件\\logo.gif");
picBodyPart.setDataHandler(new DataHandler(fds));
picBodyPart.setContentID("company_logo");
// 将图片部分加到MimeMultiPart对象中
multipart.addBodyPart(picBodyPart);
// 将MimeMultiPart对象作为整封邮件的内容
message.setContent(multipart);
// 一下这句必须写
message.saveChanges();
return message;
}
/**
* 创建Session对象
* @return Session 对象
*/
public Session createSession() {
// 创建Session对象时需要相关的参数,而参数是从Properties中获取的,所以这里要定义Properties对象
Properties props = new Properties();
props.setProperty("mail.transport.protocol", protocol);
props.setProperty("mail.smtp.auth", "true");
Session session = Session.getDefaultInstance(props);
// 调试模式
session.setDebug(true);
return session;
}
}