package cn.zdp.utils;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Message;
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;
import javax.mail.internet.MimeUtility;
import cn.zdp.domain.User;
/**
* 邮件工具类
*/
public class MailUtils implements Runnable {
private User user;
public MailUtils(User user) {
this.user = user;
}
public static void sendMail(User user) throws Exception {
Properties props = new Properties();
props.setProperty("mail.transport.protocol", "smtp");
props.setProperty("mail.host", "localhost"); // 邮件发送主机
// 1. 创建包含邮件服务器的网络连接信息的Session对象
Session session = Session.getDefaultInstance(props);
// 2. 创建代表邮件内容的Message对象
Message message = createMessage(session, user);
// 3. 创建Transport对象并连接服务器发送邮件
Transport transport = session.getTransport();
transport.connect("service", "123");
transport.sendMessage(message, message.getAllRecipients());
}
private static Message createMessage(Session session, User user) throws Exception {
// 邮件内容: 文本
MimeBodyPart text = new MimeBodyPart();
text.setContent("亲爱的用户,您好,欢迎注册了estore商城,这里会为你优质的服务," +
"您的满意是我们最大的动力,您的用户名是" + user.getUsername() +
",密码是" + user.getPassword() +
",请妥善保管!<img src='cid:welcomePic'/>", // cid为对下面图片资源的引用
"text/html;charset=utf-8");
// 邮件内容: 图片
MimeBodyPart wolcomePic = new MimeBodyPart();
wolcomePic.setDataHandler(new DataHandler(new FileDataSource("/welcome.gif")));
wolcomePic.setContentID("welcomePic");
// 邮件附件: MP3
MimeBodyPart mp3 = new MimeBodyPart();
DataHandler dataHandler = new DataHandler(new FileDataSource("/欢迎注册.mp3"));
mp3.setDataHandler(dataHandler);
mp3.setFileName(MimeUtility.encodeText(dataHandler.getName())); // 设置附件名(解决乱码)
MimeMultipart mimeMultipart1 = new MimeMultipart();
mimeMultipart1.addBodyPart(text);
mimeMultipart1.addBodyPart(wolcomePic);
mimeMultipart1.setSubType("related"); // 设置关系(related用于内嵌图片,音乐)
MimeBodyPart temp = new MimeBodyPart();
temp.setContent(mimeMultipart1);
MimeMultipart mimeMultipart2 = new MimeMultipart();
mimeMultipart2.addBodyPart(temp);
mimeMultipart2.addBodyPart(mp3);
mimeMultipart2.setSubType("mixed"); // 设置关系(mixed用于携带附件)
Message message = new MimeMessage(session); // 通过邮件会话构造邮件
message.setFrom(new InternetAddress("service@estore.com"));// 设置发件人
message.setRecipient(Message.RecipientType.TO, new InternetAddress("zhangsan@estore.com"));// 设置收件人
message.setSubject("欢迎注册estore商城!");// 设置标题
message.setContent(mimeMultipart2);
message.saveChanges();
return message;
}
@Override
public void run() {
try {
sendMail(user);
} catch (Exception e) {
throw new RuntimeException("对不起,出错了", e);
}
}
}