我想从我的GAE项目发送邮件。我已经按照文档示例...
了protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Properties props = new Properties();
Session session = Session.getDefaultInstance(props, null);
try {
Message msg = new MimeMessage(session);
msg.setFrom(new InternetAddress("xxx@xxxx.appspotmail.com", "Example.com Admin"));
msg.addRecipient(Message.RecipientType.TO,
new InternetAddress("xxxxx@gmail.com", "Mr. User"));
msg.setSubject("Your Example.com account has been activated");
msg.setText("This is a test");
Transport.send(msg);
} catch (AddressException e) {
e.printStackTrace();
} catch (MessagingException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
部署后,我收到此异常消息
javax.mail.MessagingException:无法连接到SMTP主机:localhost,port:25;
但是文档说:
创建JavaMail会话时,如果您不提供任何SMTP服务器配置,App Engine将使用Mail服务发送消息
但似乎尝试连接到SMTP服务器......显然,localhost上没有SMTP服务器......
我从未使用过此服务...我的配额已全部可用。
请帮帮我!
答案 0 :(得分:0)
今天遇到了同样的问题。只是让它工作。 app engine sdk已经包含了发送电子邮件所需的课程:
它和相关的类是调用邮件服务的方式。用这些替换你的消息类,删除对javax.mail的所有引用。另外一件事,如果你引用这个(就像我一样):
https://cloud.google.com/appengine/docs/standard/java/mail/sending-mail-with-mail-api
我无法让它工作,看起来不会没有smtp主机至少。谷歌很高兴为其示例代码库中的非工作示例提供无意义的文档
另外,如果您按照“谁可以发送邮件”链接,它会告诉您任何形式的任何地址@ [APP_NAME] .appspotmail.com或任何@ [APP_ALIAS] .appspotmail.com都应该有效。使用我的应用程序名称导致“未经授权的发件人”,但使用仪表板中的应用程序ID工作。什么本来应该是一个十分钟的解决方案变成了几个小时的苦差事,但我有一个工作的电子邮件。谢谢,谷歌。
答案 1 :(得分:0)
Mail service API支持App Engine SDK附带的JavaMail(javax.mail)接口。使用任何其他罐子可能会产生问题。您可以按照Java 7和Java 8中的代码示例进行操作,演示如何发送邮件。
我应该注意,由于垃圾邮件问题,不允许端口25,465和587上的出站连接,因此邮件的发件人地址必须是this link中选项之一。
您可以通过信息中心获取application ID/name(与项目ID /名称相同)。
请注意,Issue Tracker保留用于报告错误和功能请求。如果您遇到与APP_NAME或APP_ALIAS相关的任何问题,建议您在此处报告问题,以便我们能够深入研究问题。