当前位置: 首页 > 知识库问答 >
问题:

如何使用Gmail API/OAuth2从机器帐户发送电子邮件

龚志文
2023-03-14

我有一个web应用程序,目前可以从gsuite域中的“无回复”式电子邮件地址发送自动密码重置电子邮件。目前,它只需通过SMTP(使用TLS)使用用户名和密码即可工作,然而,为了实现这一点,GSuite管理员(不是我)必须启用LSA。

我相信大多数人都知道,谷歌将在明年逐步淘汰它,所以展望未来,我将不得不使用OAuth2和Gmail应用编程接口(我想)。我对这一点还很陌生,所以原谅我的无知,但是虽然我已经成功地想出了如何代表用户发送电子邮件(用户需要授予授权才能这样做),但我还没有想出如何代表一个自动化账户发送电子邮件,因为在这个账户里不会有人每次都授予授权。

根据我的阅读,这听起来像是需要通过GSuite管理员授予的“域范围授权”将其设置为服务帐户。然而,如果我的理解是正确的,这将允许该服务帐户代表该域中的所有用户发送电子邮件,而不仅仅是我想使用的单个电子邮件帐户。对吗?有没有办法限制对个人账户的访问?(我怀疑管理员会为此感到紧张)。还是我完全错了该怎么做?

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

任何建议都将不胜感激,

谢谢

共有1个答案

凤凡
2023-03-14

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

好消息是,关于你对服务帐户所做的所有研究,你都在正确的页面上,是的,你必须设置域范围的授权,因为服务帐户是一个机器人,它需要模拟真实的人,以便以他/她的方式发送电子邮件。

坏消息是,目前你不能使用域范围的委托来限制你想在你的域中模拟的用户。您必须在后端应用自己的逻辑,这将在服务帐户模拟该用户之前执行某种安全过程。让我们希望谷歌在未来能够增加限制某个领域特定用户的功能。

以防万一,您仍然不知道如何使用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);
 类似资料:
  • 我知道这里已经有很多关于向hotmail发送电子邮件的问题了。我已经通读了它们,以及过去几周的许多在线帖子,但仍然无法解决这个问题。 我遇到的问题是,我无法向拥有hotmail电子邮件地址的客户发送电子邮件。我可以向雅虎发送电子邮件,也可以向gmail发送电子邮件(尽管这些邮件似乎进入了垃圾文件夹),但是当我向hotmail电子邮件地址发送电子邮件时,它们似乎永远不会到达。 我在PHP Symfo

  • 我正在尝试从应用程序发送电子邮件。 问题是Gmail不允许我进行身份验证,因为位置不寻常——当然,每个应用程序都安装在其他位置。 我的代码(使用Javax): 该代码在我的测试设备上运行良好,但在其他使用我的应用程序的设备上崩溃。 我得到的错误:javax.mail.身份验证失败异常:534-5.7.14请通过534-5.7.14您的网络浏览器登录,然后重试。534-5.7.14在534 5.7.

  • 有没有人知道在没有登录用户的情况下运行的应用程序如何请求使用Graph API发送电子邮件的权限?

  • 我使用pgsql设置触发器,当更新表dataset(将状态更改为Finished)时,它将使用dataset电子邮件值自动向电子邮件帐户发送电子邮件,并将此电子邮件保存在服务器中 但是我不知道如何在触发函数中写发送邮件,以及在服务器中发送邮件。先谢谢你了 Pg版本是9.1,CentOS 5.8

  • 使用NodeEmailer,如何使用别名gmail帐户发送电子邮件?还是组google suite服务器帐户? 比如说: 我的真实帐户: 我将使用nodemailer通过我的别名帐户或组帐户发送消息。 我的别名帐户:< code > myaliascount @ domain . com 我的群帐户:< code > my group account @ domain . com 这可能吗?

  • 问题内容: 我希望我的网站能够发送电子邮件而不刷新页面。所以我想使用Javascript。 这是我要调用的函数的方式,但是我不确定要在javascript函数中放入什么。通过研究,我发现了一个使用mailto方法的示例,但是我的理解是实际上并没有直接从站点发送邮件。 所以我的问题是,我在哪里可以找到要放在JavaScript函数中的内容,以便直接从网站发送电子邮件。 问题答案: 您不能直接使用ja