【问题标题】:How to send emails from machine account using Gmail API / OAuth2如何使用 Gmail API / OAuth2 从机器帐户发送电子邮件
【发布时间】:2020-06-16 06:13:00
【问题描述】:

我有一个 Web 应用程序,该应用程序当前从 gsuite 域中的“无回复”样式电子邮件地址发送自动密码重置电子邮件。它目前仅通过 SMTP(使用 TLS)使用用户名和密码,但是,要使其正常工作,GSuite 管理员(不是我)必须启用 LSA。

我相信大多数人都知道,Google 将在明年逐步淘汰该功能,因此今后我将不得不将 OAuth2 与 Gmail API 结合使用(我认为)。我对此很陌生,所以请原谅我的无知,但是虽然我已经成功地弄清楚了如何代表用户发送电子邮件(用户需要授权这样做),但我还没有弄清楚如何代表自动帐户发送电子邮件,每次都不会有人授予该授权。

根据我的阅读,这听起来需要设置为具有 GSuite 管理员授予的“域范围委派”的服务帐户。但是,如果我的理解是正确的,这将授予该服务帐户访问权限,以代表该域中的所有用户发送电子邮件,而不仅仅是我想使用的单个电子邮件帐户。那是对的吗?有没有办法限制对个人帐户的访问? (我怀疑管理员会对此感到紧张)。还是我完全在错误的页面上,如何在此处继续?

不确定它是否真的重要,但我目前的解决方案是用 PHP 实现的。

任何建议将不胜感激,

谢谢

【问题讨论】:

    标签: php gmail-api google-oauth google-workspace


    【解决方案1】:

    我会给你一些好消息和其他不太好的消息。

    1) 好消息

    好消息是,您对service accounts 所做的所有研究都在正确的页面上,是的,您必须设置domain wide delegation,因为服务帐户是一个机器人,需要在为了以他/她的行为发送电子邮件。

    2) 坏消息

    坏消息是目前您无法使用域范围委派限制您希望在域中模拟的用户。您必须在后端应用自己的逻辑,这将在服务帐户模拟该用户之前执行某种安全过程。希望谷歌以后能加入限制域内特定用户的功能。

    附加信息

    以防万一,您仍然不知道如何使用 PHP 模拟具有服务帐户的用户。这是一个小例子:

    // Path to the service account json file
    putenv('GOOGLE_APPLICATION_CREDENTIALS=/path/to/service_account.json');
    
    // User to impersonate
    $user = "email@domain";
    
    $client = new Google_Client();
    $client->useApplicationDefaultCredentials(); 
    $client->setApplicationName("My app name");
    $client->setScopes(Google_Service_Gmail::MAIL_GOOGLE_COM);  
    $client->setSubject($user); // Set the user to impersonate;
    
    // Construct the service object.
    $service = new Google_Service_Gmail($client);
    

    【讨论】:

      猜你喜欢
      • 2017-08-05
      • 1970-01-01
      • 2012-03-30
      • 2016-04-20
      • 2013-03-24
      • 2011-03-08
      • 2020-09-30
      • 1970-01-01
      • 2019-06-21
      相关资源
      最近更新 更多