7

我有一个系统,它是一个内部解决方案,试图通过电子邮件将发票发送给客户。这个系统工作得很好,除了一个客户得到 .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

文件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

有谁知道为什么会这样?

4

3 回答 3

6

从评论:

在文件名中打印了一个奇怪的 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==

由于非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

破折号像拇指一样突出。

于 2012-04-26T17:53:32.300 回答
2

我认为@Jeff E 做对了:文件名中有一个非 ASCII 字符,这会导致一端或另一端出现问题。当您手动通过电子邮件发送文件时,我的猜测是邮件客户端将 em-dash 替换为常规连字符或其他字符(例如_)。如果您将“防水 - 环球城”中的破折号更改为“-”,我认为这应该可以。

(如果是这样,代表应该去找 Jeff,因为他发现了 unicode。)

于 2012-04-26T08:42:28.747 回答
0

当您的系统将 PDF 附加到电子邮件消息时,您是否设置了 MIME 类型?如果是这样,你在用什么?这是在黑暗中的一个镜头,但您的系统可能没有正确使用应用程序/pdf,并且所涉及的邮件服务器和客户端的某些组合变得混乱并通过将其更改为 .dat 来响应。

于 2012-04-25T21:04:07.353 回答