Tíquete #32920

SendMailImpl.javaのsend(MimeMessage message)の利用

: 2014-01-16 12:00 Última Atualização: 2014-01-24 13:24

Relator:
Dono:
Tipo:
Estado:
Fechado
Componente:
(Nenhum)
Marcos:
(Nenhum)
Prioridade:
5 - Medium
Gravidade:
5 - Medium
Resolução:
Fixed
Arquivo:
Nenhum

Details

SendMailImpl.javaのsend(MimeMessage message)を利用すると以下の478行目で、 NullPointerExceptionが発生します。

477 public boolean hasEnvelopeTo() {
478    return envelopeTo.length > 0;
479 }

やりたいこととしては、メールの文字コードをUTF-8で送信したいと考えている のですが、7bitのメールサーバにも対応できるように、メールのbodyをbase64 して送信したいいため、MimeMessageでの送信を利用できるかと思い、 試しているのですが、上記でエラーになってしまいます。 他にUTF-8をbase64で送信できる方法などもあったら、教えていただけると助かります。

Mail mail = new Mail();
mail.setFrom("from-mail-address");
mail.addTo("to-mail-address");
mail.setSubject("subject");
mail.setText( new String(Base64.encodeBase64("メッセージ".getBytes("UTF-8"))) );
    		
Session session = Session.getInstance(new Properties());
MimeMessage message = new MimeMessage(session);
MimeMessageBuilder builder = new MimeMessageBuilder(message, "UTF-8");
try {
 builder.buildMimeMessage(mail);
} catch (UnsupportedEncodingException e) {
 throw new MailBuildException("サポートされていない文字コードが指定されました。", e);
} catch (MessagingException e) {
 throw new MailBuildException("MimeMessageの生成に失敗しました。", e);
}
            
 message.addHeader("Content-Transfer-Encoding", "base64");
    		   		
 sendMail.send(message);

Ticket History (3/10 Histories)

2014-01-16 12:00 Updated by: endoooh
  • New Ticket "SendMailImpl.javaのsend(MimeMessage message)の利用" created
2014-01-16 14:27 Updated by: None
Comentário

動作確認してないんですけど、MimeMessage を送信する場合は下記のようなコードになると思います(例外処理も必要です)。

Session session = Session.getInstance(new Properties());
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress("from-mail-address"));
message.setSender(new InternetAddress("to-mail-address"));
message.setSubject("subject");
message.setText("メッセージ", "utf-8");
message.setHeader("Content-Transfer-Encoding", "base64");
sendMail.send(message);
試してみてダメだったらコメントください。

2014-01-16 15:10 Updated by: xox
Comentário

受取人指定の行だけ訂正です。

message.addRecipient(RecipientType.TO, new InternetAddress("to-mail-address"));

2014-01-22 15:01 Updated by: endoooh
Comentário

回答ありがとうございました。確認が遅れてしまい、申し訳ないです。

いただいたサンプルのようにMimeMessageの送信を修正しましたが、やはりNullPointerExceptionになってしまいます。 StackTraceの抜粋も添付させていただきます。 ※ すみません、バージョンを書き忘れていました。バージョンは、1.2.3です。

java.lang.NullPointerException
	at com.ozacc.mail.impl.SendMailImpl$MimeMessageWrapper.hasEnvelopeTo(SendMailImpl.java:478)
	at com.ozacc.mail.impl.SendMailImpl.processSend(SendMailImpl.java:181)
	at com.ozacc.mail.impl.SendMailImpl.send(SendMailImpl.java:151)
	at com.ozacc.mail.impl.SendMailImpl.send(SendMailImpl.java:140)

よろしくお願いします。

2014-01-22 15:14 Updated by: xox
Comentário

そこで NullPointerException が発生するのは send() の引数として渡している MimeMessage に受取人が設定されていない場合だけだと思うんですけどね・・。 後から追加したコメントのように message.addRecipient() は呼び出していますか?(コメントの編集ができないのは不便ですね・・)

2014-01-22 18:42 Updated by: endoooh
Comentário

はい、コメントいただいたように、message.addRecipient()を呼び出しています。

もしかすると、send(MimeMessage message)の場合、MimeMessageWrapperでラッピング(下記)されていると思うのですが、 returnPathのみで、envelopeToが渡されていないことが原因だったりしませんでしょうか。

146 public void send(MimeMessage[] messages) throws MailException {
147 MimeMessageWrapper[] mmws = new MimeMessageWrapper[messages.length];
148 for (int i = 0; i < messages.length; i++) {
149	mmws[i] = new MimeMessageWrapper(messages[i], returnPath);
150 }
151 processSend(mmws);
152 }
2014-01-22 19:41 Updated by: xox
Comentário

すみません、ちょっと勘違いをしていたかも知れません。 とりあえず null チェックを追加したスナップショットを公開しましたので、そちらで動作確認をお願いしてもよろしいでしょうか。

Maven をお使いでしたら下記ページの「スナップショット版」を参照してください。 https://sourceforge.jp/projects/spring-ext/wiki/MavenRepository

JAR は下記のディレクトリにあります(現時点での最新は ozacc-mail-1.2.4-20140122.103559-1.jar です)。 https://oss.sonatype.org/content/repositories/snapshots/jp/sourceforge/spring-ext/ozacc-mail/1.2.4-SNAPSHOT/

よろしくお願いします!

2014-01-23 10:57 Updated by: endoooh
Comentário

スナップショットへの公開ありがとうございました! Mavenにて、「1.2.4-SNAPSHOT」をダウンロードして、動作確認したところ、 無事、MimeMessageを送信することができました。

ありがとうございました。

2014-01-23 20:00 Updated by: xox
  • Tipo Update from Support Request to Bugs
  • Resolução Update from Nenhum to Fixed
  • Estado Update from Aberto to Fechado
  • Ticket Close date is changed to 2014-01-23 20:00
Comentário

確認ありがとうございました!

先ほど 1.2.4 をリリースしました。2時間くらいで Maven Central の方にも反映されるはずです。

2014-01-24 13:24 Updated by: endoooh
Comentário

1.2.4のリリースありがとうございます。 早速、Mavenに登録して、MimeMessageの送信をすることができました。

早急に対応いただきまして、ありがとうございました!

Attachment File List

No attachments

Editar

You are not logged in. I you are not logged in, your comment will be treated as an anonymous post. » Login