gpt4 book ai didi

java - Postfix 返回无效地址; 454 <至@domain.com> : Relay access denied

转载 作者:行者123 更新时间:2023-11-30 07:00:17 27 4
gpt4 key购买 nike

我正在使用预配置的 Postfix 服务器并使用 JavaMail 与其交互。我正在尝试向可能请求的任何外部域发送电子邮件通知。

这是发送测试电子邮件的java方法:

public void TestEmail() {

String to = "to@domain.com";

String from = "noreply@hostdomain.com";
final String username = "user";
final String password = "password";

String host = "xxx.xxx.xxx.xxx";

Properties props = new Properties();
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.host", host);
props.put("mail.smtp.port", "587");

Session session = Session.getInstance(props,
new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
});
try {
Message message = new MimeMessage(session);

message.setFrom(new InternetAddress(from));

message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));

message.setSubject("Test Email");

message.setContent("This is a test email", "text/html");

Transport.send(message);

System.out.println("The test message was sent!");
} catch (MessagingException e) {
throw new RuntimeException(e);
}

}

当我运行包含 JavaMail 代码的方法时,我得到
generalError: javax.mail.SendFailedException: Invalid Addresses;
nested exception is:
com.sun.mail.smtp.SMTPAddressFailedException: 454 4.7.1 <to@domain.com>: Relay access denied

我能够使用
测试从 Postfix 服务器发出的邮件 echo "This is the body" | mail -s "This is the subject" to@domain.com
并确实在测试收件箱中收到了电子邮件。

我不是 100% 确定 Postfix 服务器上的所有设置是什么,但我怀疑这就是问题所在,但我对它还不够熟悉,无法开始挖掘并随意更改内容 -无论如何。

编辑:我删除了Authenticator()从 session 创建中设置并替换 Transport.send()带有推荐的代码块

        Transport transport = session.getTransport("smtp");
transport.connect(host, 587, username, password);
transport.sendMessage(message, message.getAllRecipients());
transport.close();

整套新代码是:

    String host = "xxx.xxx.xxx.xxx";

Properties props = new Properties();
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.host", host);
props.put("mail.smtp.port", "587");

Session session = Session.getInstance(props, null);

try {
Message message = new MimeMessage(session);

message.setFrom(new InternetAddress(from));

message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));

message.setSubject("Test Email");

message.setContent("This is a test email", "text/html");

Transport transport = session.getTransport("smtp");
transport.connect(host, 587, username, password);
transport.sendMessage(message, message.getAllRecipients());
transport.close();

System.out.println("The test message was sent!");
} catch (MessagingException e) {
System.out.println("Error: " + e);
e.printStackTrace();
throw new RuntimeException(e);
}

}

这已将我收到的错误消息更改为:Unrecognized SSL message, plaintext connection?

<小时/>

已解决

解决方案:Java 代码不是问题。 Postfix 服务器未配置为接受来自非本地 IP/主机的电子邮件。 IP 已添加到 mynetworks 变量中的 main.cf 中。

最佳答案

This article有更多信息。

首先,按照 JavaMail FAQ 中所述删除身份 validator 。这将确保它确实尝试向服务器进行身份验证。开启JavaMail session debugging以确保它正在验证。

请注意,您可以替换

    Transport transport = session.getTransport("smtp");
transport.connect(host, 587, username, password);
transport.sendMessage(message, message.getAllRecipients());
transport.close();

    Transport.send(message, username, password);

您可以删除 mail.smtp.auth 设置,但保留其他属性。

确保您使用的是 most current version of JavaMail .

如果仍然不起作用,上面的文章可能会提供一些有关如何更改 Postfix 配置的线索。

关于java - Postfix 返回无效地址; 454 <至@domain.com> : Relay access denied,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41045437/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com