java - 应用引擎电子邮件。它说它发送但我没有收到它
问题描述
我正在为我的网站制作通知功能。我使用应用引擎邮件,虽然它记录说电子邮件已发送,如下所示,但我从未收到它。日志:
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();
}
}
解决方案
适用于 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;
}
}
}
还要经常检查您的垃圾邮件收件箱。
推荐阅读
- java - 仅当类型转发时,如何在 Java 中获取记录集的大小?
- .net - Dot Net Core MVC:如何从视图中进行查询?
- javascript - 是否可以从 JSON 响应中生成 simple_form 字段?
- javascript - 如何在 Grommet 2 React 组件中设置子节点的样式
- blockchain - 解释区块链,好像我真的很笨一样
- c++ - Make signed int value from unsigned int value and back
- php - PHP Guzzle 如何获取请求对象
- python - 查询之间的 Flask SQLAlchemy 返回空列表
- python - django 1.10.5;Postgis db 作为默认后端时出错
- php - Altorouter 表单重定向