如何在 Node.js 中使用 Gmail API 发送带附件的电子邮件?

mox*_*hed 5 email-attachments node.js gmail-api

我是 Node.js 的新手,我正在尝试使用 Gmail API 创建一个邮箱,除了在电子邮件中上传附件外,一切正常。我找到了 Java、Python 和 C# 的示例,但我找不到任何关于它的节点文档。任何提示将不胜感激。

这是我的代码:

function makeBody(to, from, subject, message) {
    var str = ["Content-Type: multipart/mixed; charset=\"UTF-8\"\n",
        "MIME-Version: 1.0\n",
        "Content-Transfer-Encoding: 7bit\n",
        "to: ", to, "\n",
        "from: ", from, "\n",
        "subject: ", subject, "\n\n",
        message,
        file
    ].join('');

    var encodedMail = new Buffer(str).toString("base64").replace(/\+/g, '-').replace(/\//g, '_');

    return encodedMail;
}

function sendMessage(auth) {
    var raw = makeBody(tap, 'me', response.subject, response.content, response.files);
    gmail.users.messages.send({
        auth: auth,
        userId: 'me',
        resource: {
            raw: raw
        }
    }, function (err, response) {
        if (err) {
            console.log('Error  ' + err);
            return;
        }

        if (response) {
            res.sendFile(__dirname + '/boite.html')
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

LPS*_*LPS 13

这可能有点晚了,无论如何我会花时间以防万一以后有人想要替代品。

Moxched 方法的主要问题是他可能需要仔细查看 MIME 规范(这对我来说是一个很大的痛苦)才能更好地理解发送附件所必需的一些事情。

从我的立场来看,为了能够使用 gmail API 发送附件和许多其他内容,您必须根据 MIME 规范构建所有请求,为此您需要了解 MIME 中的事物是如何工作的,包括边界。

Joris 方法有效,但最终没有使用 nodeJS 库来发送电子邮件。他之所以不能使用gmail-api-create-message-body带有 gmail API的包中的答案,是因为出于某种原因,这个库在其 MIME 消息的顶部生成了以下内容:

'Content-Type: multipart/related; boundary="foo_bar_baz"',
`In-Reply-To: fakeemail@gmail.com`,
`References: `,
`From: fakeemail2@gmail.com`,
`Subject: SUBJECT`,
`MIME-Version: 1.0`,
'',
`--foo_bar_baz`,
`Content-Type: application/json; charset="UTF-8"`,
'',
`{`,
`}`,
'',
`--foo_bar_baz`,
`Content-Type: message/rfc822`,
'',
...
Run Code Online (Sandbox Code Playgroud)

出于某种原因,gmailAPI 不喜欢这样......

我的建议是更好地理解 MIME 规范,一个非常简单的方法是使用一些旧的逆向工程,为此我建议查看来自gmail-api-create-message-bodymail-composer来自 nodemailer的回复。

使用nodemailer/lib/mail-composer您将能够根据 MIME 规范轻松生成必要的 MIME 消息,它包括附件支持和所有其他内容。生成的 MIME 消息与 Gmail API 兼容。我留下了一个基于 NodeJS 文档示例的工作示例,它发送了一封带有 2 个附件的电子邮件。

希望这可以帮助!

'Content-Type: multipart/related; boundary="foo_bar_baz"',
`In-Reply-To: fakeemail@gmail.com`,
`References: `,
`From: fakeemail2@gmail.com`,
`Subject: SUBJECT`,
`MIME-Version: 1.0`,
'',
`--foo_bar_baz`,
`Content-Type: application/json; charset="UTF-8"`,
'',
`{`,
`}`,
'',
`--foo_bar_baz`,
`Content-Type: message/rfc822`,
'',
...
Run Code Online (Sandbox Code Playgroud)


Rey*_*cia 0

创建带有附件的消息中有与此相关的说明:

创建带有附件的消息就像创建任何其他消息一样,但将文件作为多部分 MIME 消息上传的过程取决于编程语言。

有关 NodeJS 示例参考,请查看此SO Post

  • 你引用的SO帖子完全没用。它没有显示如何做,只是说“自己找” (6认同)