2013-04-03 157 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記錄,但這並沒有幫助我們,谷歌在這方面非常嚴格。

相關問題