【问题标题】:SMTP Mail Sending Issue : com.sun.mail.smtp.SMTPAddressFailedException: 550 5.7.1 Unable to relaySMTP 邮件发送问题:com.sun.mail.smtp.SMTPAddressFailedException: 550 5.7.1 无法中继
【发布时间】:2018-04-19 15:51:27
【问题描述】:

我正在尝试从 Java 发送邮件。 如果我将邮件发送到同一个 SMTP,它工作正常。 如果我将邮件发送到外部 SMTP 方式,例如 Gmail、Yahoo 等,则会显示错误,

[com.sun.mail.smtp.SMTPAddressFailedException: 550 5.7.1 无法中继][1]

错误:

SimpleEmail Start
javax.mail.SendFailedException: Invalid Addresses;
  nested exception is:
    com.sun.mail.smtp.SMTPAddressFailedException: 550 5.7.1 Unable to relay

Mail Send Successfully
    at com.sun.mail.smtp.SMTPTransport.rcptTo(SMTPTransport.java:2064)
    at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1286)
    at javax.mail.Transport.send0(Transport.java:255)
    at javax.mail.Transport.send(Transport.java:124)
    at com.nirav.java.project.demo.JavaMailSend.sendEmail(JavaMailSend.java:26)
    at com.nirav.java.project.demo.NewSimpleMail.main(NewSimpleMail.java:34)
Caused by: com.sun.mail.smtp.SMTPAddressFailedException: 550 5.7.1 Unable to relay

    at com.sun.mail.smtp.SMTPTransport.rcptTo(SMTPTransport.java:1917)
    ... 5 more

邮件发送代码:

try {
            System.out.println("SimpleEmail Start");

            String smtpHostServer = "XX.XX.XX.XXX";
            final String toEmail = "XXXXXXXXXX@XXX.XXX";
            final String fromEmail = "XXXXXXXXXX@XXX.XXX";
            final String password = "XXXXXXXXXXXX";

            Properties props = System.getProperties();

            props.put("mail.smtp.host", smtpHostServer);
            props.put("mail.smtp.port", "25"); //If other then

            Session session = Session.getInstance(props, new javax.mail.Authenticator() {
                protected PasswordAuthentication getPasswordAuthentication() {
                    return new PasswordAuthentication(fromEmail, password);
                }
            });
            //Session session = Session.getInstance(props, null);

          MimeMessage message = new MimeMessage(session);

          message.addHeader("Content-type", "text/HTML; charset=UTF-8");
          message.addHeader("format", "flowed");
          message.addHeader("Content-Transfer-Encoding", "8bit");
          message.setFrom(new InternetAddress("XXXXXX@XXX.XXX", "NoReply-JD"));
          message.setReplyTo(InternetAddress.parse("XXXXXXXXX@XXX.XXX", false));
          message.setSubject(subject, "UTF-8");
          message.setText(body, "UTF-8");
          message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(toEmail, false));
          Transport.send(message);

            System.out.println("Mail Send Successfully");
        } catch (Exception e) {
            e.printStackTrace();
        }

请帮助我。 谢谢。

【问题讨论】:

  • 正如您在另一条评论中所说,它可以工作,然后您手动传递 SMTP 命令,您应该使用像 wireshark 这样的网络转储程序来准确控制 java 程序发送的内容,以及有什么区别。

标签: java jakarta-mail smtp-auth


【解决方案1】:

本来打算发这个评论的,但是太长了。

错误很明显,你不能使用给定的 SMTP 服务器作为中继。 (What are SMTP relays?)

发生这种情况的原因有两个:

  • 您未通过身份验证(发送前需要登录)

  • 收件人不在允许中继到的域列表中

  • 您要连接的 IP 地址不在白名单中(在后缀上下文中也称为 mynetworks)

如果不提供更多信息(您正在使用哪个 SMTP 服务器、您在哪里发送邮件、您是否经过身份验证),我想没有人会帮助您。

5.7.1 status code from IANA registry

发件人无权发送到目的地。这可以是 每个主机或每个收件人过滤的结果。这份备忘录不 讨论任何此类过滤的优点,但提供了一种机制 报告这样的。这仅作为永久性错误有用。

【讨论】:

  • 但是如果我登录 SMTP 服务器并尝试从它发送到 gmail 它工作正常。但使用 java 代码则不然。
  • 你说的if i will login in SMTP server 是什么意思?
  • 表示登录 SMTP 并仅从那里发送而不是 Java 代码。
  • 抱歉,from there 是什么?像使用某些 CLI 从 shell 中一样?还是什么?
  • 就像您登录 Gmail 并撰写新电子邮件并仅从那里发送,而不是通过您的 java 代码发送邮件。
【解决方案2】:

也有这个问题,但它是间歇性的。 我们在一个集群中有 2 台服务器,其中一台服务器发送电子邮件的系统的 IP 地址未正确定义。 不幸的是,错误消息“javax.mail.SendFailedException: Invalid Addresses 令人困惑。 第二条错误消息:“com.sun.mail.smtp.SMTPAddressFailedException: 550 relay not allowed”匹配得更好。

【讨论】:

    猜你喜欢
    • 2015-03-11
    • 2014-07-25
    • 2012-08-12
    • 2018-08-02
    • 2015-08-16
    • 1970-01-01
    • 2015-02-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多