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加密的。
 

javamail邮件Multipart支持同时发text和html混合消息,alternative纯文本与超文本共存的更多相关文章

  1. javaMail 邮件发送和接收示例,支持正文图片、html、附件(转)

    转自:https://blog.csdn.net/star_fly4/article/details/52037587 一.RFC882文档简单说明 RFC882文档规定了如何编写一封简单的邮件(纯文 ...

  2. 19、文件上传与下载/JavaMail邮件开发

    回顾: 一. 监听器 生命周期监听器 ServletRequestListener HttpSessionListener ServletContextListener 属性监听器 ServletRe ...

  3. Java-Mail邮件开发

    Email的历史比Web还要久远,直到现在,Email也是互联网上应用非常广泛的服务. 几乎所有的编程语言都支持发送和接收电子邮件,但是,先等等,在我们开始编写代码之前,有必要搞清楚电子邮件是如何在互 ...

  4. JavaMail邮件开发

    一.只带有纯文本的邮件 代码事例如下: package com.lyh.sendemail; import java.util.Properties; import javax.mail.Messag ...

  5. 带有附件及图片正文的JavaMail邮件发送

    1 package javamail; 2 3 import java.io.UnsupportedEncodingException; 4 import java.util.Properties; ...

  6. JavaMail邮件发送不成功的那些坑人情况及分析说明

    [我的Segmentfault原文]https://segmentfault.com/a/1190000008030346 前言   JavaMail的使用本身并不难,网上有不少案例,简单易懂,而且有 ...

  7. JavaMail入门:创建纯文本、HTML格式的邮件

    转自:http://haolloyin.blog.51cto.com/1177454/353849/ 在 http://java.sun.com/products/javamail/ 下载了 Java ...

  8. WCF学习笔记——不支持内容类型 text/xml; charset=utf-8

    我在使用WCF的时候,客户端运行报错: 不支持内容类型 text/xml; charset=utf-8 原因是WCF服务做了修改.刷新客户端的服务引用,问题消失 =================== ...

  9. Python模块探秘之smtplib,实现纯文本邮件的发送

    今天学到了如何使用Python的smtplib库发送邮件,中间也是遇到了各种各样的错误和困难,还好都一一的解决了.下面来谈一谈我的这段经历. 配置你的邮箱 为什么要配置邮箱呢?具体要配置什么呢? 因为 ...

随机推荐

  1. InnoDB log file 设置多大合适?

    简介: 数据库的东西,往往一个参数就牵涉N多知识点.所以简单的说一下.大家都知道innodb是支持事务的存储引擎.事务的四个特性ACID即原子性(atomicity),一致性(consistency) ...

  2. MySQL 5.5加主键锁读问题【转载】

    背景      有同学讨论到MySQL 5.5下给大表加主键时会锁住读的问题,怀疑与fast index creation有关,这里简单说明下. 对照现象          为了说明这个问题的原因,有 ...

  3. linux网络设置和虚拟机克隆转移之后网卡找不到

    linux网络设置和虚拟机克隆转移之后Error:No suitable device found:no device found for connection 'System eth0'问题解决   ...

  4. SQL 流水账余额查询

    创建表 CREATE TABLE [dbo].[test]( ,) NOT NULL, [RQ] [date] NULL, [SR] [int] NULL, [ZC] [int] NULL ) ON ...

  5. PHP数字字符串左侧补0、字符串填充和自动补齐的几种方法

    一.数字补0. 如果要自动生成学号,自动生成某某编号,就像这样的形式“d0000009”.“d0000027”时,那么就会面临一个问题,怎么把左边用0补齐成这样8位数的编码呢?我想到了两种方法实现这个 ...

  6. python字符串前面加u,r,b的含义

    转自:https://blog.csdn.net/u010496169/article/details/70045895 u/U:表示unicode字符串 不是仅仅是针对中文, 可以针对任何的字符串, ...

  7. 【Linux】-NO.7.Linux.3.Maven.1.001-【CentOS 7 Install Maven 3.5】-

    1.0.0 Summary Tittle:[Linux]-NO.7.Linux.3.Maven.1.001-[CentOS 7 Install Maven 3.5]- Style:Linux Seri ...

  8. Generator yield语法和 co模块

    Generator  yield 语法使用,也叫生成器,实际上就是多个异步按顺序执行 1.下面是一个读取两个文件的例子 const fs = require('fs'); const readFile ...

  9. express-generator 自动生成服务器基本文件

    (1) 安装 express-generator 构建工具 npm install -g express-generator 在命令行中用 npm 在全局安装 express-generator 脚手 ...

  10. 从零开始一起学习SLAM | SLAM有什么用?

    SLAM是 Simultaneous Localization And Mapping的 英文首字母组合,一般翻译为:同时定位与建图.同时定位与地图构建. 「同时定位与地图构建」这几个词,乍一听起来非 ...