【问题标题】:Using Java Mail API. javax.mail.MessagingException: can't determine local email address Exception [duplicate]使用 Java 邮件 API。 javax.mail.MessagingException:无法确定本地电子邮件地址异常[重复]
【发布时间】:2019-02-20 21:23:05
【问题描述】:

我正在使用 java 邮件 API,它在本地机器上运行良好,但是当我在服务器上部署我的 web 应用程序时,我收到一个异常说 javax.mail.MessagingException: can't determine local email地址。

这是我的代码

Properties props = new Properties();
    props.put("mail.smtp.host", "smtp.gmail.com");
    props.put("mail.smtp.socketFactory.port", "465");
    props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
    props.put("mail.smtp.auth", "true");
    props.put("mail.smtp.port", "465");

    try {
    Session session = Session.getInstance(props, new javax.mail.Authenticator() {
        protected PasswordAuthentication getPasswordAuthentication() {
            return new PasswordAuthentication("fromEmailAdd@gmail.com", "fromEmailPass");
        }
    });

        MimeMessage message = new MimeMessage(session);
        message.addRecipient(Message.RecipientType.TO, new InternetAddress("to@gmail.com"));
        message.setSubject("sub");
        message.setText("msg");    
        Transport.send(message);

        System.out.println("mail sent successfully");
    } catch (Exception e) {
        e.printStackTrace();
        throw new RuntimeException(e);

    }

下面给出的是这段代码抛出的异常。

javax.mail.MessagingException: 无法确定本地电子邮件地址

【问题讨论】:

    标签: java email jakarta-mail


    【解决方案1】:

    从这个问题: Failed messages: javax.mail.MessagingException: can't determine local email address

    作者似乎暗示,当from地址没有设置时,会抛出这个异常。

    MimeMessage message = new MimeMessage(session);
    message.addRecipient(Message.RecipientType.TO, new InternetAddress("to@gmail.com"));
    message.setFrom("from@gmail.com"); // <-- add 'from' email address
    message.setSubject("sub");
    message.setText("msg");    
    Transport.send(message);
    

    【讨论】:

    • 这个问题不应该出现在本地机器上吗?它在本地运行良好,但在将其部署到服务器后无法运行:\
    • 这很奇怪,如果这是完全相同的代码,它也应该在本地机器上失败。我知道这不会解决为什么它在本地机器上没有失败的问题,但是如果它解决了网络应用程序中的问题,你是否尝试过 message.setFrom(...) 呢?
    • 我已经设法使用您的代码(使用我的电子邮件设置)从我的本地计算机发送一封电子邮件,并且通过省略 message.setFrom(...) 与您一样,它不会引发异常 javax.mail.MessagingException:无法确定本地电子邮件地址
    • 这很奇怪,但它在您的建议下在服务器上工作。非常感谢:)
    【解决方案2】:

    消息说“本地电子邮件地址丢失”,这意味着发件人的电子邮件地址丢失。我认为你可以尝试做这样的事情:

    JavaMailSenderImpl sender = new JavaMailSenderImpl();
    sender.setHost("mail.host.com")
    
    MimeMessage message = sender.createMimeMessage();
    
    MimeMessageHelper helper = new MimeMessageHelper(message);
    helper.setFrom("from@from.address");
    helper.setTo("to@to.com");
    helper.setText("testing text");
    

    【讨论】:

    • 不是来自 Spring 框架的 MimeMessageHelper 类吗?我没有使用 Spring 框架。
    • 它是,如果你不弹,你可以这样设置:MimeMessage mimeMessage = mailSender.createMimeMessage(); mimeMessage.setRecipients(Message.RecipientType.TO, InternetAddress.parse(recipients)); mimeMessage.setFrom(sender); mimeMessage.setSubject(主题); mimeMessage.setContent(html, TEXT_HTML);
    • 基本上你缺少 message.setFrom("your@mail.com");
    • Fab Sanchez 也提出了这个建议,但为什么它在本地机器上工作?
    猜你喜欢
    • 2016-04-14
    • 2017-09-13
    • 2017-07-23
    • 2013-01-25
    • 2012-04-08
    • 1970-01-01
    • 2023-03-14
    • 2011-10-19
    • 1970-01-01
    相关资源
    最近更新 更多