首页 > 代码库 > [Java] JavaMail 发送带图片的 html 格式的邮件
[Java] JavaMail 发送带图片的 html 格式的邮件
JavaMail 发送的邮件正文和附件是相互独立的,但是内置图片需要定位图片在正文中的位置,所以内置图片和邮件正文是互相依赖的。
发送带附件的邮件可参考 JavaMail 发送 html 格式、带附件的邮件。
发送纯文本的邮件可参照 JavaMail 简单案例。
具体例子
EmailHelper, Email 的帮助类,向帮助类提供 SMTP 服务器域名、用户名、密码、发送人邮箱、收件人邮箱、邮件主题、html 格式的内容、图片的路径,便可发送一份内置图片的邮件。在创建 MimeMultipart 时, 需要传入参数 related,并在正文中声明图片的位置。
SendEmailDemo, 演示发送邮件。
EmailHelper.java
1 package mail; 2 3 import java.util.Properties; 4 5 import javax.activation.DataHandler; 6 import javax.activation.DataSource; 7 import javax.activation.FileDataSource; 8 import javax.mail.BodyPart; 9 import javax.mail.Message; 10 import javax.mail.MessagingException; 11 import javax.mail.Multipart; 12 import javax.mail.PasswordAuthentication; 13 import javax.mail.Session; 14 import javax.mail.Transport; 15 import javax.mail.internet.AddressException; 16 import javax.mail.internet.InternetAddress; 17 import javax.mail.internet.MimeBodyPart; 18 import javax.mail.internet.MimeMessage; 19 import javax.mail.internet.MimeMultipart; 20 21 public class EmailHelper { 22 23 private String host; 24 private String username; 25 private String password; 26 private String from; 27 28 private String to; 29 private String subject; 30 private String htmlContent; 31 private String imagePath; 32 33 public EmailHelper(String host, String username, String password, String from) throws AddressException, MessagingException{ 34 this.host = host; 35 this.username = username; 36 this.password = password; 37 this.from = from; 38 } 39 40 public void sendWithImage() throws Exception { 41 42 Properties props = new Properties(); 43 props.put("mail.smtp.auth", "true"); 44 props.put("mail.smtp.host", host); 45 46 final String username1 = username; 47 final String password1 = password; 48 49 Session session = Session.getInstance(props, new javax.mail.Authenticator() { 50 protected PasswordAuthentication getPasswordAuthentication() { 51 return new PasswordAuthentication(username1, password1); 52 } 53 }); 54 55 Message message = new MimeMessage(session); 56 57 message.setFrom(new InternetAddress(from)); 58 59 message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to)); 60 61 message.setSubject(subject); 62 63 Multipart multipart = new MimeMultipart("related"); 64 65 System.out.println(" html "); 66 BodyPart htmlPart = new MimeBodyPart(); 67 htmlContent = "<img src=http://www.mamicode.com/"cid:image\">" + htmlContent; 68 htmlPart.setContent(htmlContent, "text/html"); 69 multipart.addBodyPart(htmlPart); 70 71 System.out.println(" image "); 72 System.out.println("image path : " + imagePath); 73 BodyPart imgPart = new MimeBodyPart(); 74 DataSource fds = new FileDataSource(this.imagePath); 75 76 imgPart.setDataHandler(new DataHandler(fds)); 77 imgPart.setHeader("Content-ID", "<image>"); 78 79 multipart.addBodyPart(imgPart); 80 message.setContent(multipart); 81 Transport.send(message); 82 83 System.out.println(" Sent -| "); 84 } 85 86 public void setTo(String to) { 87 this.to = to; 88 } 89 90 public void setSubject(String subject) { 91 this.subject = subject; 92 } 93 94 public void setHtmlContent(String htmlContent) { 95 this.htmlContent = htmlContent; 96 } 97 98 public String getImagePath() { 99 return imagePath;100 }101 102 public void setImagePath(String imagePath) {103 this.imagePath = imagePath;104 }105 }
SendEmailDemo.java
1 public class SendEmailDemo { 2 3 public static void main(){ 4 5 String host = "smtp.163.com"; // use your smtp server host 6 7 final String username = "sender@163.com"; // use your username 8 final String password = "password"; // use your password 9 10 String from = "sender@163.com"; // use your sender email address11 12 String to = "reciever@foxmail.com"; // use your reciever email address13 try {14 EmailHelper emailHelper = new EmailHelper(host, username, password, from);15 emailHelper.setTo(to);16 emailHelper.setSubject("subject ttt test");17 emailHelper.setHtmlContent("<h1> This is html </h1>");18 emailHelper.setImagePath("/Users/grs/Documents/Java/mavenEmail/test/src/main/resource/promises.png");19 20 emailHelper.send();21 22 } catch (Exception e) {23 e.printStackTrace();24 }25 }26 }
参考资料
JavaMail API - Sending Email With Inline Imagess
[Java] JavaMail 发送带图片的 html 格式的邮件
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。