当在另一台计算机上执行Runnable jar时,JavaMail MimeMessage将不会发送

时间:2018-08-31 19:54:37

标签: java email jar javamail

我有一个非常简单的JavaMail应用程序。当我在Eclipse中运行它或将其导出为可运行的jar时,它工作得很好。当我尝试在其他计算机上运行它时,不会发送电子邮件,也不会引发异常。在代码中,我有一些println()来查看程序在哪里。

它变为“ --- 2 ---”,所以我假设MimeMessage对象或Session对象在移到另一台计算机时出了问题。

有人知道为什么程序的这一部分可以在一台计算机上运行而不能在另一台计算机上运行吗?

try {

Properties properties = new Properties();
properties.put("mail.smtp.auth", "true");
properties.put("mail.smtp.starttls.enable", "true");
properties.put("mail.smtp.host", "smtp-mail.outlook.com");
properties.put("mail.smtp.port", "587");

Session session = Session.getInstance(properties,
    new javax.mail.Authenticator() {
        protected javax.mail.PasswordAuthentication getPasswordAuthentication() {
        return new javax.mail.PasswordAuthentication(username, password);
    }
});

System.out.println("--- 1 ---");

    System.out.println("--- 2 ---");

    MimeMessage message = new MimeMessage(session);
    System.out.println("--- 3 ---");

    message.setFrom(new InternetAddress(from));
    System.out.println("--- 4 ---");

    message.setRecipients(Message.RecipientType.TO, addressList);
    System.out.println("--- 5 ---");

    message.setSubject(subject + " " + LocalDateTime.now().format(mainDateFormatter));
    System.out.println("--- 6 ---");
    System.out.println(message.getSubject());

    message.setContent(html, "text/html");

    System.out.println("--- 7 ---");
    Transport.send(message);

    System.out.println("Done");

    } catch (Exception e) {     
        System.out.println(e.toString());
       throw new RuntimeException(e);
    }

1 个答案:

答案 0 :(得分:0)

您必须验证邮件服务器。如果您使用自己的邮件服务器,则可以对其进行设置。这样就不需要身份验证,但是出于我希望有明显的原因,没有一个公共电子邮件服务供应商会允许这样做。