首页 > 解决方案 > 应用引擎电子邮件。它说它发送但我没有收到它

问题描述

我正在为我的网站制作通知功能。我使用应用引擎邮件,虽然它记录说电子邮件已发送,如下所示,但我从未收到它。日志:

INFO: MailService.send
abr 25, 2020 6:26:44 PM com.google.appengine.api.mail.dev.LocalMailService log
INFO:   From: noreply@myapp.appspotmail.com
abr 25, 2020 6:26:44 PM com.google.appengine.api.mail.dev.LocalMailService log
INFO:   To: emailTest@gmail.com
abr 25, 2020 6:26:44 PM com.google.appengine.api.mail.dev.LocalMailService log
INFO:   Reply-to: noreply@myapp.appspotmail.com
abr 25, 2020 6:26:44 PM com.google.appengine.api.mail.dev.LocalMailService log
INFO:   Subject: 
abr 25, 2020 6:26:44 PM com.google.appengine.api.mail.dev.LocalMailService log
INFO:   Body:
abr 25, 2020 6:26:44 PM com.google.appengine.api.mail.dev.LocalMailService log
INFO:     Content-type: text/html
abr 25, 2020 6:26:44 PM com.google.appengine.api.mail.dev.LocalMailService log
INFO:     Data length: 2795

这是我发送电子邮件的Java代码。我正在使用来自云存储的 html 文件,即正在加载。当我 log.info(data) 它确实打印出所有文件。

public void confirmationEmail(String name, String email, String lang) {
        Session session = Session.getDefaultInstance(new Properties(), null);
        try {
            Message msg = new MimeMessage(session);
            msg.setFrom(new InternetAddress(email("noreply")));
            msg.addRecipient(TO, new InternetAddress(email));
            msg.setSubject(lang.equalsIgnoreCase(Constants.Languages.EN) ? CONFIRMATION_EN : CONFIRMATION_PT);
            String data = new String(CloudStorage.getPrivate(String.format("confirmation-%s.html", lang), CloudStorageFolder.SYSTEM), StandardCharsets.UTF_8);
            data.replace("$name", name);
            Multipart multi = new MimeMultipart();
            MimeBodyPart html = new MimeBodyPart();
            html.setContent(data, "text/html");
            multi.addBodyPart(html);
            msg.setContent(multi);
            log.info(data);
            Transport.send(msg);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

标签: javaspring-bootemailgoogle-app-engine

解决方案


适用于 Java 的 App Engine 邮件 API已弃用。您应该尝试使用第三方 API,例如SendGrid

下面是一个关于如何使用 SendGrid 和 Java 发送邮件的示例:

import com.sendgrid.*;
import java.io.IOException;

public class Example {
  public static void main(String[] args) throws IOException {
    Email from = new Email("test@example.com");
    String subject = "Sending with SendGrid is Fun";
    Email to = new Email("test@example.com");
    Content content = new Content("text/plain", "and easy to do anywhere, even with Java");
    Mail mail = new Mail(from, subject, to, content);

    SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY"));
    Request request = new Request();
    try {
      request.setMethod(Method.POST);
      request.setEndpoint("mail/send");
      request.setBody(mail.build());
      Response response = sg.api(request);
      System.out.println(response.getStatusCode());
      System.out.println(response.getBody());
      System.out.println(response.getHeaders());
    } catch (IOException ex) {
      throw ex;
    }
  }
}

还要经常检查您的垃圾邮件收件箱。


推荐阅读