我正在使用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()
,它会将有效文件保存在磁盘上。
这是我的代码中的问题,还是邮件服务器设置或什么?
答案 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