javamail郵件Multipart支持同時發text和html混合消息,alternative純文本與超文本共存


javamail郵件Multipart支持同時發text和html混合消息alternative純文本與超文本共存

multipart/mixed:附件。

multipart/related:內嵌資源。

multipart/alternative:純文本與超文本共存。

/**
     * 以Multipart混合格式發送郵件
     * 
     * @param mailInfo
     *            待發送的郵件信息
     */
    public boolean sendMultipartMail(MailSenderInfo mailInfo) {
        if(Common.isNullOrEmpty(mailInfo.getFromAddress())) {
            System.out.println("FromAddress is empty");
            return false;
        }
        // 判斷是否需要身份認證
        MailAuthenticator authenticator = null;
        Properties pro = mailInfo.getProperties();
        // 如果需要身份認證,則創建一個密碼驗證器
        if (mailInfo.isValidate()) {
            authenticator = new MailAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());
        }
        // 根據郵件會話屬性和密碼驗證器構造一個發送郵件的session
        Session sendMailSession = Session.getDefaultInstance(pro, authenticator);
        try {
            // 根據session創建一個郵件消息
            Message mailMessage = new MimeMessage(sendMailSession);
            // 創建郵件發送者地址
            Address from = new InternetAddress(mailInfo.getFromAddress());
            // 設置郵件消息的發送者
            mailMessage.setFrom(from);
            // 創建郵件的接收者地址,並設置到郵件消息中
            Address to = new InternetAddress(mailInfo.getToAddress());
            // Message.RecipientType.TO屬性表示接收者的類型為TO
            mailMessage.setRecipient(Message.RecipientType.TO, to);
            // 設置郵件消息的主題
            mailMessage.setSubject(mailInfo.getSubject());
            // 設置郵件消息發送的時間
            mailMessage.setSentDate(new Date());
            
//            System.out.println("mailInfo.getText=" + mailInfo.getText());
//            System.out.println("mailInfo.getHtml=" + mailInfo.getHtml());
            
            MimeBodyPart textPart = new MimeBodyPart();
            textPart.setContent(mailInfo.getText(), "text/plain; charset=utf-8"); 
            MimeBodyPart htmlPart = new MimeBodyPart();
            htmlPart.setContent(mailInfo.getHtml(), "text/html; charset=utf-8");
            // MiniMultipart類是一個容器類,包含MimeBodyPart類型的對象
            Multipart mp = new MimeMultipart("alternative");//mixed related alternative
            mp.addBodyPart(textPart);
            mp.addBodyPart(htmlPart);
            // 將MiniMultipart對象設置為郵件內容
            mailMessage.setContent(mp);
            // 發送郵件
            Transport.send(mailMessage);
            return true;
        } catch (MessagingException ex) {
            ex.printStackTrace();
        }
        return false;
    }
import java.util.Properties;

public class MailSenderInfo {

    // 發送郵件的服務器的IP和端口
    private String mailServerHost;
    private String mailServerPort = "25";
    // 郵件發送者的地址
    private String fromAddress;
    // 郵件接收者的地址
    private String toAddress;
    // 登陸郵件發送服務器的用戶名和密碼
    private String userName;
    private String password;
    // 是否需要身份驗證
    private boolean validate = false;
    // 郵件主題
    private String subject;
    // 郵件的文本內容
    private String html;
    // 郵件的文本內容
    private String text;

    // 郵件附件的文件名
    private String[] attachFileNames;

    private String iwallHost;

    /**
     * 獲得郵件會話屬性
     */
    public Properties getProperties() {
        Properties p = new Properties();
        p.put("mail.smtp.host", this.mailServerHost);
        p.put("mail.smtp.port", this.mailServerPort);
        p.put("mail.smtp.auth", validate ? "true" : "false");
        p.put("mail.smtp.userName", this.userName);
        p.put("mail.smtp.password", this.password);
        return p;
    }

    public String getMailServerHost() {
        return mailServerHost;
    }

    public void setMailServerHost(String mailServerHost) {
        this.mailServerHost = mailServerHost;
    }

    public String getMailServerPort() {
        return mailServerPort;
    }

    public void setMailServerPort(String mailServerPort) {
        this.mailServerPort = mailServerPort;
    }

    public boolean isValidate() {
        return validate;
    }

    public void setValidate(boolean validate) {
        this.validate = validate;
    }

    public String[] getAttachFileNames() {
        return attachFileNames;
    }

    public void setAttachFileNames(String[] fileNames) {
        this.attachFileNames = fileNames;
    }

    public String getFromAddress() {
        return fromAddress;
    }

    public void setFromAddress(String fromAddress) {
        this.fromAddress = fromAddress;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getToAddress() {
        return toAddress;
    }

    public void setToAddress(String toAddress) {
        this.toAddress = toAddress;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getSubject() {
        return subject;
    }

    public void setSubject(String subject) {
        this.subject = subject;
    }

    public String getHtml() {
        return html;
    }

    public void setHtml(String html) {
        this.html = html;
    }

    public String getText() {
        return text;
    }

    public void setText(String text) {
        this.text = text;
    }

    public String getIwallHost() {
        return iwallHost;
    }

    public void setIwallHost(String iwallHost) {
        this.iwallHost = iwallHost;
    }

}

 

注:不同運營商發送后看到的郵件源文件信息頭內容是不一樣的。

multipart/alternative:純文本與超文本共存。 這個協議是要兩種共存的,根據客戶端接收的情況來顯示的,有些客戶端只接收純文本的內容的。調用submail的到163那里只能看到同樣的html內容,但同樣內容調用sendgril卻可以在163郵件信息頭那里看到text和html兩個不同的內容。
submail發送在163頭信息那里只能看到html的部分,如果把textPart放到下面就只能看到text的部分,不能像sendgril一樣text,html內容在頭信息那里都能看到,然后根據客戶端情況顯示不同內容

當一封郵件同時包含txt和html時,txt部分會默認不顯示
顯示是html沒錯的,sendgril的在郵件信息里面可以看到不同的內容。

咨詢了運營商說優先顯示html內容的,不接受html就顯示文本。沒有什么問題。而且現在web郵件客戶端基本都支持html格式的了,gmail在2015年后就去掉了純文本模式了。

 發送到個人gmail郵箱的時候顯示這個紅點, submail.cn 未加密這封郵件 這個要怎么處理呢?(企業郵箱和QQ,163郵箱沒有這個警告)
要找submail的技術給開通tls加密的才行,用amazonses發送的則不需要另外處理,默認就是tls加密的。
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM