Так что я пытался 2 различные подходы к созданию встроенного изображения с помощью C#:Создать инлайн изображение, которое отображается правильно в IOS почты приложение
- с использованием AlternateView
- с использованием inline Attachement
вариант 2 хуже в том, что он не отображается в строке на одном из моих тестовых клиентов (Outlook 2010/2013, клиент электронной почты Samsung android, клиент электронной почты ios 10).
Вариант 1 почти идеальный, все клиенты правильно отображают встроенное изображение, пока нет других вложений. Однако, если вы добавите вложение файла к электронной почте, только в приложении электронной почты iOS вы получите странный побочный эффект. В iOS клиент отображает как встроенное изображение, так и вложение в виде вложений (встроенное изображение отображается как значок).
Я попытался понять это, написав электронное письмо в Outlook со встроенным изображением и вложением. Outlook генерирует то, что выглядит как два регулярных вложения (смотря на данные необработанных сообщений как с Outlook, так и сгенерированных электронной почты dotNet), причем изображение помечено как встроенное содержимое. И это работает на всех моих тестовых клиентах. За исключением случаев использования сообщения .Net Mail api для его тиражирования (вариант 2), он не работает. Я затрудняюсь понять, что здесь происходит.
Edit 1
Что интересно, что при использовании варианта 2, тело электронной почты доставляются кодируются как base64. Это отличается от того, как это делает клиент Outlook. Там тело находится в текстовом виде, а встроенное изображение привязки - единственное, что закодировано в bas64.
Edit 2 Установка следующих свойств при использовании Вариант 2 возвращает тело, чтобы быть простой текст снова:
mail.BodyEncoding = Encoding.UTF8;
mail.BodyTransferEncoding = TransferEncoding.QuotedPrintable;