【问题标题】:Sending HTML email using Java spring?使用 Java spring 发送 HTML 电子邮件?
【发布时间】: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


【解决方案1】:

好的,试试我的 sn-ps,它们正在工作。

您甚至可以在没有 Spring IOC 的情况下将所有内容集中到一个地方,f.e.进入 main() 方法并运行。

配置(bean 声明)

  @Bean(name = "javaMailSender")
  public JavaMailSender javaMailSender(@Value("${mail.smtp.host}") String smtpHost,
                                       @Value("${mail.smtp.port}") int smtpPort,
                                       @Value("${mail.name}") String mailName,
                                       @Value("${mail.cred}") String mailCred) {
    Properties props = new Properties();
    props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
    props.put("mail.smtp.auth", "true");

    JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl();
    javaMailSender.setHost(smtpHost);
    javaMailSender.setPort(smtpPort);
    javaMailSender.setUsername(mailName);
    javaMailSender.setPassword(mailCred);
    javaMailSender.setJavaMailProperties(props);
    return javaMailSender;
  }

电子邮件服务

import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import javax.mail.MessagingException;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

@Service("mailNotificationService")
public class MailNotificationService {
  @Value("${mail.name}")
  String mailFrom;

  @Resource
  private JavaMailSender javaMailSender;

  public void notify(String to, String subject, String message) {
    try {
      InternetAddress[] parsed;
      try {
        parsed = InternetAddress.parse(to);
      } catch (AddressException e) {
        throw new IllegalArgumentException("Not valid email: " + to, e);
      }

      MimeMessage mailMessage = javaMailSender.createMimeMessage();
      mailMessage.setSubject(subject, "UTF-8");

      MimeMessageHelper helper = new MimeMessageHelper(mailMessage, true, "UTF-8");
      helper.setFrom(mailFrom);
      helper.setTo(parsed);
      helper.setText(message, true);

      javaMailSender.send(mailMessage);
    } catch (MessagingException ex) {
      throw new RuntimeException(ex);
    }
  }
}

【讨论】:

    【解决方案2】:

    你可以试试 在 String 或 StringBuffer 变量中初始化您的 html 文件假定 htmContent 并在 setContent 类型方法中作为第一个参数提供。

    htmlPart.setContent(htmContent.toString(), "text/html");

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-03
      • 2014-05-24
      • 2012-11-17
      • 1970-01-01
      相关资源
      最近更新 更多