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

时间:2022-04-07 18:12:59

本案例演示发送 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