Проблема с полем from с использованием API gmail в Node JS

У меня возникла проблема с установкой автора письма в поле "От" сообщения RFC2822 (здесь подробности). Проблема в том, что автор не появляется в полученной почте. Поле from, которое я установил, выглядит так:

MyName: [email protected]

Но я также пробовал:

MyName <[email protected]>

Ничего из этого не работает, в полученной почте имя по-прежнему отсутствует, глядя на исходную почту.

Это должно работать, потому что работает nodemailer (с Gmail) и то же значение для from. Может кто-нибудь объяснить мне, что происходит? Как я могу решить?

РЕДАКТИРОВАТЬ: я сообщаю код, который я использую, как указано в одном комментарии.

Я отделил вызов 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: [email protected]`, to: candidate.email,
    subject: "Test Mail", bcc: supervisor_email,
    "reply-to": clerk_email}, genMessage(candidate));

}

Mail просто создает объект со свойствами, указанными в его первом параметре, а b64enc() помещает все в строку, соответствующую RFC2822, и кодирует ее в base64.

EDIT2: код для класса Mail.

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: в обычном электронном письме. В первом случае это Мое имя ‹адрес электронной почты›, во втором просто адрес электронной почты.


person Zack    schedule 09.01.2021    source источник
comment
Можете ли вы предоставить код, связанный с запросом, который вы делаете?   -  person Iamblichus    schedule 11.01.2021
comment
@lamblichus Я сообщил о коде, надеюсь, это поможет понять, где ошибка   -  person Zack    schedule 11.01.2021
comment
Можете ли вы дать ссылку на документацию по Mail от new Mail?   -  person Iamblichus    schedule 11.01.2021
comment
@labblichus Хорошо, я поставил полный код для почты   -  person Zack    schedule 11.01.2021
comment
Спасибо. Не устанавливается только поле from? Проблем с to, subject и т.д. нет?   -  person Iamblichus    schedule 12.01.2021
comment
@lamblichus Да, со всем остальным проблем нет, точнее проблема в том, что в поле from не отображается MyName. Настройка от: MyName [email protected]: с помощью nodemailer Я вижу в почте: From: MyName ‹[email protected]› с помощью gmail API Я вижу в почте From: [email protected]   -  person Zack    schedule 12.01.2021
comment
Можете ли вы предоставить скриншоты, показывающие желаемое и фактическое поведение?   -  person Iamblichus    schedule 12.01.2021
comment
@lamblichus Я добавил скриншоты, надеюсь, это поможет   -  person Zack    schedule 12.01.2021
comment
Я предполагаю, что использование from: '"Name" <email-address>', как показано в этом примере, также не работает?   -  person Iamblichus    schedule 13.01.2021
comment
@lamblichus Нет, это не работает ... У вас есть пример отправки почты с использованием API gmail? То, что я нашел, не использует имя в поле "от". Я действительно не понимаю, почему все остальные работают хорошо, а это нет.   -  person Zack    schedule 13.01.2021
comment
Я не могу воспроизвести это. Если я установлю для заголовка from значение '"Name" <email-address>', я получу желаемое поведение (я использую не ваш код, а код, основанный на этом ответе Можете ли вы попробовать указанный код и посмотреть, работает ли он?   -  person Iamblichus    schedule 13.01.2021
comment
@lamblichus моя ошибка ... Когда я попробовал последнее решение, я посмотрел на свой почтовый клиент, а не на обычную почту, и он скрывал имя, потому что электронное письмо было отправлено самостоятельно (для эксперимента я отправлял письма со своей учетной записи электронной почты для себя). Подтверждаю, что единственный правильный способ - тот, о котором вы упомянули, любой другой не работает.   -  person Zack    schedule 13.01.2021
comment
Единственная проблема, которую я сейчас замечаю, заключается в том, что в моем Gmail (как для Android, так и для WebApp), когда я открываю электронную почту, появляется предупреждение безопасности (которого не было, когда я использовал nodemailer). Это происходит только в том случае, если я отправляю письмо самому себе, поэтому, вероятно, причина в этом.   -  person Zack    schedule 13.01.2021
comment
Привет, я разместил это решение в качестве ответа, может быть полезно для других с такой же проблемой.   -  person Iamblichus    schedule 14.01.2021


Ответы (1)


Чтобы отображалось имя, а не только адрес электронной почты, вы можете отформатировать поле from следующим образом:

from: '"MyName" <[email protected]>'
person Iamblichus    schedule 14.01.2021