Как отличить "настоящее" вложение почты от картинки в html-почте?
Я возился с OpenPop, библиотекой, написанной на C# для получения почты POP3. Кажется, все работает хорошо, но я не совсем понял, как сделать разницу между явно прикрепленными файлами к почте и такими вещами, как изображения в письмах с HTML-контентом. Эта библиотека обрабатывает их все как "вложения". Для моих нужд я бы не рассматривал изображение в HTML-письме как вложение.
Из библиотеки документов:
MessagePart считается вложением, если
- он не содержит текст и не является сообщением MultiPart или
- у него есть заголовок Content-Disposition, который говорит, что это вложение
Что я должен делать или искать, по крайней мере, теоретически (потому что я не очень знаком с почтовыми протоколами)?
3 ответа
Вы можете проверить, есть ли ссылка на файл изображения в основном тексте письма. Вам нужно будет проанализировать HTML и искать такие теги, как img
или background-image
свойство в селекторе CSS. Если изображение не используется самим сообщением, считайте его "подлинным" вложением.
Я сделал это таким образом, и это похоже на работу:
foreach (OpenPop.Mime.MessagePart fileItem in elencoAtt)
{
System.Net.Mime.ContentDisposition cDisp = fileItem.ContentDisposition;
//Check for the attachment...
if (!cDisp.Inline)
{
// Attachment not in-line
}
else
{
// Attachment in-line
}
}
Я разработчик на OpenPop.NET.
Это лишь некоторая справочная информация о письмах, содержащих вложения. Ответ Тони Пони - путь.
У меня также была проблема отличия вложений от не вложений, когда я реализовывал эту часть OpenPop.NET. MIME имеет заголовок,Content-Disposition
который может сказать, является ли определенная часть вложением или нет.
Например, вот вложение
Content-Disposition: attachment
и здесь может быть изображение в HTML-части электронной почты
Content-Disposition: inline
Как это ни странно, проблема в том, что многие почтовые клиенты не добавляют эти заголовки, что затрудняет работу таких читателей, как OpenPop.NET. Мы решили не просматривать все HTML-части электронного письма, чтобы увидеть, к каким изображениям обращаются, и поэтому теперь это зависит от пользователя библиотеки.
Если вы разрабатываете хорошее решение проблемы, его можно добавить в качестве примера для проекта.