无法对发件人姓名中的重音符号进行编码 |邮件API

问题描述

我无法使用 gmail API 对发件人姓名中的重音符号进行编码。 尝试了几种编码方法,但仍然将 'é' 解释为 'é'

request.post({
      url: USERS_URL + email + '/messages/send',headers: {
        Authorization: 'Bearer ' + accesstoken,Accept: 'application/json','Content-Type' : 'Content-type: text/html; charset=UTF-8'
      },json: true,body: createEmail(emailOptions)
    });

const createEmail = ({sender,to,ccs,bccs,subject,emailBody}) => {
  subject = `=?utf-8?B?${Buffer.from(subject).toString('base64')}?=`;
  // sender = `=?utf-8?B?${Buffer.from(sender).toString('base64')}?=`;
  const message = `from: ${sender}\nto: ${to}${(ccs && ccs.length > 0) ? '\ncc:' + ccs : ''}${(bccs && bccs.length > 0) ? '\nbcc:' + bccs : ''}\nsubject: ${subject}\ncontent-transfer-encoding: base64\nContent-Type: text/html; charset='UTF-8'\n\n ${emailBody}`;
  let buff = new Buffer.from(message);
  return {
    raw: buff
      .toString('base64')
      //html :
      .replace(/\+/g,'-')
      .replace(/\//g,'_')
  };
};

解决方法

解决了!您只需要在发件人和

中对名称部分进行编码

const createEmail = ({to,ccs,bccs,subject,emailBody,email,name}) => {
  subject = `=?utf-8?B?${Buffer.from(subject).toString('base64')}?=`;
  let sender = '"' + `=?utf-8?B?${Buffer.from(name).toString('base64')}?=` + '"' + ' <' + email + '>';
  const message = `from: ${sender}\ncontent-transfer-encoding: base64\nContent-Type: text/html; charset='UTF-8'\nto: ${to}${(ccs && ccs.length > 0) ? '\ncc:' + ccs : ''}${(bccs && bccs.length > 0) ? '\nbcc:' + bccs : ''}\nsubject: ${subject}\ncontent-transfer-encoding: base64\nContent-Type: text/html; charset='UTF-8'\n\n ${emailBody}`;
  let buff = new Buffer.from(message);
  return {
    raw: buff
      .toString('base64')
      //html :
      .replace(/\+/g,'-')
      .replace(/\//g,'_')
  };
};