这是我的第一个问题,所以我想保持简单。 我从Spring Framework 4.1.8.RELEASE中遇到JavaMailSender的问题。看起来,对于特定的SMTP,它不会将收件人添加到邮件中。我想提一下,我们在其他项目中使用相同的解决方案,并始终有效。从现在起,收件人没有问题。Spring JavaMailSender:收件人设置为“默认”
下面是代码示例中,我们如何建立收件人(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_AbstractTransactionAspect$1$2a73e96cproceed(AbstractTransactionAspect.aj:66)
at org.springframework.transaction.aspectj.AbstractTransactionAspect$AbstractTransactionAspect$1.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_AbstractTransactionAspect$1$2a73e96c(AbstractTransactionAspect.aj:70)
at packagename.ExportJobImpl$ExportCallback.onResult(ExportJobImpl.java:81)
at packagename.ExportableEntityEnumeratorImpl.lambda$iterate$9(ExportableEntityEnumeratorImpl.java:30)
at packagename.ExportableEntityEnumeratorImpl$$Lambda$31/1744828123.processRow(Unknown Source)
at org.springframework.jdbc.core.JdbcTemplate$RowCallbackHandlerResultSetExtractor.extractData(JdbcTemplate.java:1607)
at org.springframework.jdbc.core.JdbcTemplate$1.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_AbstractTransactionAspect$1$2a73e96cproceed(AbstractTransactionAspect.aj:66)
at org.springframework.transaction.aspectj.AbstractTransactionAspect$AbstractTransactionAspect$1.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_AbstractTransactionAspect$1$2a73e96c(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.access$301(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
这里是th e我们尝试的列表:
- 首先,我们已经咨询了SMTP提供商;然而,他们的答案是收件人被设置为“默认”,没有别的。我们还要求提供日志,但从那以后他们没有提供它们(它不是我们的SMTP,但它们甚至没有提供给所有者)。其次,当我试图用Spring配置JavaMail并使用我的开发机器而不是服务器在本地发送电子邮件时,我们的应用程序通常运行,它按预期工作。另外SMTP在使用ex时配置发送电子邮件没有问题。雷鸟。
- 当我们在服务器上使用我们的SMTP切换SMTP时,它可以正常工作。
结论是,问题必须在服务器配置中,服务器和SMTP或SMTP之间。然而我不知道什么可能会导致它。
而不是'messageHelper.setTo(address.getAddress());'try'messageHelper.setTo(address);'保存Spring再次进行翻译。也不是'setTo'不应该使用'addTo'?以防万一有多个地址?另外一个重复的循环似乎效率低下。你可以使用一个。 –
我试过messageHelper.setTo(address);和addTo但结果是一样的。它总是将默认设置为收件人。 – WakeCaine
然后在那里必须有一个地址触发该行为。 –