我的系统是内部解决方案,试图通过电子邮件将发票邮寄给客户。除了一个客户端获取.dat文件而不是其他人获得的生成的.pdf文件之外,该系统运行良好。
我已经研究过这个问题,很多事情都指向Outlook发送电子邮件(不使用outlook)和拆分文件的问题,因为它很大(不是,我们可以手动发送电子邮件。)
文件被重命名为“= _utf-8_B_Q29uc29saWRhdGVkIEludm9pY2VzIGZv.dat”而不是“1180426.pdf”。
两个文件上的标题后面只是对我没有任何意义的字符行。
.dat文件的标头: 文件1
=?utf-8?B?Y2lCQmJIQm9ZU0JKYm5OMWJHRjBhVzl1Pz0NCiA9P3V0Zi04P0I/SUNZ?=\
\
=?utf-8?B?Z1YyRjBaWEp3Y205dlptbHVaeUF0SUVGc2NHaGhJRWx1YzNWc1lYUnBi?=\
\
=?utf-8?B?MjRnSmlCWFlYUmw/PQ0KID0/dXRmLTg/Qj9jbkJ5YjI5bWFXNW5JT0tB?=\
\
=?utf-8?B?a3lCVmJtbDJaWEp6WVd3Z1EybDBlU3dnS0RJd01USXRNRFF0TVRNcD89?=\
\
=?utf-8?B?DQogPT91dGYtOD9CP0xuQmtaZz09Pz0=?="
Content-Transfer-Encoding: base64
Content-Disposition: attachment
file2的
=?utf-8?B?YUdFZ1NXNXpkV3hoZEdsdmJpQW1JRmRoPz0NCiA9P3V0Zi04P0I/ZEdW?=\
\
=?utf-8?B?eWNISnZiMlpwYm1jZ0xTQkJiSEJvWVNCSmJuTjFiR0YwYVc5dUlDWWdW?=\
\
=?utf-8?B?MkYwWlhKd2NtOXY/PQ0KID0/dXRmLTg/Qj9abWx1WnlEaWdKTWdWVzVw?=\
\
=?utf-8?B?ZG1WeWMyRnNJRU5wZEhrc0lDZ3lNREV5TFRBMExURXpLUzV3WkdZPT89?=\
\
=?utf-8?B??="
Content-Transfer-Encoding: base64
Content-Disposition: attachment
有没有人知道为什么会这样?
答案 0 :(得分:5)
来自评论:
在文件名中打印出一个奇怪的Unicode字符而不是连字符:“......防水 - 环球城,......”。可能是某人的邮件服务器对非ASCII字符敏感,并将其编码为base64。将其更改为常规ASCII连字符,它应该没问题。
我是如何找到的:
首先,这是我使用的在线base64解码器:http://www.opinionatedgeek.com/dotnet/tools/base64decode/
其次,我从头部连接所有base64字符串开始。它分为多个部分:对于第一个标题,有5个部分。段是问号之间的长部分。把它们放在一起,你得到:
Y2lCQmJIQm9ZU0JKYm5OMWJHRjBhVzl1Pz0NCiA9P3V0Zi04P0I/SUNZ
Z1YyRjBaWEp3Y205dlptbHVaeUF0SUVGc2NHaGhJRWx1YzNWc1lYUnBi
MjRnSmlCWFlYUmw/PQ0KID0/dXRmLTg/Qj9jbkJ5YjI5bWFXNW5JT0tB
a3lCVmJtbDJaWEp6WVd3Z1EybDBlU3dnS0RJd01USXRNRFF0TVRNcD89
DQogPT91dGYtOD9CP0xuQmtaZz09Pz0=
将其放入解码器中:
ciBBbHBoYSBJbnN1bGF0aW9u?=
=?utf-8?B?ICYgV2F0ZXJwcm9vZmluZyAtIEFscGhhIEluc3VsYXRpb24gJiBXYXRl?=
=?utf-8?B?cnByb29maW5nIOKAkyBVbml2ZXJzYWwgQ2l0eSwgKDIwMTItMDQtMTMp?=
=?utf-8?B?LnBkZg==?=
另一组base64段。第一段看起来像它被切断了,所以我假设进入文件名的内容实际上是它的一部分。所以我先加上它并得到:
Q29uc29saWRhdGVkIEludm9pY2VzIGZvciBBbHBoYSBJbnN1bGF0aW9u
ICYgV2F0ZXJwcm9vZmluZyAtIEFscGhhIEluc3VsYXRpb24gJiBXYXRl
cnByb29maW5nIOKAkyBVbml2ZXJzYWwgQ2l0eSwgKDIwMTItMDQtMTMp
LnBkZg==
将 this 放入解码器将使其因为非ASCII字符而吐出.bin文件。 bin文件包含PDF的完整文件名。
在十六进制编辑器中打开bin文件:
43 6F 6E 73 6F 6C 69 64 61 74 65 64 20 49 6E 76 Consolidated Inv
6F 69 63 65 73 20 66 6F 72 20 41 6C 70 68 61 20 oices for ****
49 6E 73 75 6C 61 74 69 6F 6E 20 26 20 57 61 74 ********** & ***
65 72 70 72 6F 6F 66 69 6E 67 20 2D 20 41 6C 70 ********** - ***
68 61 20 49 6E 73 75 6C 61 74 69 6F 6E 20 26 20 ** ********** &
57 61 74 65 72 70 72 6F 6F 66 69 6E 67 20 E2 80 ************* â€
93 20 55 6E 69 76 65 72 73 61 6C 20 43 69 74 79 “ ********* ****
2C 20 28 32 30 31 32 2D 30 34 2D 31 33 29 2E 70 , (2012-04-13).p
64 66 df
em-dash像拇指一样伸出来。
答案 1 :(得分:2)
我认为@Jeff E已经做对了:文件名中有一个非ASCII字符,这会导致一端或另一端出现问题。当您手动通过电子邮件发送文件时,我的猜测是,您的邮件客户端会使用常规连字符或其他字符(例如_)替换em-dash。如果您将“防水 - 环球城市”中的短划线更改为“ - ”,我认为这应该有用。
(如果确实如此,代表应该去看Jeff,因为他发现了unicode。)
答案 2 :(得分:0)
当您的系统将PDF附加到电子邮件时,您是否设置了MIME类型?如果是这样,你在用什么?这是一个黑暗的镜头,但你的系统可能没有正确使用application / pdf,并且邮件服务器和客户端的某些组合通过将其更改为.dat而变得混乱和响应。