Spring JavaMailSender:收件人设置为 "default"

Spring JavaMailSender: recipient set as "default"

这是我的第一个问题,所以我想保持简单。 Spring 框架版本 4.1.8.RELEASE 中的 JavaMailSender 有问题。似乎对于特定的 SMTP,它不会将收件人添加到邮件中。我想提一下,我们在其他项目中使用相同的解决方案并且它始终有效。从现在开始,收件人就没有问题了。

这是我们如何设置收件人的代码示例(setupRecipients 方法):

String emailTo = entity.getEmailTo();
Preconditions.checkNotNull( !Strings.isNullOrEmpty( emailTo ) );
emailTo = emailTo.replace( ",", " " );
emailTo = emailTo.replace( ";", " " );
InternetAddress[] emails = InternetAddress.parse( emailTo );

for ( InternetAddress address : emails )
    address.validate();

for ( InternetAddress address : emails )
    messageHelper.setTo( address.getAddress() );

if ( !Strings.isNullOrEmpty( bcc ) )
    messageHelper.addBcc( bcc );

这是我们如何发送电子邮件的示例(其中 mailSender 是 JavaMailSender 类型):

    MimeMessage message = this.mailSender.createMimeMessage();

    try {
        MimeMessageHelper e = new MimeMessageHelper(message, true, "utf-8");
        e.setFrom(this.from);
        message.setSubject(this.createSubject(entity));
        this.setupRecipients(entity, e);
        this.setupBody(entity, e);
        this.setupAttachments(entity, e);
        this.setupInlines(entity, e);
        this.mailSender.send(message);
    } catch (IOException | MessagingException var4) {
        Throwables.propagate(var4);
    }

当我尝试使用那个特殊的 SMTP 发送电子邮件时,我收到了这样的回复:

org.springframework.mail.MailSendException: Failed messages: javax.mail.SendFailedException: Invalid Addresses; 
  nested exception is:
 com.sun.mail.smtp.SMTPAddressFailedException: 504 5.5.2 <default>: Recipient address rejected: need fully-qualified address
 ; message exception details (1) are:
    Failed message 1:
    javax.mail.SendFailedException: Invalid Addresses;
    nested exception is:
    com.sun.mail.smtp.SMTPAddressFailedException: 504 5.5.2 <default>: Recipient address rejected: need fully-qualified address

    at com.sun.mail.smtp.SMTPTransport.rcptTo(SMTPTransport.java:1196)
    at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:584)
    at org.springframework.mail.javamail.JavaMailSenderImpl.doSend(JavaMailSenderImpl.java:433)
    at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:345)
    at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:340)
    at packagename.EmailExporter.export(EmailExporter.java:57)
    at packagename.ExportJobImpl$ExportCallback.onResult_aroundBody0(ExportJobImpl.java:86)
    at packagename.ExportJobImpl$ExportCallback$AjcClosure1.run(ExportJobImpl.java:1)
    at org.springframework.transaction.aspectj.AbstractTransactionAspect.ajc$around$org_springframework_transaction_aspectj_AbstractTransactionAspecta73e96cproceed(AbstractTransactionAspect.aj:66)
    at org.springframework.transaction.aspectj.AbstractTransactionAspect$AbstractTransactionAspect.proceedWithInvocation(AbstractTransactionAspect.aj:72)
    at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:281)
    at org.springframework.transaction.aspectj.AbstractTransactionAspect.ajc$around$org_springframework_transaction_aspectj_AbstractTransactionAspecta73e96c(AbstractTransactionAspect.aj:70)
    at packagename.ExportJobImpl$ExportCallback.onResult(ExportJobImpl.java:81)
    at packagename.ExportableEntityEnumeratorImpl.lambda$iterate(ExportableEntityEnumeratorImpl.java:30)
    at packagename.ExportableEntityEnumeratorImpl$$Lambda/1744828123.processRow(Unknown Source)
    at org.springframework.jdbc.core.JdbcTemplate$RowCallbackHandlerResultSetExtractor.extractData(JdbcTemplate.java:1607)
    at org.springframework.jdbc.core.JdbcTemplate.doInPreparedStatement(JdbcTemplate.java:708)
    at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:644)
    at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:695)
    at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:727)
    at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:752)
    at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:767)
    at packagename.ExportableEntityEnumeratorImpl.iterate_aroundBody0(ExportableEntityEnumeratorImpl.java:28)
    at packagename.ExportableEntityEnumeratorImpl$AjcClosure1.run(ExportableEntityEnumeratorImpl.java:1)
    at org.springframework.transaction.aspectj.AbstractTransactionAspect.ajc$around$org_springframework_transaction_aspectj_AbstractTransactionAspecta73e96cproceed(AbstractTransactionAspect.aj:66)
    at org.springframework.transaction.aspectj.AbstractTransactionAspect$AbstractTransactionAspect.proceedWithInvocation(AbstractTransactionAspect.aj:72)
    at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:281)
    at org.springframework.transaction.aspectj.AbstractTransactionAspect.ajc$around$org_springframework_transaction_aspectj_AbstractTransactionAspecta73e96c(AbstractTransactionAspect.aj:70)
    at packagename.ExportableEntityEnumeratorImpl.iterate(ExportableEntityEnumeratorImpl.java:27)
    at packagename.ExportJobImpl.run(ExportJobImpl.java:50)
    at packagename.MultiExportJobImpl.run(MultiExportJobImpl.java:42)
    at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access1(ScheduledThreadPoolExecutor.java:180)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Caused by: com.sun.mail.smtp.SMTPAddressFailedException: 504 5.5.2 <default>: Recipient address rejected: need fully-qualified address

    at com.sun.mail.smtp.SMTPTransport.rcptTo(SMTPTransport.java:1094)
    ... 38 more

这是我们尝试过的列表:

  1. 首先,我们咨询了SMTP提供商;但是,他们的回答是收件人设置为 "default",仅此而已。我们还请求了日志,但从那时起他们就没有提供它们(这不是我们的 SMTP,但他们仍然没有提供给所有者)。
  2. 其次,当我尝试使用 Spring 配置 JavaMail 并使用我的开发机器而不是我们的应用程序通常运行的服务器在本地发送电子邮件时,它按预期工作。此外,SMTP 在配置 for ex 时发送电子邮件也没有问题。雷鸟。
  3. 当我们在服务器上将他们的 SMTP 与我们的 SMTP 切换时,它起作用了。

结论是,问题一定出在服务器配置中,服务器与 SMTP 之间或 SMTP 之间。但是我不知道到底是什么导致了它。

我发现发送电子邮件时出现问题的原因。但是我不知道为什么会这样。

当我们将 BCC 或 CC 地址添加到 MessageHelper 时,无法发送消息并为收件人获取“default”。我尝试了不同的方法来做到这一点 addBcc, setBcc, addCc, setCc 但它们都产生相同的结果。这很奇怪,我真的找不到解释。

更新:

我们找到了真正的罪魁祸首。 bcc 中使用的地址的值为 default,当然没有记录和验证(这样的错误)。然而最有趣的是,由于注释 @Autowired,即使在设置为其他正确地址后,bcc 仍获得值 default。有趣的是 Spring 没有抛出异常,即使我们没有声明它可以连接到的任何值。