java - 使用 servlet 发送电子邮件

标签 java email servlets

我必须通过 servlet 发送电子邮件,我已经尝试了一堆代码,但没有一个适用于 gmail 帐户,有什么想法吗?

 java.security.Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
        Properties props = new Properties();
        props.put("mail.transport.protocol", "smtp");
        props.put("mail.smtp.starttls.enable","true");
        props.put("mail.smtp.host", "smtp.gmail.com");
        props.put("mail.smtp.auth", "true");

        Authenticator auth =  new SMTPAuthenticator();
        //auth = null;
        Session sess = Session.getInstance(props, auth);

        sess.setDebug(false);
           // -- Create a new message --
           Message msg = new MimeMessage(sess);

           // -- Set the FROM and TO fields --
           msg.setFrom(new InternetAddress("myemail@gmail.com"));
           msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(
             "sendtoemail", false));
           msg.setSubject("Test");
           msg.setText("Yippe");
           msg.setSentDate(new Date());
           Transport.send(msg);

           public class SMTPAuthenticator extends javax.mail.Authenticator {
           @Override
           public PasswordAuthentication getPasswordAuthentication() {
           String username = "myemail@gmail.com";
           String password = "mypass";
           return new PasswordAuthentication(username, password);
           }

此代码抛出 javax.mail.MessagingException: Could not convert socket to TLS 异常

最佳答案

只是切换到 commons-email 不会消除这个异常(exception)。此外,切换到 commons-email 会导致异常中有用信息的数量减少——异常日志中的以下行将不再存在:

nested exception is:
    javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: 
    sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

在这种情况下,真正的线索是在嵌套异常中。

要修复它,您需要将电子邮件服务器证书安装到 JVM keystore 。默认 keystore 的位置取决于 java 发行版。在我的例子中是 /etc/java-6-sun/security/cacert

添加证书后认证成功。

关于java - 使用 servlet 发送电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1783334/

相关文章:

java - 如何在 Java 信任库中导入 jks 证书

ios - 有没有办法在 MFMailComposeViewController 中的 "Send"之前以编程方式更改电子邮件正文?

android - GCM 发送图像而不是消息

java - 连接客户端-服务器 RMI

java - 如何在java项目中提取PE-Header信息?

java - 使用 Java 在 PostgreSQL 中存储时间的最推荐方法是什么?

Java 电子邮件 - 当我发送 2 封具有相同主题的邮件时,消息会合并在一起

email - 如何从电子邮件地址查找博客?

java - 从 Eclipse 执行 servlet 时出错

java - 需要将 servlet 输出获取到 html 文件中