Google GMail API服务帐户,用于列出来自多个帐户的电子邮件

时间:2017-01-16 15:13:17

标签: gmail-api

我正在开发一个CRM应用程序,其中所有员工用户都拥有一个位于同一域下的GMail帐户。我是这个域名的管理员。 以前,我使用IMAP为我的CRM中的所有GMail用户使用自定义访问权限,以获取他们发送和接收的所有电子邮件。为此,我问他们的GMail密码是在我的数据库中没有任何加密存储的(我知道这很糟糕)。 现在,我想用Google GMail API做同样的工作,我有一些问题:

- 我可以达到我想要的效果(列出GMail为每位员工发送的所有电子邮件,并使用GMail API和给定的GMail帐户通过GMail发送电子邮件)?

- 我不确定,但我已经看到可以使用“服务帐户”和域范围授权。如果这是真的,即使使用“服务帐户”,我是否需要浏览OAuth 2.0?也许有人可以指导我一个教程或向我展示工作流程来实现我想要的东西吗?最好的可能是PHP。 提前感谢您的阅读!

1 个答案:

答案 0 :(得分:1)

已解决!

对于那些寻找这类问题的人,我正在回答自己。

是的,我们可以列出属于同一个域的帐户中的所有电子邮件。 为此,我们必须使用谷歌管理员帐户创建一个具有广泛权限授权的服务帐户。它为您提供了一个Json文件(*)来下载。你把它放在你的服务器上。

与OAuth2.0无关。

然后使用这段简单的代码,您可以从您想要的帐户(在您的域中)获取消息:

<?php
require_once __DIR__.'/vendor/autoload.php'; // <-- path for the google-api lib autoload
// simple function to get e-mails' headers
function getHeader($headers, $name) {
    foreach($headers as $header) {
        if($header['name'] == $name) {
            return $header['value'];
        }
    }
}

$user   = "myUser@myDomain.com";

putenv('GOOGLE_APPLICATION_CREDENTIALS='path/to/your/credentials.json'); // (*)
$client = new Google_Client();
$client->useApplicationDefaultCredentials();
$client->setScopes(['https://mail.google.com']);
$client->setSubject($user);

$service = new Google_Service_Gmail($client);

$results = $service-> users_messages->listUsersMessages($user);
foreach($results as $mail){
   $message = $service->users_messages->get($user, $mail['id']);
    $headers = $message->getPayload()->getHeaders();
    $subject = getHeader($headers, 'Subject');
    echo $subject."\n";
}
?>