2015-12-29 192 views
0

所以我有以下代碼:從node.js的客戶發送電子郵件與服務帳戶

var Path = require('path'); 
var google = require('googleapis'); 
var gmail = google.gmail('v1'); 
var key = require(Path.join(__dirname, 'googleConfig.json')); 
var oAuthClient = new google.auth.JWT(
    key.client_email, 
    null, 
    key.private_key, 
    ['https://www.googleapis.com/auth/calendar.readonly', 'https://www.googleapis.com/auth/gmail.send'], 
    null 
); 

var message = new Buffer(
    "Content-Type: text/plain; charset=\"UTF-8\"\n" + 
    "MIME-Version: 1.0\n" + 
    "Content-Transfer-Encoding: 7bit\n" + 
    "To: <some email>\n" + 
    "From: <some email>\n" + 
    "Subject: something something lol\n\n" + 
    "heyheyhey" 
).toString('base64').replace(/\+/g, '-').replace(/\//g, '_'); 

gmail.users.messages.send({ 
    auth: oAuthClient, 
    userId: '<my own google email?>', 
    resource: { 
     raw: message 
    } 
}, function(err, resp) { 
    console.log('err', err); 
    console.log('resp', resp); 
}); 

我用的是相同的生成的密鑰,以我的谷歌日曆API,所以服務帳戶是否有效,加工。

我得到以下錯誤:

{ [Error: Bad Request] 
    code: 400, 
    errors: 
    [ { domain: 'global', 
     reason: 'failedPrecondition', 
     message: 'Bad Request' } ] } 

它是正確的假設,該用戶ID爲我自己的谷歌電子郵件帳戶? 我也嘗試使用key.client_emailclient_id代替,這是行不通的。

我真的很迷茫:)任何幫助,甚至只是提示如何調試它將是非常棒的。

順便說一句,我沒有激活console.developers

回答

0

隨着你不能使用自己的Gmail帳戶服務帳戶的Gmail的API。

使用服務帳戶,只有在該域中實現了domain wide delegation的情況下,纔可以模擬域中的用戶。

在該參數中,您可以使用值'me',該值爲經過身份驗證的用戶的電子郵件,在本例中爲服務帳戶電子郵件。

而不是發送'資源'嘗試發送'消息',就像在這個documentation的javascript例子。

如果你想從你自己的Gmail帳戶發送電子郵件,那麼你將不得不執行正常Oauth2

相關問題