使用Gmail API时,请不断收到退回邮件

时间:2015-12-17 14:23:20

标签: node.js email google-api gmail-api

我尝试使用gmail API从节点应用程序发送电子邮件。这是我的代码:

function sendEmail(auth) {
    var gmail = google.gmail('v1');
    gmail.users.messages.send({
        auth,
        userId: 'me',
        resource: {
            payload: {
                mimeType: 'message/rfc822',
                headers: [{name: 'To', value: 'ayeritsian@gmail.com'},
                    {name: 'Subject', value: 'test'},
                    {name: 'From', value: 'ayeressian2@gmail.com'}]
            },
            raw: new Buffer('test123').toString('base64')
        },
        internalDate: Date.now()
    }, function (err, bla, IncommingMessage) {
        console.log(arguments);
        console.log('end');
    });
}

当我运行应用程序时,我不断收到退回消息"发生错误。您的邮件未发送。"。该错误消息不够具有描述性,并且几乎没有google-api节点包的文档。如果有人可以帮助我,我将不胜感激。

2 个答案:

答案 0 :(得分:0)

您需要将整个电子邮件放在邮件的“原始”字段中,解析后的邮件不能与send一起使用。 C.F. https://developers.google.com/gmail/api/guides/sending

这类似于python,我相信你可以转换为node.js :) email = "From: myemail@gmail.com\r\nTo: someguy@gmail.com\r\nSubject: hey check this out\r\n\r\nhi someguy, this is my email body here. it's plain text." message.raw = base64_websafe(email)

答案 1 :(得分:0)

为了它的价值,我遇到了类似的问题。我一直在我的应用/用户的收件箱中收到一个模糊的错误消息。

From: nobody@gmail.com
An error occurred. Your message was not sent.

解决这个问题的原因是将Message-ID属性添加到我创建的Buffer中。基本上,我的消息并不是他们在文档here中提到的rfc822规范。

Here is the document I referenced及以下是我的摘要。

module.exports = function (policyMeta) {
  log.info('BUILDING EMAIL');
  const message = 'From: xxx@xxx.com\r\n' +
                  'To: xxx@xxx.com\r\n' +
                  `Date: ${new Date()}\r\n` +
                  'Subject: Howdy Mundo\r\n' +
                  `Message-ID: ${uuid()}\r\n` +
                  'look mom i send a message';
  const params = {
    auth: Auth.getGoogleAuthClient(),
    userId: 'me',
    media: { mimeType: 'message/rfc822' },
    resource: {
      raw: new Buffer(message).toString('base64')
    }
  };
  return sendEmail(params).then((res) => console.log(res, 'success'));
};