您的位置:首页 > 编程语言 > Java开发

带有附件及图片正文的JavaMail邮件发送

2014-09-19 10:48 711 查看
package javamail;

import java.io.UnsupportedEncodingException;
import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Message;
import javax.mail.Message.RecipientType;
import javax.mail.Authenticator;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.PasswordAuthentication;
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;
import javax.mail.internet.MimeUtility;

public class TestMail03 {
public static void main(String[] args) {
try {
Properties props = new Properties();
props.setProperty("mail.transport.protocol", "smtp");
/**
* 设置发送邮件的服务器,不同的邮箱服务器不一致,可以在邮箱的帮助中查询
*/
props.setProperty("mail.host", "smtp.126.com");
/**
* 设置发送服务器验证,一些邮箱需要增加这个验证才能发送邮件
*/
props.setProperty("mail.smtp.auth", "true");
/**
* 当需要使用Transport.send发送时,需要将用户名和密码设置到Session中
*/
Session session = Session.getDefaultInstance(props,new Authenticator() {
/**
* 通过Authenticator中 的getPasswordAuthentication的方法来设置邮箱的用户名和密码
*/
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("xiaohui390", "soul-390");
}
});

session.setDebug(true);

Message msg = new MimeMessage(session);
/**
* 使用MimeUtility.encodeText可以将中文编码
*/
msg.setFrom(new InternetAddress(MimeUtility.encodeText("王辉")+"<xiaohui390@126.com>"));
msg.setRecipient(RecipientType.TO,new InternetAddress(MimeUtility.encodeText("阿飞")+"<415519522@qq.com>"));
msg.setSubject("一封邮件");

/**
* 创建整个邮件的Multipart,因为邮件的内容已经不仅仅只是纯文本或者纯html文本,而需要添加
* 相应的附件,此时就得通过Multipart来创建
*/
Multipart emailPart = new MimeMultipart();
/**
* Multipart不能直接加入内容,需要通过BodyPart来加入内容,假设有两个附件就需要三个BodyPart
* 两个用来存储附件,一个用来存储邮件的正文
*/
MimeBodyPart att1 = new MimeBodyPart();
/**
* 为第一个附件设置文件,DataHandler是在JAF包中,如果使用的是jdk1.4的版本需要手动下载这个包
*/
att1.setDataHandler(new DataHandler(new FileDataSource("d:/1.txt")));
att1.setFileName("1.txt");
/**
* 创建了第二个附件
*/
MimeBodyPart att2 = new MimeBodyPart();
att2.setDataHandler(new DataHandler(new FileDataSource("d:/1.txt")));
//要解决中文的问题需要通过一个MimeUtility这个类来编码中文
att2.setFileName(MimeUtility.encodeText("你好.txt"));

MimeBodyPart content = new MimeBodyPart();
/**
* 由于文件的正文还有图片和内容,所以也需要通过Multipart来创建
*/
MimeMultipart contentMultipart = new MimeMultipart();
/**
* 然后再创建相应的BodyPart来设置内容
*/
MimeBodyPart imgBody = new MimeBodyPart();
/**
* 创建了正文中的图片内容
*/
imgBody.setDataHandler(new DataHandler(new FileDataSource("d:/02.jpg")));
/**
* 为这个图片设置一个id,在正文中可以通过cid:xxx来访问
*/
imgBody.setContentID("smile");

MimeBodyPart htmlBody = new MimeBodyPart();
htmlBody.setContent("<h1>这个是一个带有附件的图片</h1><img src='cid:smile'/>", "text/html;charset=utf-8");

contentMultipart.addBodyPart(imgBody);
contentMultipart.addBodyPart(htmlBody);
//完成了邮件正文的设置
content.setContent(contentMultipart);

/**
* 设置邮件的信息
*/
//添加第一个附件
emailPart.addBodyPart(att1);
//添加第二个附件
emailPart.addBodyPart(att2);
//添加邮件正文
emailPart.addBodyPart(content);
//设置邮件的信息
msg.setContent(emailPart);

Transport.send(msg);
} catch (AddressException e) {
e.printStackTrace();
} catch (MessagingException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: