【问题标题】:gmail with multiple attachments not working带有多个附件的gmail无法正常工作
【发布时间】:2019-06-02 17:53:45
【问题描述】:

使用 gmail api 发送带有多个附件的邮件时,邮件无法正常发送。附件不会发送到邮件中,而是一些代码会发送到邮件中。我正在使用 node js 和 request-promise 模块来实现这一点。

我尝试通过设置附件边界来发送附件。这是我写的一段代码。

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);
})

我希望发送带有多个附件的电子邮件。但我也无法发送带有单个附件的邮件。谁能帮我解决这个问题。

【问题讨论】:

  • 田池你能看看这个问题吗。
  • 您可以查看SO post 了解如何发送多个附件的想法或流程。但它使用python代码。
  • @jess 谢谢回复,不过我不懂python。如果有任何 javascript 或 node js 代码,最好理解。
  • @jess 你能看看这个问题吗:stackoverflow.com/questions/54018048/…

标签: node.js google-api gmail-api google-api-nodejs-client google-apis-explorer


【解决方案1】:

我发现了问题家伙。刚刚删除了不需要的逗号及其工作。这是修改后的代码。

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);
})

【讨论】:

    猜你喜欢
    • 2019-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-07
    • 1970-01-01
    • 2016-11-13
    相关资源
    最近更新 更多