2017-01-16 68 views
2

我正在開發一個CRM應用程序,其中所有員工用戶都有一個在同一個域下的GMail帳戶。我是該域的管理員。 之前,我使用IMAP爲我的CRM中的所有GMail用戶定製訪問權限,以便獲取他們發送和接收的所有電子郵件。爲此,我要求他們的GMail密碼在我的數據庫中沒有任何加密存儲(我知道這很糟糕)。 現在,我想做同樣的工作,但與谷歌GMail API,我有一些問題:Google GMail API服務帳戶列出來自多個帳戶的電子郵件

可以實現我想要的(列出GMail的所有電子郵件爲每個工作人員用戶,併發送使用GMail API和GMail帳戶通過GMail發送電子郵件)?

- 我不確定,但我已經看到可以使用「服務帳戶」和全域範圍授權。如果確實如此,即使使用「服務帳戶」,是否也需要通過OAuth 2.0?也許任何人都可以在教程中指導我,或者讓我看看工作流程以實現我想要的內容?最好的可以在PHP中。 在此先感謝您的閱讀!

+0

您可能要檢查[使用OAuth 2.0服務器到服務器的應用程序(HTTPS: //developers.google.com/api-client-library/php/auth/service-accounts)以瞭解更多信息,指導,甚至您需要的樣本,瞭解應用程序如何使用服務器到服務器的OAuth 2.0流程適用於PHP的Google API客戶端庫。 但請注意,儘管您可以在從Google Apps域運行的應用程序中使用服務帳戶,但服務帳戶不是您的Google Apps帳戶的成員,也不受Google Apps管理員設置的網域政策的約束。 – Teyam

回答

1

已解決!

我正在回答自己,尋找這種問題的人。

是的,我們可以列出來自屬於同一個域的賬戶的所有電子郵件。 爲此,我們必須使用google管理員帳戶創建一個擁有廣泛權限授權的服務帳戶。它給你一個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 = "[email protected]"; 

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"; 
} 
?> 
相關問題