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加密的。
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值