Сообщение CDO: текстовое вложение повреждено

Я создаю сообщение электронной почты, используя объект 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(), он сохранит действительный файл на диске.

Это проблема в моем коде, или это настройка почтового сервера или что-то в этом роде?


person GSerg    schedule 11.12.2008    source источник


Ответы (3)


Хорошо, это было странно.

Мы использовали наши учетные записи Gmail, чтобы протестировать эту штуку, точнее, веб-интерфейс Gmail. Мы щелкнули ссылки на вложения, чтобы сохранить восстановленные файлы. И файлы были повреждены.

Как только мы вместо этого попробовали несколько толстых клиентов, все оказалось в порядке. Все файлы загружаются правильно, без каких-либо повреждений.

Поэтому я предполагаю, что это ошибка в веб-интерфейсе gmail (в отличие от интерфейса Gmail POP3).

person GSerg    schedule 11.12.2008

Я не использовал CDO в течение длительного времени, но я помню, что эта проблема была в прошлом. Попробовав разные вещи, мы выяснили, что если в теле сообщения есть какой-либо контент, вложения отправляются правильно.

Странно, я знаю.

попробуйте и дайте нам знать.

person Victor    schedule 11.12.2008

У меня такая же беда. Я переключился на Jmail, и мой CSV (текстовый файл) теперь был точно таким же, как и оригинал, когда я читал его из gmail.

Я сравнил исходное сообщение (в Gmail, опция - просмотреть исходное сообщение) и обнаружил, что с CDO.Message вложение не очень хорошо кодируется, оно сохраняется в текстовом формате, и почтовый клиент делает с ним что хочет. В Jmail сообщение кодируется в Base64, поэтому оно сохраняется в исходном состоянии от начала до конца. Так что будьте осторожны при использовании CDO.Message с вложениями текстовых файлов! Попробуйте вместо этого использовать Jmail (бесплатно).

CDO.message: Content-Transfer-Encoding: кавычки-для печати

Jmail.message: Content-Transfer-Encoding: base64

person Community    schedule 07.05.2009