问题描述
我无法使用 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,'_')
};
};