2016-05-17 36 views
1

これは私の最初の質問です。 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); 
    } 

Iその特別な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 

ここにあります私たちが試したもののリスト:

  1. まず、私たちはSMTPプロバイダと相談しました。しかし、彼らの答えは、受取人が「デフォルト」と設定されていることです。我々はまたログを要求しましたが、それ以来彼らはそれらを提供しませんでした(それは私たちのSMTPではありませんが、それでも彼らはオーナーにさえも提供しませんでした)。
  2. 第2に、JavaMailをSpringで設定しようとしたときに私のアプリケーションが通常動作するサーバーではなく、自分の開発マシンを使用して電子メールをローカルに送信しようとしたとき、意図どおりに動作しました。また、SMTPはexに設定されているときに電子メールを送信することに問題はありません。サンダーバード。
  3. SMTPをサーバー上のSMTPで交換したときに動作します。

結論として、問題はサーバー構成、サーバーとSMTPまたはSMTPのいずれかでなければなりません。しかし、私は実際に何が起こるか分からない。

+0

'messageHelper.setTo(address.getAddress());の代わりに' try 'messageHelper.setTo(address);'は、翻訳をやり直すためにSpringを保存します。また 'setTo'の代わりに' addTo'を使ってはいけませんか?複数のアドレスがある場合に備えて?また、forループを重複させると効率が悪いようです。あなたは単一のものを使うことができます。 –

+0

私はmessageHelper.setTo(アドレス)を試しました。 addToは同じですが結果は同じです。常に受信者としてデフォルトを設定します。 – WakeCaine

+0

次に、その動作をトリガするアドレスが存在している必要があります。 –

答えて

0

私が見つけた何が問題を引き起こしたかは電子メールを送信しています。しかし、なぜ私はそれが起こるのか分からない。

メッセージを送信し、我々はMessageHelperにBCCまたはCCアドレスを追加し、受信者のための「デフォルト」を取得することはできません。私はそれを行う別の手段を試したaddBcc、setBcc、addCc、setCcしかし、それらのすべてが同じ結果を生成します。非常に奇妙で、私は本当に説明を見つけることができません。

UPDATE:

私たちは、実際の犯人を発見しました。 bccで使用されているアドレスはのデフォルト値はですが、当然のことながらログに記録されていません(間違いなど)。しかし、最も興味深いのは、bccは、のデフォルト値を、別の正しいアドレスに設定した後でも、@Autowiredのために取得したということです。面白いことに、私たちは有線で結ぶことができる値を宣言していないにもかかわらず、Springは例外をスローしませんでした。

関連する問題