在 Node JS 中使用 gmail API 的 "from" 字段出现问题

Issue with "from" field using gmail API in Node JS

我在 RFC2822 邮件的“发件人”字段中设置邮件作者时遇到问题(here 详细信息)。 问题是作者没有出现在收到的邮件中。我设置的“发件人”字段如下所示:

MyName: name.surname@gmail.com

但我也尝试过:

MyName <name.surname@gmail.com>

None这些作品,在收到的邮件中查看原始邮件仍然缺少名称。

这应该可以工作,因为使用 nodemailer(与 Gmail)和相同的“发件人”值可以工作。有人可以向我解释发生了什么吗?我该如何解决?

编辑:我按照一条评论中的要求报告了我正在使用的代码。

我将对 API 的调用与生成邮件正文的部分分开,因此调用是:

function gmailSend(auth, mail){
    const gmail = google.gmail({version: 'v1', auth});
    const b64mex=mail.b64enc();
    return gmail.users.messages.send(
        {auth: auth,
            userId: 'me',
            resource:
                {raw: b64mex}
        }
    );

}

当这样生成参数“mail”时:

function genMail(candidate, clerk_email, supervisor_email){
return new Mail({from: `MyName: name.surname@gmail.com`, to: candidate.email,
    subject: "Test Mail", bcc: supervisor_email,
    "reply-to": clerk_email}, genMessage(candidate));

}

Mail 简单地组成一个对象,该对象具有第一个参数中给定的属性,而 b64enc() 将所有内容放入符合 RFC2822 的字符串中并对其进行 base64 编码。

EDIT2:邮件代码 class。

class Mail{
constructor(headers, body) {
    if(!headers.to)
        throw Error("Recipient missing");
    if(headers.subject){
        const b64subject=new Buffer(headers.subject).toString("base64")
            .replace(/\+/g, '-').
            replace(/\//g, '_');
        headers.subject='=?utf-8?B?'+b64subject+"?=";
    }
    Object.assign(this, headers);
    this.body = body;
}
b64enc(){
    const fields = ["Content-Type: text/html; charset=\"UTF-8\"\n",
        "MIME-Version: 1.0\n",
        "Content-Transfer-Encoding: 7bit\n"];
    for(const prop of Object.keys(this)){
        if(prop!=="body")
            fields.push(`${prop}: ${this[prop]}\n`);
    }
    fields.push("\n");
    fields.push(this.body);
    const str=fields.join('');
    const encodedMail = new Buffer(str).toString("base64")
        .replace(/\+/g, '-').
        replace(/\//g, '_');
    return encodedMail;
}

}

EDIT3:我添加了所需行为和实际行为的屏幕截图:

期望的行为,隐藏信息是发件人的电子邮件和收件人的电子邮件:

实际行为。不同的是这里没有“MyName”。

我的邮件客户端中显示的内容当然是基于普通邮件中“发件人:”的内容。在第一种情况下它是“我的名字<电子邮件地址>”,在第二种情况下它只是“电子邮件地址”。

为了显示姓名,而不仅仅是电子邮件地址,您可以按以下方式设置 from 字段的格式:

from: '"MyName" <name.surname@gmail.com>'