【发布时间】:2017-09-04 08:37:50
【问题描述】:
我使用以下代码使用 java spring 发送电子邮件。我可以使用此代码成功发送普通短信。但我在此 (/////////) 下面添加了部分,以便发送 html 电子邮件。之后,消息不发送。 (你可以看到我添加了 //////////// 来分隔下面的代码。上面那部分工作正常)
public void sendUserRegisterEmail(String receiver, String receiverEmailAddress){
MimeMessagePreparator preparator = new MimeMessagePreparator() {
public void prepare(MimeMessage mimeMessage) throws Exception {
MimeMessageHelper message = new MimeMessageHelper(mimeMessage);
message.setSubject(USER_REGISTER_MESSAGE_SUBJECT);
message.setTo(receiverEmailAddress);
message.setFrom(SENDER_EMAIL_ADDRESS);
message.setText(String.format(USER_REGISTER_MESSAGE_BODY, receiver));
//////////////////////////////////////////////////////////////////////
Properties properties= getProperties();
Session session = Session.getDefaultInstance(properties);
MimeMessage msg = new MimeMessage(session);
msg.setFrom(new InternetAddress(SENDER_EMAIL_ADDRESS, "Admin"));
msg.addRecipient(Message.RecipientType.TO,
new InternetAddress(receiverEmailAddress, "user"));
msg.setSubject(USER_REGISTER_MESSAGE_SUBJECT,"UTF-8");
Multipart mp = new MimeMultipart();
MimeBodyPart htmlPart = new MimeBodyPart();
htmlPart.setContent(message,"E:\\test.html");
mp.addBodyPart(htmlPart);
msg.setContent(mp);
Transport.send(msg);
}
};
sendEmail(preparator);
}
这是我运行代码后的控制台。我怎么也看不到任何错误。我使用 Itellij IDE 和 Jetty 作为服务器。
DEBUG: JavaMail version 1.5.6
DEBUG: successfully loaded resource: /META-INF/javamail.default.providers
DEBUG: Tables of loaded providers
DEBUG: Providers Listed By Class Name: {com.sun.mail.smtp.SMTPSSLTransport=javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Oracle], com.sun.mail.smtp.SMTPTransport=javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Oracle], com.sun.mail.imap.IMAPSSLStore=javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Oracle], com.sun.mail.pop3.POP3SSLStore=javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Oracle], com.sun.mail.imap.IMAPStore=javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Oracle], com.sun.mail.pop3.POP3Store=javax.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Oracle]}
DEBUG: Providers Listed By Protocol: {imaps=javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Oracle], imap=javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Oracle], smtps=javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Oracle], pop3=javax.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Oracle], pop3s=javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Oracle], smtp=javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Oracle]}
DEBUG: successfully loaded resource: /META-INF/javamail.default.address.map
编辑: 我还关注了this example 并尝试发送 html 电子邮件。但我无法将它与我的代码集成。
这是我的html文件
<html>
this is s HTML text
</html>
【问题讨论】:
-
您是否尝试过其他电子邮件:不同的电子邮件提供商?
-
没有。这种方法对于普通的文本电子邮件是成功的。问题仅在于 html 电子邮件
-
好的,你能简化你的HTML,只留下一个简单的标签,比如“p”,里面有文本吗?如果电子邮件包含一些不允许的标签或脚本,一些提供商会阻止电子邮件。
-
我会将我的 html 作为编辑放在问题中
-
您的代码与我分享的不同:尝试将第二个参数作为 true 传递:msg.setContent(mp, true);并尝试我的变种。希望对你有帮助
标签: java spring jakarta-mail html-email