发送电子邮件与gmail API不工作

send email with gmail api not working

本文关键字:API 工作 gmail 电子邮件      更新时间:2023-09-26

我正在尝试发送电子邮件,通过使用谷歌api在node.js

var sendmsg = function(auth) {
var to = 'foo@gmail.com',
    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);
 });
};

我从google文档中的快速开始示例中选取了这个示例,它读取了我的电子邮件帐户中的标签(它工作得很好)。我把作用域改成:

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'];

并创建var = email

var to = 'foo@gmail.com',
    subject = 'Hello World',
    content = 'send a Gmail.'
var email = "To:  "+ to +"'r'n"+
    "Subject: "+subject+"'r'n"+
    content;

然后我只是试图使用gmail.users.messages.send方法…但是当运行时,结果返回以下内容:

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

你知道我错过了什么吗?我认为我创建var 'email'的方式是错误的,但我不确定它应该如何

userId -字段的值必须是发件人的电子邮件地址(或简称me), auth -对象必须在auth字段中传递,resource -字段中传递消息。您的消息缺少From标题和在内容有效之前的额外新行。消息也必须是base64url编码的:

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);
 });
};

与其自己构建body,我强烈建议使用Nodemailers系统:

const sendMail = async () => {
    const mail = await new MailComposer({
          to: ...,
          from: ...,
          subject: ...,
          html: ...,
        });
    const message = await mail.compile().build();
    const encodedMessage = message
          .toString('base64')
          .replace(/'+/g, '-')
          .replace(/'//g, '_')
          .replace(/=+$/, '');
    await gmail.users.messages.send({
      userId: 'me',
      requestBody: { raw: encodedMessage },
    });
}