1

我正在使用 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为 7bit 和 base64,没有工作。

我尝试将ContentMediaType附件设置为text/plain,没有用。

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

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

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

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

4

3 回答 3

2

好吧,那很奇怪。

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

一旦我们尝试了一些厚客户端,结果就很好。所有文件都可以正确下载,没有任何损坏。

所以我认为这是 gmail Web 界面中的一个错误(与 gmail POP3 界面相反)。

于 2008-12-11T14:43:56.393 回答
0

我很长时间没有使用 CDO,但我记得过去遇到过这个问题。通过尝试不同的方法,我们发现如果邮件正文中有任何内容,附件就会正确发送。

很奇怪,我知道。

试试看,让我们知道。

于 2008-12-11T14:20:36.190 回答
0

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

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

CDO.message:内容传输编码:quoted-printable

Jmail.message:内容传输编码:base64

于 2009-05-07T03:42:16.673 回答