首页 > 代码库 > 带有附件及图片正文的JavaMail邮件发送
带有附件及图片正文的JavaMail邮件发送
1 package javamail; 2 3 import java.io.UnsupportedEncodingException; 4 import java.util.Properties; 5 6 import javax.activation.DataHandler; 7 import javax.activation.FileDataSource; 8 import javax.mail.Message; 9 import javax.mail.Message.RecipientType; 10 import javax.mail.Authenticator; 11 import javax.mail.MessagingException; 12 import javax.mail.Multipart; 13 import javax.mail.PasswordAuthentication; 14 import javax.mail.Session; 15 import javax.mail.Transport; 16 import javax.mail.internet.AddressException; 17 import javax.mail.internet.InternetAddress; 18 import javax.mail.internet.MimeBodyPart; 19 import javax.mail.internet.MimeMessage; 20 import javax.mail.internet.MimeMultipart; 21 import javax.mail.internet.MimeUtility; 22 23 public class TestMail03 { 24 public static void main(String[] args) { 25 try { 26 Properties props = new Properties(); 27 props.setProperty("mail.transport.protocol", "smtp"); 28 /** 29 * 设置发送邮件的服务器,不同的邮箱服务器不一致,可以在邮箱的帮助中查询 30 */ 31 props.setProperty("mail.host", "smtp.126.com"); 32 /** 33 * 设置发送服务器验证,一些邮箱需要增加这个验证才能发送邮件 34 */ 35 props.setProperty("mail.smtp.auth", "true"); 36 /** 37 * 当需要使用Transport.send发送时,需要将用户名和密码设置到Session中 38 */ 39 Session session = Session.getDefaultInstance(props,new Authenticator() { 40 /** 41 * 通过Authenticator中 的getPasswordAuthentication的方法来设置邮箱的用户名和密码 42 */ 43 @Override 44 protected PasswordAuthentication getPasswordAuthentication() { 45 return new PasswordAuthentication("xiaohui390", "soul-390"); 46 } 47 }); 48 49 session.setDebug(true); 50 51 Message msg = new MimeMessage(session); 52 /** 53 * 使用MimeUtility.encodeText可以将中文编码 54 */ 55 msg.setFrom(new InternetAddress(MimeUtility.encodeText("王辉")+"<xiaohui390@126.com>")); 56 msg.setRecipient(RecipientType.TO,new InternetAddress(MimeUtility.encodeText("阿飞")+"<415519522@qq.com>")); 57 msg.setSubject("一封邮件"); 58 59 /** 60 * 创建整个邮件的Multipart,因为邮件的内容已经不仅仅只是纯文本或者纯html文本,而需要添加 61 * 相应的附件,此时就得通过Multipart来创建 62 */ 63 Multipart emailPart = new MimeMultipart(); 64 /** 65 * Multipart不能直接加入内容,需要通过BodyPart来加入内容,假设有两个附件就需要三个BodyPart 66 * 两个用来存储附件,一个用来存储邮件的正文 67 */ 68 MimeBodyPart att1 = new MimeBodyPart(); 69 /** 70 * 为第一个附件设置文件,DataHandler是在JAF包中,如果使用的是jdk1.4的版本需要手动下载这个包 71 */ 72 att1.setDataHandler(new DataHandler(new FileDataSource("d:/1.txt"))); 73 att1.setFileName("1.txt"); 74 /** 75 * 创建了第二个附件 76 */ 77 MimeBodyPart att2 = new MimeBodyPart(); 78 att2.setDataHandler(new DataHandler(new FileDataSource("d:/1.txt"))); 79 //要解决中文的问题需要通过一个MimeUtility这个类来编码中文 80 att2.setFileName(MimeUtility.encodeText("你好.txt")); 81 82 MimeBodyPart content = new MimeBodyPart(); 83 /** 84 * 由于文件的正文还有图片和内容,所以也需要通过Multipart来创建 85 */ 86 MimeMultipart contentMultipart = new MimeMultipart(); 87 /** 88 * 然后再创建相应的BodyPart来设置内容 89 */ 90 MimeBodyPart imgBody = new MimeBodyPart(); 91 /** 92 * 创建了正文中的图片内容 93 */ 94 imgBody.setDataHandler(new DataHandler(new FileDataSource("d:/02.jpg"))); 95 /** 96 * 为这个图片设置一个id,在正文中可以通过cid:xxx来访问 97 */ 98 imgBody.setContentID("smile"); 99 100 MimeBodyPart htmlBody = new MimeBodyPart();101 htmlBody.setContent("<h1>这个是一个带有附件的图片</h1><img src=http://www.mamicode.com/‘cid:smile‘/>", "text/html;charset=utf-8");102 103 104 contentMultipart.addBodyPart(imgBody);105 contentMultipart.addBodyPart(htmlBody);106 //完成了邮件正文的设置107 content.setContent(contentMultipart);108 109 /**110 * 设置邮件的信息111 */112 //添加第一个附件113 emailPart.addBodyPart(att1);114 //添加第二个附件115 emailPart.addBodyPart(att2);116 //添加邮件正文117 emailPart.addBodyPart(content);118 //设置邮件的信息119 msg.setContent(emailPart);120 121 Transport.send(msg);122 } catch (AddressException e) {123 e.printStackTrace();124 } catch (MessagingException e) {125 e.printStackTrace();126 } catch (UnsupportedEncodingException e) {127 e.printStackTrace();128 }129 130 }131 }
带有附件及图片正文的JavaMail邮件发送
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。