SMTP中包含普通邮件、HTML和附件的电子邮件的正确电子邮件格式?

SMTP中包含普通邮件、HTML和附件的电子邮件的正确电子邮件格式?,smtp,Smtp,问题: 我试图复制yahoo和hotmail使用的基于SMTP的邮件头/电子邮件,并通过Telnet发送它们,但我收到的电子邮件没有显示包含的附件,但它确实正确显示了邮件 我怀疑是什么原因造成的: 我相信我的电子邮件格式不正确,尽管在网上搜索了大量文章(并试图掌握复杂且难以阅读的RFC),但我没有找到任何有用或简明的文章来解释如何在SMTP中正确使用这三种格式(普通、HTML和附件)。我花了几天时间试图修改代码,但我要么只看到消息(没有附件),要么看到整个SMTP数据体(包括边界、html代码等

问题:

我试图复制yahoo和hotmail使用的基于SMTP的邮件头/电子邮件,并通过Telnet发送它们,但我收到的电子邮件没有显示包含的附件,但它确实正确显示了邮件

我怀疑是什么原因造成的:

我相信我的电子邮件格式不正确,尽管在网上搜索了大量文章(并试图掌握复杂且难以阅读的RFC),但我没有找到任何有用或简明的文章来解释如何在SMTP中正确使用这三种格式(普通、HTML和附件)。我花了几天时间试图修改代码,但我要么只看到消息(没有附件),要么看到整个SMTP数据体(包括边界、html代码等)

我希望通过这个问题实现什么:

我希望有人能查看我在下面收集的信息,并能告诉我我遗漏了什么(或者电子邮件的格式有多不正确)

调试信息:

我将发送到SMTP服务器的信息的副本输入文件,并将信息粘贴到pastebin(删除/编辑了任何个人信息-Base64编码的附件只是从IMAP获取的另一封电子邮件的文本文件):

逐字(减去控制字符)发送到SMTP服务器的信息:

我在电子邮件客户端中看到的内容(注意无附件):

我下载电子邮件时IMAP看到的内容(注意格式不正确):

格式正确的电子邮件对IMAP应该是什么样子:

我怀疑SMTP误解了我发送的内容,这就是为什么IMAP尝试检索电子邮件时缺少多部分/备选方案的原因。我到底做错了什么?服务器期望什么


[感谢您的支持-我可以重新启用链接!]

我清理了多部分边界说明符并得到了这个,它在我的服务器上适用于我(我在这里省略了SMTP命令):

From:“已编辑”
至:“已编辑”
主题:测试4
MIME版本:1.0
内容类型:多部分/备选;
boundary=“boundary-type-1234567892-alt”
--边界类型-1234567892-alt
内容类型:文本/纯文本;charset=“iso-8859-1”
内容传输编码:引用可打印
测试文本,看看它是否有效!
--边界类型-1234567892-alt
内容类型:text/html;charset=“iso-8859-1”
内容传输编码:引用可打印
这真的有效吗?
--边界类型-1234567892-alt
内容传输编码:base64
内容类型:文本/纯文本;name=“Here2.txt”
内容处置:附件;filename=“Here2.txt”
Kiaxmybgrvrdscaoqk9ewvturvhuxb7nju5fq0kls1fzjzim2zwutmja3ys00zddiltg0ntgtndyyymvlndkxogrhxw0kq9udgvudc1uexboib0zxh0bx0bx0bx0bxyyyyyyyg2v0psjpc28tod0sig0sig0kq2udg9udg1ucmfuc2zlci1bmnvdg5yg5yg5wzg5yzwzg5yqqg1c1c5yxyg1c3qg2w5yxyxyg1c1c1g1g1c1g1g1g
YWXSESBJB250YWYLUCYGCQKGCSAGIAKJICA9DQONCI0TX2Y2YJNINWLt2TNGQYI04NDU4LtQ2OWJLZTQ5MTHYV8 NCKNVbNRLbNqTvTvTvTvTvTvTvTvTvTvTvTvTvTvTvTvTvTvTvTvTvTvDvTvTvTvTvTvDvDvTvDvTvDvTvTvTvTvTvTvTvTvTvTvTvTvTvTvTvTvTvTvTvTvTvTvTvTvTvTvTvTvT
CI5OBW1LC3NHZ2UGUA0KW0KBWFYZ2UOJBWED0ZQG0KCGFKZGLUZOWCHNGN0NCMJVZHKUAG1TZYWDLQP7DQPMB25 0LXNPEMU6IdeWCHQ9M0incmZVbNqTzMzMzMzMzTzFYW5OLRhaG9TyQ0KfQ0L0+PC9ZDHLSZDHLZD8L2HLYWQ+DQO8YM9YM9KKESBBGFZC0ZC0ZZZZZZZZZZZZZZL8ZC0ZC0ZC0ZC0ZC0ZYL8ZC0ZC0ZC0ZYL8ZC0
AXMGYWN0DWFSBHKGY29UDGFPBNMHIAKGJIACAJCSAGPC9KAXY+PC9IB2R5PG0KPC9ODG1SPJ0NCG0KLS1FZJZIZ2ZWU TMJA3YS00ZDDILTG0NTGTNd5YMVLNDKxOxOx0DQOPDQPMBHLUBMNvB1DGVYIE9LIEZVENIGNVBXBZXXRZA
--边界类型-1234567890-alt--
多部分电子邮件中的边界说明符是不可能出现在电子邮件正文/附件中的任意文本。当它在前面显示两个破折号时,指定新部分(包括第一部分)的开头。当它在开头和结尾显示两个破折号时,指定邮件的结尾


<>你的原始邮件在邮件中间有这个“结束边界”标记(在代码>之后,这真的起作用了吗?< /代码>,并且有两个不同的边界标记(<代码>边界类型-12345 67 890 < /代码>和代码> -边界类型-12345 67 892 ALT < /代码>)。这就解释了为什么附件会被删除。

事实证明,问题非常微妙

Hotmail通常()使用术语“multipart/alternative”来表示电子邮件的多个部分。我在电子邮件中使用了“multipart/alternative”

事实证明,yahoo不喜欢“multipart/alternative”,只有在使用术语“multipart/mixed”(我注意到yahoo兼容的电子邮件使用这个术语而不是alternative)并结合ejdyksen的建议时,才会正确显示纯文本、html和附件(不过,这两个建议都不适用于雅虎的服务器)


虽然从技术上讲,这是一个“正确”的答案,但我会选择ejdyksen的答案,因为他的努力表明这是服务器端的技术问题(他的SMTP服务器和hotmail都显示了附件,雅虎没有)。礼貌地投票给ejdyksen的答案,而不是像他做的大部分腿部工作一样。

如果用户将http://放在他们前面,链接仍然可用-我必须禁用它们,因为新用户只能提供两个链接。对此有何可能的帮助?我修改了它以匹配您的设置,但附件仍然丢失。两个不同的边界是我使用的是基于我从hotmail电子邮件中获得的内容(你可以在下面看到)。尽管我必须承认我从未尝试将电子邮件发送到其他SMTP服务器,以防yahoo只是在不告诉我的情况下删除附件。看起来yahoo根本不显示附件。hotmail h
From: "Edited Out" <editedout@yahoo.com> 
To: "Edited Out" <editedout@yahoo.com> 
Subject: Testing 4
MIME-Version: 1.0
Content-Type: multipart/alternative;
  boundary="boundary-type-1234567892-alt"

--boundary-type-1234567892-alt
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable


Testing the text to see if it works!

--boundary-type-1234567892-alt
Content-Type: text/html; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable


<html>Does this actually work?</html>

--boundary-type-1234567892-alt
Content-Transfer-Encoding: base64
Content-Type: text/plain;name="Here2.txt"
Content-Disposition: attachment;filename="Here2.txt"

KiAxMyBGRVRDSCAoQk9EWVtURVhUXSB7NjU5fQ0KLS1fZjZiM2I1ZWUtMjA3YS00ZDdiLTg0NTgtNDY5YmVlNDkxOGRhXw0    KQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJpc28tODg1OS0xIg0KQ29udGVudC1UcmFuc2Zlci1FbmNvZG    luZzogcXVvdGVkLXByaW50YWJsZQ0KDQoNCkp1c3Qgc2VlaW5nIHdoYXQgdGhpcyBhY3R1
YWxseSBjb250YWlucyEgCQkgCSAgIAkJICA9DQoNCi0tX2Y2YjNiNWVlLTIwN2EtNGQ3Yi04NDU4LTQ2OWJlZTQ5MThkYV8    NCkNvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PSJpc28tODg1OS0xIg0KQ29udGVudC1UcmFuc2Zlci1FbmNvZG    luZzogcXVvdGVkLXByaW50YWJsZQ0KDQo8aHRtbD4NCjxoZWFkPg0KPHN0eWxlPjwhLS0N
Ci5obW1lc3NhZ2UgUA0Kew0KbWFyZ2luOjBweD0zQg0KcGFkZGluZzowcHgNCn0NCmJvZHkuaG1tZXNzYWdlDQp7DQpmb25    0LXNpemU6IDEwcHQ9M0INCmZvbnQtZmFtaWx5OlRhaG9tYQ0KfQ0KLS0+PC9zdHlsZT48L2hlYWQ+DQo8Ym9keSBjbGFzcz    0zRCdobW1lc3NhZ2UnPjxkaXYgZGlyPTNEJ2x0cic+DQpKdXN0IHNlZWluZyB3aGF0IHRo
aXMgYWN0dWFsbHkgY29udGFpbnMhIAkJIAkgICAJCSAgPC9kaXY+PC9ib2R5Pg0KPC9odG1sPj0NCg0KLS1fZjZiM2I1ZWU    tMjA3YS00ZDdiLTg0NTgtNDY5YmVlNDkxOGRhXy0tDQopDQpmbHlubmNvbXB1dGVyIE9LIEZFVENIIGNvbXBsZXRlZA


--boundary-type-1234567890-alt--