生成EML内容(添加文件作为附件)

问题描述 投票:0回答:1

我正在尝试在基于 JavaScript 的前端实现电子邮件功能。我的任务是打开带有附件(文件)的默认电子邮件客户端(主要是 Outlook)。我用过mailto,但它不支持附件。现在,我不再从服务器以 blob 形式获取下载的文件,而是尝试获取基于 eml 的 blob,下载它,并且我认为它将在 Outlook 中成功打开并带有附件。我不太熟悉后端(c#),所以任何帮助将不胜感激。 我有这段代码可以获取下载的文件路径

var fileDetail = await service.DownloadFile(id);

var bytes = File.Exists(fileDetail.Path);

var stream = new MemoryStream(bytes);
return File(stream, fileDetail.MimeType, fileDetail.DownloadFileName);



FileDetail 包含 filePath、mimeType、fileName 等。该文件可以是 pdf、tiff 或任何文本文件。

我的目标是生成一个电子邮件文件,其中包含我收到的上面的附件(不需要收件人、主题等)。对电子邮件进行适当的 mime 类型,并将其发送到前端进行下载。

c# outlook eml
1个回答
0
投票

如果是纯文本+附件,请制作主要部分

Content-Type: multipart/mixed
,将附件数据转换为base 64

byte[] fileBytes = File.ReadAllBytes(filePath);
string base64String = Convert.ToBase64String(fileBytes);

向 MIME 消息添加两部分:一个是文本/纯文本,另一个是 Base 64 编码的文件数据(见下文)。

作为测试,您可以通过在 Outlook 中起草测试 EML 消息并将其发送到 Gmail 邮箱来创建测试 EML 消息 - 然后您可以在 Gmail 邮箱中查看该消息的原始 MIME 源。或者,您可以使用 OutlookSpy(我是其作者)将 Outlook 中的任何邮件转换为 MIME - 打开或选择邮件,单击 OutlookSopy 功能区上的

IConverterSession
按钮,单击
MAPIToMIMEStm

From: "It's Siddiqi" <[email protected]>
To: <[email protected]>
Subject: test
MIME-Version: 1.0
Content-Type: multipart/mixed;
    boundary="----=_NextPart_000_001A_01DA7B03.A146C8E0"
Content-Language: en-us

This is a multipart message in MIME format.

------=_NextPart_000_001A_01DA7B03.A146C8E0
Content-Type: text/plain;
    charset="us-ascii"
Content-Transfer-Encoding: 7bit

Test body

------=_NextPart_000_001A_01DA7B03.A146C8E0
Content-Type: application/octet-stream;
    name="test.bin"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
    filename="test.bin"

5XAGkAbgBkAG...
...<youyr base 64 data>
AAoADQAKAA==

------=_NextPart_000_001A_01DA7B03.A146C8E0--

© www.soinside.com 2019 - 2024. All rights reserved.