Разбор писем для вложений TIFF в C#

Я создал анализатор электронной почты, который извлекает вложения TIFF из электронных писем, отправленных двумя различными поставщиками факсов, RingCentral и eFax.

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

Преобразуя этот раздел текста в байтовый массив и используя BinaryWriterЯ могу создать файл TIFF на моем локальном жестком диске.

public void SaveToFile(string filepath)
{
    BinaryWriter bw = new BinaryWriter(new FileStream(filepath, FileMode.Create));

    bw.Write(this.Data);
    bw.Flush();
    bw.Close();
}

Проблема заключается в том, что вложения электронной почты eFax вызывают ошибки времени выполнения при преобразовании текста в байтовый массив.

//_data is a byte array
//RawData is a string
_data = Convert.FromBase64String(RawData);  //fails on this line

Я получаю следующую ошибку:

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

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

Некоторая дополнительная информация:

  • Язык программирования: C#
  • Почтовый хост: GMail
  • Если я вручную переслать письмо обратно себе, парсер будет работать, но не будет работать с оригиналом.
  • Я даже пробовал автоматическую пересылку в GMail, но это не сработало.

Я отвечаю здесь на первый комментарий ниже и спасибо за ваш ответ.

Файл TIFF создается путем извлечения фрагмента текста из электронного письма, связанного с вложением файла TIFF, преобразования его в байтовый массив и сохранения файла с .tiff расширение файла. Это прекрасно работает для всех электронных писем RingCentral. Например, заголовок раздела электронной почты RingCentral выглядит следующим образом:

------=_NextPart_3327195283162919167883
Content-Type: image/tiff; name="18307730038-0803-141603-326.tif"
Content-Transfer-Encoding: base64
Content-Description: 18307730038-0803-141603-326.tif
Content-Disposition: attachment; filename="18307730038-0803-141603-326.tif"

Обратите внимание на значение Content-Transfer-Encoding для base64. Это объясняет, почему я использую следующий код преобразования C#:

_data = Convert.FromBase64String(tiffEmailString);

_data является закрытой переменной и используется как возвращаемое значение в методе SaveToFile выше (т.е. _data возвращается, когда использовалось значение свойства this.Data).

Теперь для заголовка раздела eFax (электронная почта не удается):

Content-Type: image/tiff; name=FAX_20130802_1375447833_61.tif
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="FAX_20130802_1375447833_61.tif"
Content-MD5: 1B2M2Y8AsgTpgAmY7PhCfg==

Это тоже показывает base64. Так не должно Convert.FromBase64String() вызов метода работает?

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

Последнее обновление:

Как оказалось, проблема была не в кодировке, а в моем парсере! Я случайно включил дополнительное значение заголовка в текст вложения. Теперь это работает. Благодарю.

0 ответов

Другие вопросы по тегам