gpt4 book ai didi

c# - 如何在附件中发送html?

转载 作者:行者123 更新时间:2023-11-30 18:03:23 25 4
gpt4 key购买 nike

我需要通过电子邮件发送一些 html 文本。但我需要在附件中而不是在电子邮件正文中这样做。我使用这个代码片段来形成一个附件:

public MailMessage GetMailMessage(string @from)
{
var m = new MailMessage(new MailAddress(@from), new MailAddress(_to)) {Subject = _subj};
var attach = new Attachment(new MemoryStream(
Encoding.UTF8.GetBytes(_htmlAttach)), _subj + ".html", MediaTypeNames.Text.Html);
attach.ContentDisposition.Inline = false;
attach.ContentType.Name = _subj + ".html";
m.Attachments.Add(attach);
return m;
}

但是当我向我的 gmail 邮箱发送这样一封电子邮件时,我收到了一封纯文本邮件,其中的文本如下所示:

\ =?utf-8?B?dDlDd0lOQy8wTFhSZ05DNDBMN1F0Q0F4Pz0NCiA9P3V0Zi04P0I/TXpv?=\ \ =?utf-
8?B?ME5pQXlPUzR3T0M0eU1ERXhJQzBnTVRRNk1qQWdNamt1TURndU1qQXhN?=\ \ =?utf-8?B?UzVvZEcxcz89?="
Content-Transfer-Encoding: base64 Content-Disposition: attachment
PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEvL0VO
IiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvc3RyaWN0LmR0ZCI+DQo8aHRt
bCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sOmxhbmc9 ImVuIj4NCjxoZWFkPg0KI

在附件中发送 html 文件的正确方法是什么?


UPD:这是原始邮件消息部分:

MIME-Version: 1.0
From: <xxx@xxx.xx>
To: xxx@gmail.com
Date: Mon, 29 Aug 2011 03:29:05 -0700 (PDT)
Subject: xxx
Content-Type: multipart/mixed; boundary=--boundary_0_c99e5172-1766-4cfe-a6e0-7f6b0fa11061
----boundary_0_c99e5172-1766-4cfe-a6e0-7f6b0fa11061
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: quoted-printable


----boundary_0_c99e5172-1766-4cfe-a6e0-7f6b0fa11061
Content-Type: text/html;
name="=?utf-8?B?PT91dGYtOD9CPzBLUFFzdEMxMExUUXZ0QzgwTHZRdGRDOTBMalF0U0RR?=\
\

=?utf-8?B?dDlDd0lOQy8wTFhSZ05DNDBMN1F0Q0F4Pz0NCiA9P3V0Zi04P0I/TXpv?=\
\

=?utf-8?B?ME5pQXlPUzR3T0M0eU1ERXhJQzBnTVRRNk1qQWdNamt1TURndU1qQXhN?=\
\
=?utf-8?B?UzVvZEcxcz89?="
Content-Transfer-Encoding: base64
Content-Disposition: attachment

然后是 base64 文本:

PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEvL0VO
IiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvc3RyaWN0LmR0ZCI+DQo8aHRt
bCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sOmxhbmc9
ImVuIj4NCjxoZWFkPg0KICAgIDxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hh

最后:

----boundary_0_c99e5172-1766-4cfe-a6e0-7f6b0fa11061--

最佳答案

看起来您在生成的部分之间缺少换行符。因此,您需要输入类似 "To: "+ newMailAddress(to) + "\n" 等内容。您还需要构建容器 MIME 结构。如果您没有任何实际消息,只需将 HTML 作为单个正文部分发送,而不是作为“附件”发送。像这样

From: me <self@example.net>
To: you <guy@example.com>
Subject: here
MIME-Version: 1.0
Content-type: text/html; name="=?utf-8?q?really_bewildering?=
=?utf-8?q?_long_name.html?="
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="=?utf-8?q?really_bewildering?=
=?utf-8?q?_long_name.html?="

PCFET0NUWVBFIGh0bWwgUFVCTElDICItL ...

您粘贴的示例消息将正文包裹在单部分多部分/相关结构中,完全等效。

我相信 Content-Disposition 中的 filename= 部分是放置文件名的正确位置,但为了与非常老的客户端向后兼容,您最好将它放在两个位置。

注意换行长标题行的正确方法:换行前不应该有反斜杠;相反,至少用一个空白字符缩进后续行。 header 中不应有空行(空行将 header 与正文分开;因此错误 header 中的第一个空行会将其余 header 插入正文)。

到处都是base64编码是怎么回事?除非您的文档包含大量 8 位内容,否则如果您改用 quoted-printable,它可能会更小且更易于调试。您会注意到我将文件名更改为 quoted-printable 只是为了使其更易于阅读;您也可以对实际附件的内容执行相同的操作。

更新:在示例消息下方添加了 Content-Disposition 和文件名以及评论。

强调:直接的问题是您在 MIME header 中错误地包装了多行文件名。

关于c# - 如何在附件中发送html?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7229105/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com