CDO消息:文本附件损坏

时间:2008-12-11 14:05:33

标签: email attachment cdo.message

我正在使用CDO对象(和VB6创建一个电子邮件消息,但这并不重要)。

With New CDO.Message
  .To = "<address>"
  .Subject = "Manifest test 8"
  .Organization = "<company>"
  .From = "<address>"
  .Sender = .From

  With .Configuration
    .Fields(cdoSendUsingMethod).Value = cdoSendUsingPort
    .Fields(cdoSMTPServer).Value = "192.168.0.4"
    .Fields.Update
  End With

  With .AddAttachment("c:\import\customermanifestOURACCOUNT11122008110032.dat")
    .Fields(cdoContentDisposition).Value = "attachment; filename=""Consignor.dat"""
    .Fields.Update
  End With

  .Send
End With

如您所见,邮件为空,并包含我在电子邮件中重命名的附件。

附件是一个固定宽度的ASCII文本文件,它包含我们系统的一些输出,每行一个记录,用CRLF分隔。

当邮件被发送时,所有CR都被剥离了附件,因此接收者获得的文件只有LF并因此被破坏。

我尝试将ContentEncoding更改为7位和base64,但无效。

我尝试将ContentMediaType设为附件text/plain,但无效。

我尝试在添加后重命名附件,但没有用。

默认情况下,附件的ContentMediaType设置为application/octet-stream,因此我无法弄清楚为什么(以及什么)它首先被更改。

如果我在.SaveToFile()之后立即对附件执行.Send(),它会将有效文件保存在磁盘上。

这是我的代码中的问题,还是邮件服务器设置或什么?

3 个答案:

答案 0 :(得分:2)

好的,这很奇怪。

我们使用我们的gmail帐户来测试那个东西,更具体地说是gmail web界面。我们点击了附件链接以保存文件。文件已损坏。

一旦我们尝试了一些厚客户端,结果就没问题了。所有文件都可以正常下载而不会有任何损坏。

所以我认为这是gmail web界面中的一个错误(而不是gmail POP3界面)。

答案 1 :(得分:0)

我很久没有使用过CDO,但我记得过去曾经有过这个问题。通过尝试不同的事情,我们认为如果邮件正文中有任何内容,附件就会被正确发送。

很奇怪,我知道。

尝试并告诉我们。

答案 2 :(得分:0)

我遇到了同样的麻烦。当我从gmail读取它时,我切换到Jmail,我的CSV(文本文件)现在与原始文件完全一样。

我比较了原始邮件(在Gmail中,选项 - 查看原始邮件)并发现使用CDO.Message时,附件编码不是很好,它以文本格式保存,邮件客户端执行他想要的操作它。使用Jmail,消息在Base64中编码,因此从开始到结束保持其原始状态。因此,在使用带有文本文件附件的CDO.Message时要小心!请尝试使用Jmail(免费)。

CDO.message:Content-Transfer-Encoding:quoted-printable

Jmail.message:Content-Transfer-Encoding:base64