[Java] JavaMail 发送 html 格式、带附件的邮件

时间:2024-01-14 14:36:56

本案例演示发送 html 格式,可带附件的邮件发送。发送纯文本邮件的例子可参照上一篇博文JavaMail 简单案例

EmailHelper, Email 的帮助类,向帮助类提供 SMTP 服务器域名、用户名、密码、发送人邮箱、收件人邮箱、邮件主题、html 格式的内容(可选)、附件(可选),便可发送一份邮件。

SendEmailDemo, 演示发送邮件。

import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.BodyPart;
import javax.mail.Message;
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; public class EmailHelper { private String host;
private String username;
private String password;
private String from; private String to;
private String subject;
private String htmlContent;
private String attachedFileName; public EmailHelper(String host, String username, String password, String from) throws AddressException, MessagingException{
this.host = host;
this.username = username;
this.password = password;
this.from = from;
} public void send() throws Exception{ Properties props = new Properties();
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.host", host); final String username1 = username;
final String password1 = password; Session session = Session.getInstance(props,
new javax.mail.Authenticator(){
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username1, password1);
}
}); Message message = new MimeMessage(session); message.setFrom(new InternetAddress(from)); message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to)); message.setSubject(subject); Multipart multipart = new MimeMultipart(); if (htmlContent != null){
System.out.println(" has html "); BodyPart htmlPart = new MimeBodyPart();
htmlPart.setContent(htmlContent, "text/html");
multipart.addBodyPart(htmlPart);
} if (attachedFileName != null){
System.out.println(" has attached file "); BodyPart attchmentPart = new MimeBodyPart();
DataSource source = new FileDataSource(attachedFileName);
attchmentPart.setDataHandler(new DataHandler(source));
attchmentPart.setFileName(attachedFileName);
multipart.addBodyPart(attchmentPart);
} message.setContent(multipart);
Transport.send(message); System.out.println(" Sent ");
} public void setTo(String to) {
this.to = to;
} public void setSubject(String subject) {
this.subject = subject;
} public void setHtmlContent(String htmlContent) {
this.htmlContent = htmlContent;
} public void setAttachedFileName(String attachedFileName) {
this.attachedFileName = attachedFileName;
}
}

演示代码,

public class SendEmailDemo {

    public static void main(){

        String host = "smtp.163.com";        // use your smtp server host

        final String username = "sender@163.com"; // use your username
final String password = "password";   // use your password String from = "sender@163.com";     // use your sender email address String to = "reciever@foxmail.com";  // use your reciever email address
try {
EmailHelper emailHelper = new EmailHelper(host, username, password, from);
emailHelper.setTo(to);
emailHelper.setSubject("subject ttt test");
emailHelper.setHtmlContent("<h1> This is html </h1>");
emailHelper.setAttachedFileName("/Users/grs/Documents/Java/mavenEmail/test/src/main/resource/attachment3.txt"); emailHelper.send(); } catch (Exception e) {
e.printStackTrace();
}
}
}

需要读取邮箱邮件,可参考另一篇博文 JavaMail 查询邮件

参考资料

Java - Sending Email