带有多个附件的gmail无法正常工作 [英] gmail with multiple attachments not working
问题描述
使用gmail api发送带有多个附件的邮件时,邮件运行不正常.附件不以邮件形式发送,而是一些代码以邮件形式发送.我正在使用node js和request-promise模块来实现这一目标.
When mail is sent with multiple attachments using gmail api, mail is not going properly. Attachments are not going in mail, instead some code is going in mail. I am using node js and request-promise module for achieving this.
我尝试通过设置附件的边界来发送附件.这是我编写的代码.
I have tried sending attachments by setting boundaries on attachments. Here is the piece of code that I have written.
let user = await db.model('User').findOne({ _id: userId });
let from = user.crmOptions.email;
let mailString = '';
for (let i in req.files) {
mailString += '--boundary_mail1\n' + ','
mailString += `Content-Type: ${req.files[i].mimetype}\n` + ','
mailString += `Content-Disposition: attachment; filename="${req.files[i].filename}"\n` + ','
mailString += "Content-Transfer-Encoding: base64\n\n" + ','
mailString += `${fs.readFileSync(req.files[i].path).toString('base64')}` + ',' + '\n'
if (i !== req.files.length - 1)
mailString += ','
}
let raw = [
'MIME-Version: 1.0\n',
"to: ", req.body.to, "\n",
"from: ", from, "\n",
"cc: ", req.body.cc ? req.body.cc : '', "\n",
"bcc: ", req.body.bcc ? req.body.bcc : '', "\n",
"subject: ", req.body.subject ? req.body.subject : '', "\n",
"Content-Type: multipart/mixed; boundary=boundary_mail1\n\n",
"--boundary_mail1\n",
"Content-Type: multipart/alternative; boundary=boundary_mail2\n\n",
"--boundary_mail2\n",
"Content-Type: text/html; charset=UTF-8\n",
"Content-Transfer-Encoding: quoted-printable\n\n",
req.body.message = req.body.message ? req.body.message : '', "\n\n",
"--boundary_mail2--\n",
mailString,
'--boundary_mail1--',
].join('');
const id = 'me';
let options = {
url: "https://www.googleapis.com/upload/gmail/v1/users/" + id + "/messages/send?uploadType=multipart",
method: 'POST',
headers: {
'Authorization': `Bearer ${user.crmOptions.access_token}`,
'Content-Type': 'message/rfc822'
},
body: raw
};
await request(options).then(async body => {
console.log("Body: ", body);
}).catch(err => {
console.log("Error: ", err);
})
我希望电子邮件带有多个附件.但是我也无法发送带有单个附件的邮件.谁能帮我解决问题.
I want email to be delivered with multiple attachments. But I am not able to send mail with single attachment also. Could anyone help me resolve the issue.
推荐答案
我发现了问题专家.刚刚删除了不需要的逗号及其工作原理.这是修改后的代码.
I found out issue guys. Just removed unwanted commas and its working. here is the modified code.
let user = await db.model('User').findOne({ _id: userId });
let from = user.crmOptions.email;
let mailString = '';
for (let i in req.files) {
mailString += '--boundary_mail1\n'
mailString += `Content-Type: ${req.files[i].mimetype}\n`
mailString += `Content-Disposition: attachment; filename="${req.files[i].filename}"\n`
mailString += "Content-Transfer-Encoding: base64\n\n"
mailString += `${fs.readFileSync(req.files[i].path).toString('base64')}` + '\n'
}
let raw = [
'MIME-Version: 1.0\n',
"to: ", req.body.to, "\n",
"from: ", from, "\n",
"cc: ", req.body.cc ? req.body.cc : '', "\n",
"bcc: ", req.body.bcc ? req.body.bcc : '', "\n",
"subject: ", req.body.subject ? req.body.subject : '', "\n",
"Content-Type: multipart/mixed; boundary=boundary_mail1\n\n",
"--boundary_mail1\n",
"Content-Type: multipart/alternative; boundary=boundary_mail2\n\n",
"--boundary_mail2\n",
"Content-Type: text/html; charset=UTF-8\n",
"Content-Transfer-Encoding: quoted-printable\n\n",
req.body.message = req.body.message ? req.body.message : '', "\n\n",
"--boundary_mail2--\n",
mailString,
'--boundary_mail1--',
].join('');
const id = 'me';
let options = {
url: "https://www.googleapis.com/upload/gmail/v1/users/" + id + "/messages/send?uploadType=multipart",
method: 'POST',
headers: {
'Authorization': `Bearer ${user.crmOptions.access_token}`,
'Content-Type': 'message/rfc822'
},
body: raw
};
await request(options).then(async body => {
console.log("Body: ", body);
}).catch(err => {
console.log("Error: ", err);
})
这篇关于带有多个附件的gmail无法正常工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!