В моем приложении я составляю сообщение электронной почты HMTL с расширением 3.0+ MFMailComposeViewController
. Для этого я создал файл HTML с некоторыми заполнителями. В своем коде я читаю файл HTML и с помощью replaceOccurrencesOfString
заменяю заполнители данными из приложения. Таким образом я составляю тело письма, которое хочу отправить. Все это работает очень хорошо, за исключением того факта, что в моем файле HTML у меня есть тег <img src='imageplaceholderpath' />
. Почему-то я не могу понять, чем я должен заменить этот imageplaceholderpath
, чтобы сослаться на изображение, которое находится в моем приложении. Является ли это допустимым подходом, и если да, то каков синтаксис/логика пути, который я должен указать? Я ценю ваши идеи! С уважением Sjakelien
Отображение локального изображения в HTML-почте iPhone
Ответы (5)
К сожалению, это не поддерживается API iPhone 3.x.
Для этого потребуется Content-ID: быть частью вложенной части, но это не так.
- (void)addAttachmentData:(NSData*)attachment mimeType:(NSString*)mimeType fileName:(NSString*)filename
Обратите внимание, что использование data:
URI не будет работать во всех почтовых клиентах. Те, которые используют IE в качестве механизма рендеринга, вообще не поддерживают его, если не установлен IE8, и даже в этом случае Согласно Википедии, data:
URI ограничены максимальным размером 32 КБ.
Самый простой способ заставить это работать — поместить изображение куда-нибудь на свой собственный сервер и сослаться на него, используя полный URI http://. Если вы не можете сделать это по какой-либо причине (возможно, изображение создается как часть использования вашего приложения), вы можете попробовать прикрепить изображение как часть MIME и сослаться на него из HTML.
Мой почтовый клиент не загружает удаленные изображения автоматически, но в некоторых спамах все еще есть изображения, когда я их открываю. Вот как это работает:
Прикрепите изображение к письму, как предложил yonel. Каким-то образом вам также нужно добавить заголовок Content-ID:
в подраздел. Содержимое этого заголовка затем используется в качестве атрибута src
вашего изображения. Мое спам-сообщение выглядит так в HTML:
<img src="cid:[email protected]">
Вложенная часть выглядит так:
Content-Type: image/jpeg;
name="image001.jpg"
Content-Transfer-Encoding: base64
Content-ID: <[email protected]>
Глядя на документацию для addAttachmentData:mimeType:fileName:
, я предполагаю, что вы не сможете заставить это работать, и вам придется рассмотреть возможность отправки электронной почты с использованием необработанного SMTP.
Я нашел этот пост, который отвечает на большинство моих вопросов: http://www.iphonedevsdk.com/forum/iphone-sdk-development/25021-embedding-image-email-body.html.
Я не думаю, что вы можете вставлять изображения как часть электронной почты, как это делает обычный почтовый клиент. Однако кажется, что вы можете включить данные изображения непосредственно в HTML как данные в кодировке base64. Это довольно нестандартный способ ведения дел, поэтому электронная почта может отображаться не во всех почтовых клиентах.
См. этот вопрос для получения дополнительной информации и примера кода на эта запись на форуме
Я не знаю, является ли формат HTML обязательным для вас, но на самом деле встроить изображение в электронное письмо можно без использования HTML, просто с изображением в качестве вложения .
Просто посмотрите, как это достигается здесь:
http://iphone-dev-tips.alterplay.com/2009/11/attaching-image-of-uiview-to-email.html
главное вот это:
// ATTACHING A SCREENSHOT
NSData *myData = UIImagePNGRepresentation(screenshot);
[controller addAttachmentData:myData mimeType:@"image/png" fileName:@"route"];
Вы получаете PNG-представление вашего UIImage
(как NSData
) и прикрепляете его к своему электронному письму.