Разбор писем для вложений 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()
вызов метода работает?
Я также собираюсь проверить, захватывает ли мой анализатор дополнительный текст. Но если я что-то упустил, пожалуйста, укажите это. Благодарю.
Последнее обновление:
Как оказалось, проблема была не в кодировке, а в моем парсере! Я случайно включил дополнительное значение заголовка в текст вложения. Теперь это работает. Благодарю.