2015-01-13 47 views
2

我試圖使用一個服務帳戶和智威湯遜認證發送一封電子郵件,並不斷得到和錯誤有非常無益的消息:{ code: 500, message: null }失敗發送郵件與googleapis'服務帳戶和JWT的NodeJS權威性

該代碼段是從以下StackOverflow鏈接:Failed sending mail through google api in nodejs

似乎有解決方案是將參數中的密鑰更改爲resource而不是message但它不適用於我。這很奇怪,因爲在文檔(https://developers.google.com/gmail/api/v1/reference/users/messages/send)的JS例如,它聲稱關鍵還是message

我與

var jwtClient = new google.auth.JWT(config.SERVICE_EMAIL, config.SERVICE_KEY_PATH, null, config.ALLOWED_SCOPES); 

驗證然後用

jwtClient.authorize(function(err, res) { 
    if (err) return console.log('err', err); 

    var email_lines = []; 

    email_lines.push("From: \"Some Name Here\" <[email protected]>"); 
    email_lines.push("To: [email protected]"); 
    email_lines.push('Content-type: text/html;charset=iso-8859-1'); 
    email_lines.push('MIME-Version: 1.0'); 
    email_lines.push("Subject: New future subject here"); 
    email_lines.push(""); 
    email_lines.push("And the body text goes here"); 
    email_lines.push("<b>And the bold text goes here</b>"); 

    var email = email_lines.join("\r\n").trim(); 

    var base64EncodedEmailSafe = new Buffer(email).toString('base64').replace(/\+/g, '-').replace(/\//g, '_'); 

    var params = { 
    auth: jwtClient, 
    userId: "[email protected]", 
    resource: { 
     raw: base64EncodedEmailSafe 
    } 
    }; 

    gmail.users.messages.send(params, function(err, res) { 
    if (err) console.log('error sending mail', err); 
    else console.log('great success', res); 
    }); 
} 

發送電子郵件圖書館的評論似乎認爲資源是正確的財產(https://github.com/google/google-api-nodejs-client/blob/master/apis/gmail/v1.js

The comments in the library seem to say that resource is the correct property as well 我錯過了什麼?

+0

[剛剛在github上打開了一個問題](https://github.com/google/google-api-nodejs-client/issues/347) – dthareja

回答

1

據GitHub上

@ryanseys您不能授權與智威湯遜Gmail的API請求,因爲它需要auth'd到一個特定的用戶,您必須使用OAuth 2.0。否則,你可以做一些非常可疑的事情,比如發送消息冒充別人。 Google API資源管理器使用OAuth 2.0進行身份驗證,這就是它的工作原理。有關更多信息,請參閱https://developers.google.com/gmail/api/auth/about-auth

正如您在Failed sending mail through google api in nodejs,auth: OAuth2Client中看到的那樣,他們正在使用OAuth2客戶端進行身份驗證。目前沒有辦法讓您使用GMail API發送消息,而無需認證爲特定的GMail用戶。服務帳戶無法像普通用戶那樣訪問GMail。

希望這可以幫助別人嘗試使用服務帳戶發送郵件!

+0

所以你說的是,如果沒有他們的互動就不可能獲取用戶的電子郵件(直接由用戶手動驗證)即使我擁有該特定域的所有管理員權限? – Kunok

相關問題