您的当前位置:首页javamail邮件Multipart支持同时发text和html混合消息,alterna。。。

javamail邮件Multipart支持同时发text和html混合消息,alterna。。。

2023-09-25 来源:乌哈旅游
javamail邮件Multipart⽀持同时发text和html混合消息,alterna。。。

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.hosthis.mailServerHost); p.put(\"mail.smtp.porthis.mailServerPort);

p.put(\"mail.smtp.auth\ p.put(\"mail.smtp.userNamehis.userName); p.put(\"mail.smtp.passwordhis.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加密的。

因篇幅问题不能全部显示,请点此查看更多更全内容