2013-04-03 160 views
2

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

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

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

选项:

1)避免的JavaMail:通过HTTP电子邮件看起来像它会收取少量费用的工作。可以使用:亚马逊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)发送者验证 - (仅可用于测试的东西出来,而不是一个生产质量的溶液)应用程序引擎具有“邀请用户在该应用程序协作”为观看者。也许有用于添加协作者的API。

采摘 5)插座/ SMTP审判 - (仅认证的SMTP)在2012年九月谷歌发布http://googleappengine.blogspot.com.au/2012_09_01_archive.html

+0

1)否,AFAIK;也是http://stackoverflow.com/q/4000748/257568 2)最简单的路径,恕我直言3)只有如果有一个HTTP API,我没有看到一个4)听起来是错误的方式 – ArtemGr

+0

谢谢,做了更多的狩猎。 contextIO不发送电子邮件:( – eddyparkinson

+1

>的套接字API可让您使用SMTP(SMTP认证只)从这里:。https://groups.google.com/forum/?fromgroups=#!topic/google-appengine/YNEnaGQqqZE – eddyparkinson

回答

1

的好消息是,GAE SDK的到来1.7.7将有可能直接交谈,IMAP和SMTP,请参阅博客文章http://googleappengine.blogspot.be/2013/04/app-engine-177-released.html

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

+0

看起来很有希望。下一步,使用OAuth +的Gmail在App Engine上发送电子邮件:http://stackoverflow.com/questions/14107563/get-oauth-access-to-gmail – eddyparkinson

+0

更新:有“出站套接字”工作(即计费实现去除FeatureNotEnabledException )。但OAuth的+ SMTP + Gmail是不工作的,同样的错误如下:http://stackoverflow.com/questions/14064454/send-mail-via-smtp-gmail-oauth2-issue – eddyparkinson

+1

更新:要使用OAuth发送电子邮件,此代码工作:http://stackoverflow.com/questions/12503303/javamail-api-in-android-using-xoauth/12821612#12821612 – eddyparkinson

1

我还没有生产试过,但我已经设置了GAE开发服务器绕过谷歌的邮件系统并直接与SMTP服务器通话。请参阅我的answer on another question。如果你可以在生产中做到这一点,你只需要一个SMTP服务器来发送你的邮件。

1

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

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

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

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

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

+0

我所看到的文档表明,它可以通过使用SMTP发送Gmail的OAuth:HTTPS ://developers.google.com/google-apps/gmail/xoauth2_protocol#oauth_20_scopes“发件人”电子邮件地址与oauth令牌相同的帐户。我错过了什么? – eddyparkinson

+0

我不知道那个 - 很好找。那么在OAuth + Gmail的情况下,这似乎是可能的。只需要使用您的链接提供的数据和测试它OAuth的游乐场:https://developers.google.com/oauthplayground/ –

+0

嗯,看来,新的GAE出站套接字功能不允许连接到谷歌的IP范围,包括Gmail的SMTP服务器:https://developers.google.com/appengine/docs/java/sockets/overview –

1

我们结束了使用外部亚马逊SES服务的电子邮件为谷歌限制我们 - 在“从:”字段中仅允许应用程序管理员的电子邮件地址。我们试图切换DKIM或SPF记录,但这并没有帮助我们,谷歌在这方面非常严格。

相关问题