Последние три дня при слове "почта" громко матерюсь и скреплю зубами :)
Собственно, начну с начала.
Понадобилось мне по работе написать почтового бота, который бы получал почту, извлекал, сохранял и обрабатывал бы аттачменты и посылал бы клиентам нужные данные извлеченные из них.
Как-то пару лет назад я уже работал с почтой, но в тот раз я занимался отправкой писем. И было это все очень просто. Наивный я как обычно лезу в MSDN на предмет нахождения класса во фреймворке для работы с протоколом POP3...
Облом. Нету. И не было. Т.е. SMTP - есть, а POP3 - нету! Громко ругаюсь и лезу в гугловский поиск по исходникам. Нахожу несколько вариантов, но... все с разными глюками и на нужных мне письмах - падают. Наконец, после некоторого времени мучений и экспериментов я собираю из двух проектов более-менее рабочую конструкцию.
И все было-бы хорошо, пока я не попытался отправить письмо стандартными средствами фреймворка самому себе.
А теперь читаем внимательно: в письмах, которые я получал от разных источников все заголовки писались с
заглавной буквы (Причем так письма отсылало более десятка программ). Пиьмо, сформированное средствами фреймворка содержит заголовки, написанные
со строчной буквы.
Естественно, хлипкая конструкция для получения писем начала падать :( Путем целого дня отладки выяснилось, что научить ее корректно обрабатывать заголовки сообщения, написанные с маленькой буквы невозможно - фактически пришлось бы переписать 90% кода парсинга сообщений.
Сегодня опять полез в гугл - на этот раз нашел кое что более полезное проект
OpenPOP.Net. Удивительно, но он не упал ни на одном письме из почтового ящика, включая и подписанные сертификатами :)
P.S.: кстати, после формирования и отсылки письма, содержащего аттачмент средствами класса System.Net.Mail.SmtpClient необходимо вызвать метод MailMessage.Dispose (т.е. у переменной, в которой производилось формирование письма). В противном случае
файл-вложение окажется заблокирован на неопределенное время и его нельзя будет ни удалить ни перезаписать пока не отработает сборщик мусора или программа не завершится.