Отправка электронной почты в формате HTML с использованием javax.mail не выполняется в Google App Engine - PullRequest
1 голос
/ 05 июля 2019

В общем, я пытаюсь отправлять электронные письма в формате HTML в приложении Google App Engine, используя javax.mail.Структура, которую я хочу для электронной почты:

  • Альтернатива
    • Текст
    • Связанные
      • HTML
      • Изображение

Однако, когда я пытаюсь создать и отправить электронное письмо, используя эту структуру, это не работает на движке приложений Google.Одна проблема, в частности, заключалась в том, что независимо от структуры я не смог встроить составную часть в другую составную часть и отправить это электронное письмо на Google App Engine.

Я пытался создавать и отправлять электронные письма, используя эту структуру за пределамиприложения Google App Engine с использованием SMTP-сервера, и он работает нормально.Однако перенос этого же кода в мое реальное приложение не работает.

Я должен отметить, что я могу отправлять на движок приложений 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);

Я получаю сообщение об ошибке:

Для вложения требуется контент и имя com.google.appengine.api.mail.MailService $ Attachment. (MailService.java:56) com.google.appengine.api.mail.stdimpl.GMTransport.convertAttachments (GMTransport.java:334) com.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, учитывая, что я использую правильный формат имени для электронного письма, из которого нужно отправитьэто, и что этоработает за пределами Google App Engine.

...