【问题标题】:Error sendin email with Javamail: com.sun.mail.smtp.SMTPSenderFailedException: 550 5.1.0 *@* sender rejected使用 Javamail 发送电子邮件时出错:com.sun.mail.smtp.SMTPSenderFailedException: 550 5.1.0 *@* 发件人被拒绝
【发布时间】:2016-02-15 01:20:03
【问题描述】:

我正在尝试通过 Javamail 以编程方式向一组收件人发送电子邮件。我设置了一个 MimeMessagePreparator 并将其传递给 JavaMailSenderImpl,但是在发送电子邮件时我得到以下信息:

org.springframework.mail.MailSendException:消息失败: com.sun.mail.smtp.SMTPSendFailedException:550 5.1.0 我的电脑!!>发件人被拒绝

所以,发件人看起来像我的电脑。

这是我的代码:

public class EmailNotifier {

    private JavaMailSenderImpl mailSender;
    @Value("${application.mail.sender.address}")
    private String senderEmail;
    @Value("${application.mail.subject}")
    private String emailSubject;
    @Value("${application.mail.sender.address}")
    private String senderAddress;
    @Value("${application.mail.sender.password}")
    private String senderPassword;
    @Value("${application.mail.server.outgoing.port}")
    private int outgoingPort;
    @Value("${application.mail.server.outgoing}")
    private String outgoingServer;
    @Value("${application.mail.content}")
    private String contentTemplate;
    private static String BODY_CONTENT_TYPE = "text/html; charset=utf-8";
    private static String PDF_CONTENT_TYPE = "application/pdf";

    @PostConstruct
    public void init() {
        mailSender = new JavaMailSenderImpl();
        mailSender.setPassword(senderPassword);
        mailSender.setUsername(senderAddress);
        mailSender.setPort(outgoingPort);
        mailSender.setHost(outgoingServer);
    }

    public void sendEmail(InputStream pdfInputStream, String aRecipient) throws MessagingException {

        final String commaSeparatedRecipientsEmail = getRecipients();

        String content = contentTemplate;
        MimeMessagePreparator msgPreparator = new MimeMessagePreparator() {

            public void prepare(MimeMessage msg) throws Exception {
                msg.addRecipients(Message.RecipientType.TO, emailsAgenzia);
                msg.setSubject(emailSubject.replace(emailSubject);
                MimeBodyPart bodyPart = new MimeBodyPart();
                bodyPart.setContent(content, BODY_CONTENT_TYPE);

                MimeBodyPart attachmentPart = new MimeBodyPart();

                ByteArrayDataSource pdf = new ByteArrayDataSource(pdfInputStream, PDF_CONTENT_TYPE);

                attachmentPart.setDataHandler(new DataHandler(pdf));
                String fileName = getFilename();
                attachmentPart.setFileName(fileName);

                Multipart multipart = new MimeMultipart();
                multipart.addBodyPart(bodyPart);
                multipart.addBodyPart(attachmentPart);
                msg.setContent(multipart);
            }
        };

        this.mailSender.send(msgPreparator);
    }
}

怎么了?

【问题讨论】:

  • 问题可能是您试图直接从您的台式 PC 提交电子邮件,而无需通过可识别的邮件主机。大多数接收 SMTP 服务器使用专门排除动态 IP 地址的 DNS 黑名单,如果您直接从外部 IP 为动态的系统发送邮件,您将被大多数 SMTP 服务器拒绝。 application.mail.server.outgoing 的值是多少?您如何对传出服务器进行身份验证?
  • 我正在通过我的 PC 进行测试,但我的传出服务器引用了我注册的域。我正在通过 SMTP 使用用户名和密码进行身份验证。
  • 您需要检查服务器上的日志以查看邮件被拒绝的位置。没有它,就不可能进行故障排除。您管理 SMTP 服务器,还是由您的 ISP 处理?
  • 谢谢,但它由服务提供商管理,需要很长时间才能得到回复。如果可能,我更愿意尝试进行故障排除。

标签: java jakarta-mail


【解决方案1】:

这是一个 DNS 问题。您必须在 DNS 系统中插入您的发件人地址。

https://digitaltoolfactory.net/blog/2010/03/how-to-fix-the-550-5-1-0-address-rejected-email-problem/

或者邮件地址无效。

【讨论】:

  • 谢谢,我要求再次检查 MX 记录。
  • 这可能不是问题所在。请参阅我对这个问题的评论。
  • 哦,好的,当我遇到问题时,这个解决方案修复了它。但我认为与所有 cmets 的链接提供了一个很好的信息包如何处理这个错误和可能的原因。
  • 不幸的是,域配置正确。我尝试使用不同的外发服务器,但没有发送电子邮件。
【解决方案2】:

我最终不得不放弃 JavaMailSenderImpl 并使用较低级别的 API(Javamail 基本类而不是 Spring 类)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-22
    • 1970-01-01
    • 2018-12-18
    • 2017-07-16
    • 2015-03-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多