2016-09-14 4 views
2

ich eine E-Mail zu senden, unter Verwendung des Google-API in node.js von der schnellen Start Probe in der Google-DokumentationE-Mail mit gmail api senden funktioniert nicht

var sendmsg = function(auth) { 

var to = '[email protected]', 
    subject = 'Hello World', 
    content = 'send a Gmail.' 

var email = "To: "+ to +"\r\n"+ 
    "Subject: "+subject+"\r\n"+ 
    content; 

var base64EncodedEmail = new Buffer(email).toString('base64'); 
var gmail = google.gmail('v1'); 
var request = gmail.users.messages.send({ 
    'userId': auth, 
    'message': { 
    'raw': base64EncodedEmail 
    } 
}, function (err, result) { 
     console.log('result'+result); 
}); 
}; 

Ich habe dieses Beispiel bin versucht, die liest die Etiketten in meinem E-Mail-Konto (das hat gut funktioniert). Und Ich habe gerade die Bereiche auf:

var SCOPES = ['https://mail.google.com/', 
'https://www.googleapis.com/auth/gmail.modify', 
'https://www.googleapis.com/auth/gmail.compose', 
'https://www.googleapis.com/auth/gmail.send']; 

und erstellt, dass var = email

var to = '[email protected]', 
    subject = 'Hello World', 
    content = 'send a Gmail.' 

var email = "To: "+ to +"\r\n"+ 
    "Subject: "+subject+"\r\n"+ 
    content; 

Dann bin ich nur versucht, die gmail.users.messages.send Methode zu verwenden .. Aber beim Laufen die Das Ergebnis lautet:

<HTML> 
<HEAD> 
    <TITLE>Bad Request</TITLE> 
</HEAD> 
<BODY BGCOLOR="#FFFFFF" TEXT="#000000"> 
    <H1>Bad Request</H1> 
    <H2>Error 400</H2> 
</BODY> 
</HTML> 

Irgendeine Idee, was ich vermisse? Ich denke, die Art, wie ich meine var 'E-Mail' erstelle, ist falsch, aber ich bin mir nicht sicher, wie es sein sollte

+0

Link zu dem Paket, das Sie verwenden? – Nonemoticoner

+0

Ich verwende diese zwei: "google-auth-library": "^ 0.9.8" "googleapis": "^ 13.0.0" –

Antwort

1

Der Wert des userId -Felds muss die E-Mail-Adresse des Absenders sein (oder me für kurz), die auth -Objekt muss im Feld auth übergeben werden, und die Nachricht sollte im resource -Feld übergeben werden. Ihrer Nachricht fehlt ein Header From und eine zusätzliche neue Zeile, bevor der Inhalt gültig ist. Die Nachricht muss auch base64url-codiert sein:

function sendMessage(auth, from, to, subject, content) { 
// The Gmail API requires url safe Base64 
// (replace '+' with '-', and '/' with '_') 
var encodedEmail = new Buffer(
    'From: ' + from + '\r\n' + 
    'To: ' + to + '\r\n' + 
    'Subject: ' + subject + '\r\n\r\n' + 

    content 
).toString('base64').replace(/\+/g, '-').replace(/\//g, '_'); 

var gmail = google.gmail('v1'); 
var request = gmail.users.messages.send({ 
    auth: auth, 
    userId: 'me', 
    resource: { 
    raw: encodedEmail 
    } 
}, function (err, result) { 
    console.log('result:', result); 
}); 
}; 
+1

Es funktionierte perfekt, danke Tholle. Auch für die Erklärung. –

+0

@ DanielMarín Großartig! Kein Problem. :) – Tholle

+0

Tholle wissen Sie, wo ich die Dokumentation der Eigenschaften finden kann, die ich in diesem json übergeben kann? (die ich als Parameter in der Sendefunktion übergebe). Ich konnte sie nicht finden .. –

Verwandte Themen