我有一个系统是一个内部解决方案,试图通过电子邮件将发票发送给客户.除了一个客户端获取.dat文件而不是其他人获得的生成的.pdf文件之外,该系统运行良好.
我已经研究过这个问题,很多事情都指向Outlook发送电子邮件(不使用outlook)和拆分文件的问题,因为它很大(不是,我们可以手动发送电子邮件.)
这些文件被重命名为"= _utf-8_B_Q29uc29saWRhdGVkIEludm9pY2VzIGZv.dat"而不是"1180426.pdf".
两个文件上的标题之后只是对我没有任何意义的字符行.
.dat文件的标头:file1
=?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
Run Code Online (Sandbox Code Playgroud)
文件2
=?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
Run Code Online (Sandbox Code Playgroud)
有没有人知道为什么会这样?
来自评论:
在文件名中打印出一个奇怪的Unicode字符而不是连字符:"......防水 - 环球城,......".可能是某人的邮件服务器对非ASCII字符敏感,并将其编码为base64.将其更改为常规ASCII连字符,它应该没问题.
我怎么找到它:
首先,这是我使用的在线base64解码器:http://www.opinionatedgeek.com/dotnet/tools/base64decode/
其次,我从头部连接所有base64字符串开始.它分为多个部分:对于第一个标题,有5个部分.段是问号之间的长部分.把它们放在一起,你得到:
Y2lCQmJIQm9ZU0JKYm5OMWJHRjBhVzl1Pz0NCiA9P3V0Zi04P0I/SUNZ
Z1YyRjBaWEp3Y205dlptbHVaeUF0SUVGc2NHaGhJRWx1YzNWc1lYUnBi
MjRnSmlCWFlYUmw/PQ0KID0/dXRmLTg/Qj9jbkJ5YjI5bWFXNW5JT0tB
a3lCVmJtbDJaWEp6WVd3Z1EybDBlU3dnS0RJd01USXRNRFF0TVRNcD89
DQogPT91dGYtOD9CP0xuQmtaZz09Pz0=
Run Code Online (Sandbox Code Playgroud)
把它放入解码器给出:
ciBBbHBoYSBJbnN1bGF0aW9u?=
=?utf-8?B?ICYgV2F0ZXJwcm9vZmluZyAtIEFscGhhIEluc3VsYXRpb24gJiBXYXRl?=
=?utf-8?B?cnByb29maW5nIOKAkyBVbml2ZXJzYWwgQ2l0eSwgKDIwMTItMDQtMTMp?=
=?utf-8?B?LnBkZg==?=
Run Code Online (Sandbox Code Playgroud)
另一组base64段.第一段看起来像它被切断了,所以我假设进入文件名的内容实际上是它的一部分.所以我先加上它并得到:
Q29uc29saWRhdGVkIEludm9pY2VzIGZvciBBbHBoYSBJbnN1bGF0aW9u
ICYgV2F0ZXJwcm9vZmluZyAtIEFscGhhIEluc3VsYXRpb24gJiBXYXRl
cnByb29maW5nIOKAkyBVbml2ZXJzYWwgQ2l0eSwgKDIwMTItMDQtMTMp
LnBkZg==
Run Code Online (Sandbox Code Playgroud)
将其放入解码器将使其吐出.bin文件,因为非ASCII字符.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
Run Code Online (Sandbox Code Playgroud)
em-dash像拇指一样伸出来.