【问题标题】:GAE send email from gmail accountGAE 从 gmail 帐户发送电子邮件
【发布时间】:2013-03-24 13:59:14
【问题描述】:

如何使用 Google-App-Engine 从 Gmail 帐户发送电子邮件?发件人地址是问题所在,这是可以理解的,因为垃圾邮件的限制。 (限制在这里:https://developers.google.com/appengine/docs/java/mail/usingjavamail#Senders_and_Recipients

目标:我希望用户来到网站,注册使用该服务(通过 OAuth)。并且该服务将能够发送将“发件人地址”设置为用户电子邮件地址的电子邮件。 (服务:发送电子邮件的电子表格公式)

相关问题: Accessing Gmail account from Google App Engine

选项:

1) 避免使用 JavaMail:通过 HTTP 发送电子邮件看起来需要支付少量费用。可以使用:Amazon SES aws.amazon.com/ses/

不可能 2) contextIO - some people 已建议 contextIO。更新: 不发邮件,见http://context.io/docs/2.0

3) OAuth - 看起来您可以使用 OpenID 并以当前登录用户的身份发送电子邮件。因此,也许可以使用 OAuth 进行离线发送。 (用户 API https://developers.google.com/appengine/docs/java/users/)

4) 发件人验证 - (仅可用于测试,而不是生产质量解决方案)App Engine 具有“邀请用户在此应用程序上进行协作”作为查看器。也许有一个用于添加协作者的 API。

挑选 5) Sockets/SMTP 试用 - (仅经过身份验证的 SMTP)谷歌于 2012 年 9 月发布 http://googleappengine.blogspot.com.au/2012_09_01_archive.html

【问题讨论】:

  • 1) 不,AFAIK;还有stackoverflow.com/q/4000748/257568 2) 最简单的路径,恕我直言 3) 仅当有 HTTP api 而我没有看到 4) 听起来是错误的方式
  • 谢谢,做了更多的狩猎。 contextIO 不发送电子邮件 :(
  • >Sockets API 允许您使用 SMTP(仅限经过身份验证的 SMTP)。从这里:groups.google.com/forum/?fromgroups=#!topic/google-appengine/…
  • Mail API 又出了什么问题?为什么不能简单地将帐户添加为管理控制台中的开发人员,并使用 Mail API?
  • @Ezra 感谢您的提问,开发者帐户短期内是可以的,但长期而言我需要一个更好的解决方案。 2 个原因:安全性和注册过程。安全是一个问题,因为他们可以看到日志,所以我需要在生产中禁用日志。注册过程适用于应用程序开发人员,而不是电子表格服务。

标签: java google-app-engine email


【解决方案1】:

好消息是,随着 GAE SDK 1.7.7 的到来,可以直接与 IMAP 和 SMTP 通信,请参阅博文http://googleappengine.blogspot.be/2013/04/app-engine-177-released.html

关键的新功能(预览版)是“出站套接字”

【讨论】:

【解决方案2】:

我还没有在生产环境中尝试过这个,但是我已经设置了 GAE 开发服务器来绕过谷歌的邮件系统并直接与 SMTP 服务器通信。见我的answer on another question。如果您可以在生产环境中执行此操作,那么您只需要一个 SMTP 服务器来发送您的电子邮件。

【讨论】:

    【解决方案3】:

    简而言之 - 您将无法通过 OAuth 执行此操作。主要原因是通常不可能(可靠地、连续地)代表随机用户(即不在您控制的域中的用户)发送大量邮件。

    1. 如果您使用 OAuth,则需要在 OAuth 过程中请求访问用户个人资料/电子邮件。这因提供商而异。一些提供商从不提供电子邮件 (Twitter)。请参阅pac4j 库,该库提供统一的 API 以从不同的提供商检索用户的 OAuth 配置文件。

    2. 当(如果)您从 OAuth 获得电子邮件地址时,您将需要代表该用户发送电子邮件。由于您的 SMTP 服务器无权代表随机用户发送电子邮件(请参阅 SPFDKIM),您将很快进入垃圾邮件列表并被阻止。如果这很容易,那么垃圾邮件发送者就会过上轻松的生活。

    3. 您可以从 AppEngine 代表用户发送电子邮件,但前提是用户通过 Users Java API 登录,这仅适用于 Gmail 或 Google Apps 帐户。

    4. 在 GAE 上,您可以通过新的 Outbound Sockets API 轻松使用外部 SMPT 服务器(这只是在 sdk 1.7.7 中从受信任的测试功能变为实验功能)。我们有这个设置,它使用大型外部 SMTP 服务没有问题。但是,考虑到上面的第 2 点,这对您想要实现的目标没有多大帮助。

    【讨论】:

    • 我看到的文档建议可以使用 oauth 通过 SMTP 发送 gmail:developers.google.com/google-apps/gmail/… 其中“发件人”电子邮件地址与 oauth 令牌的帐户相同。我错过了什么?
    • 我不知道那个 - 很好的发现。好吧,在 OAuth+Gmail 的情况下,它似乎是可能的。只需使用链接中提供的数据并在 OAuth 操场上进行测试:developers.google.com/oauthplayground
    • 嗯,新的 GAE Outbound Sockets 功能似乎不允许连接到 Google IP 范围,包括 Gmail 的 SMTP 服务器:developers.google.com/appengine/docs/java/sockets/overview
    • 彼得,感谢您的链接。嗯,它说:除了那些白名单:Gmail SMTPS:smtp.gmail.com 端口 465 和 587
    • 嗯,你是对的。该死的我的速读。看来您已经拥有了所有可用的部分,并且可以按照您的计划进行。
    【解决方案4】:

    由于 Google 对我们的限制,我们最终使用外部 Amazon SES 服务处理电子邮件 - 在“发件人:”字段中只允许应用管理员电子邮件地址。我们尝试切换 DKIM 或 SPF 记录,但这对我们没有帮助,谷歌在这方面非常严格。

    【讨论】:

      猜你喜欢
      • 2011-12-15
      • 2012-03-30
      • 2013-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-16
      相关资源
      最近更新 更多