要約すると、javax.mail を使用して Google アプリ エンジン アプリケーションで HTML メールを送信しようとしています。メールに必要な構造は次のとおりです。
- 別
- 文章
- 関連している
- HTML
- 画像
ただし、この構造を使用してメールを作成して送信しようとすると、Google App Engine で失敗します。特に 1 つの問題は、構造がどうであれ、別のマルチパート内にマルチパートを埋め込んで、Google アプリ エンジンでそのメールを送信できなかったことです。
SMTPサーバーを使用して、Google App Engineアプリケーションの外部でこの構造を使用してメールを作成して送信しようとしましたが、正常に動作します. ただし、同じコードを実際のアプリケーションに移行してもうまくいきません。
Google アプリ エンジンでプレーン テキストまたは html のみのメールを送信できることに注意してください。ただし、これらすべての要素をまとめて完全なメールを作成しようとすると失敗します。
Message msg = new MimeMessage(session);
Multipart multiPart = new MimeMultipart("alternative");
Multipart relatedMp = new MimeMultipart("related");
BodyPart txtBdp = new MimeBodyPart();
txtBdp.setContent(msgBody, "text/plain");
multiPart.addBodyPart(txtBdp);
BodyPart htmlBdp = new MimeBodyPart();
htmlBdp.setContent(htmlBody, "text/html");
relatedMp.addBodyPart(htmlBdp);
DataSource dataSrc = new FileDataSource(new File(imageFileNm));
BodyPart imageBdp = new MimeBodyPart();
imageBdp.setDataHandler(new DataHandler(dataSrc));
imageBdp.setFileName("logo.png");
imageBdp.setHeader("Content-ID", "<image_logo>");
imageBdp.setDisposition(MimeBodyPart.INLINE);
relatedMp.addBodyPart(imageBdp);
BodyPart relatedBdp = new MimeBodyPart();
relatedBdp.setContent(relatedMp);
multiPart.addBodyPart(relatedBdp);
msg.setFrom(new InternetAddress(emailAddr));
msg.addRecipient(Message.RecipientType.TO, new InternetAddress(emailAddr, recipientNm));
msg.setSubject(subject);
msg.setContent(multiPart);
msg.saveChanges();
Transport.send(msg);
私が得ているエラーメッセージは次のとおりです。
添付ファイルには、コンテンツと名前が必要です。 google.appengine.api.mail.stdimpl.GMTransport.convertAttachments(GMTransport.java:321) com.google.appengine.api.mail.stdimpl.GMTransport.convertAttachments(GMTransport.java:295) com.google.appengine.api. mail.stdimpl.GMTransport.sendMessage(GMTransport.java:262) javax.mail.Transport.send(Transport.java:95) javax.mail.Transport.send(Transport.java:48)
送信元の電子メールに正しい名前形式を使用していて、Google App Engine の外部で動作することを考慮して、Google App Engine で実行するとこのコードが失敗する理由がわかりません。