/** * CrazyItTest * JavaMail 创建带附件的电子邮件示例 */ package com.labci.javamail.test; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.util.Date; import java.util.Properties; import javax.activation.DataHandler; import javax.activation.FileDataSource; import javax.mail.Message.RecipientType; import javax.mail.MessagingException; import javax.mail.Session; 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; /** * @author Bill Tu * @since May 26, 2011(21:03:36 PM) * */ public class ComplexMailTest { private static MimeMessage getTextMessage(Session session) throws AddressException, MessagingException, UnsupportedEncodingException{ MimeMessage message=new MimeMessage(session); String from="iwtxokhtd@163.com";//发送方邮件地址 String to="277515433@qq.com";//接收方邮件地址 String subject="带附件的邮件";//邮件主题,注意是中文的 String content="<h1>欢迎啊</h1><img src="cid:my1.jpg" mce_src="cid:my1.jpg"/>";//cid为my1.jpg,下文会设置此cid message.setFrom(new InternetAddress(from)); message.setRecipient(RecipientType.TO, new InternetAddress(to)); message.setSubject(subject); message.setSentDate(new Date());//发送时间 MimeBodyPart picBodyPart=getPicBodyPart(content,"F://My头像.jpg"); MimeBodyPart attached1BodyPart=getAttachedBodyPart("F://nginx中文.txt");//注意附件名是中文的 MimeBodyPart attached2BodyPart=getAttachedBodyPart("F://nginx英文.doc"); MimeMultipart mmp=new MimeMultipart("mixed");//MIME消息头组合类型是mixed(html+附件) mmp.addBodyPart(picBodyPart); mmp.addBodyPart(attached1BodyPart); mmp.addBodyPart(attached2BodyPart); message.setContent(mmp); message.saveChanges(); return message; } /** * 处理文件名 * 此处是针对Window下的。 * @param filePath * @return */ private static String doHandlerFileName(String filePath){ String fileName=filePath; if(null !=filePath && !"".equals(filePath)){ fileName=filePath.substring(filePath.lastIndexOf("//")+1); } return fileName; } private static MimeBodyPart getAttachedBodyPart(String filePath) throws MessagingException, UnsupportedEncodingException{ MimeBodyPart attached=new MimeBodyPart(); FileDataSource fds=new FileDataSource(filePath); attached.setDataHandler(new DataHandler(fds)); String fileName=doHandlerFileName(filePath); attached.setFileName(MimeUtility.encodeWord(fileName));//处理附件文件的中文名问题 return attached; } /** * 处理html加图片的类型(related) * @param content * @param picName * @return * @throws MessagingException */ private static MimeBodyPart getPicBodyPart(String content,String picName) throws MessagingException{ MimeBodyPart contentPart=new MimeBodyPart(); MimeMultipart mmp=new MimeMultipart("related");//此处MIME消息头组合类型为related MimeBodyPart contented=new MimeBodyPart(); contented.setContent(content,"text/html;charset=gb2312");//因正文内容中有中文 mmp.addBodyPart(contented); MimeBodyPart picBodyPart=new MimeBodyPart(); FileDataSource fds=new FileDataSource(picName); picBodyPart.setDataHandler(new DataHandler(fds)); picBodyPart.setContentID("my1.jpg");//设置contentId mmp.addBodyPart(picBodyPart); contentPart.setContent(mmp); return contentPart; } public static void main(String[] args) throws AddressException, MessagingException, FileNotFoundException, IOException { Session session=Session.getDefaultInstance(new Properties()); MimeMessage message=getTextMessage(session); message.writeTo(new FileOutputStream("F://mailtext.eml")); } } 用outlook打开保存在F盘的mailtest.eml文件,查看一下邮件内容: