Comment append un UIImage dans la feuille MailComposer de MFMailComposeViewController

Je veux insert un UIImage s à l'intérieur de la feuille de composition d'un MFMailComposerViewController .

S'il vous plaît noter que je ne veux pas les joindre, mais je veux les placer dans une table en utilisant le code HTML qui sera la partie du corps de l'e-mail.

Retour à nouveau avec une nouvelle réponse. Je laisse toujours mon code précédent, car je ne suis toujours pas convaincu qu'il n'y a pas moyen de l'utiliser. Je vais le garder moi-même. Le code suivant fonctionne. Mustafa suggère base64 codant les images, et dit qu'ils fonctionnent seulement Apple à Apple, mais ce n'est pas vrai. L'enencoding Base64 fonctionne maintenant avec la plupart des clients de messagerie (IE ne le supportait pas auparavant, mais maintenant il est supporté pour les images jusqu'à une certaine taille, bien que je ne sois pas exactement de la taille). Le problème est que les clients de messagerie tels que Gmail suppriment vos données d'image, mais il existe une solution simple pour cela … il suffit de placer les balises <b> and </b> sur votre <img ...> faire pour l'empêcher de se faire enlever. Afin d'get une image dans votre email, vous avez besoin d'un encodeur base64 dans votre projet. Il y en a plusieurs là-bas (surtout C si), mais le plus simple ObjC que j'ai trouvé s'appelait NSData + Base64 de Matt Gallagher (j'ai sorti le "+" du nom après l'avoir copié parce qu'il me donnait des problèmes). Copiez les files .h et .m dans votre projet et assurez-vous d'importer le file .h à l'endroit où vous prévoyez de l'utiliser. Ensuite, le code comme ceci va get une image dans le corps de votre e-mail …

 - (void)createEmail { //Create a ssortingng with HTML formatting for the email body NSMutableSsortingng *emailBody = [[[NSMutableSsortingng alloc] initWithSsortingng:@"<html><body>"] retain]; //Add some text to it however you want [emailBody appendSsortingng:@"<p>Some email body text can go here</p>"]; //Pick an image to insert //This example would come from the main bundle, but your source can be elsewhere UIImage *emailImage = [UIImage imageNamed:@"myImageName.png"]; //Convert the image into data NSData *imageData = [NSData dataWithData:UIImagePNGRepresentation(emailImage)]; //Create a base64 ssortingng representation of the data using NSData+Base64 NSSsortingng *base64Ssortingng = [imageData base64EncodedSsortingng]; //Add the encoded ssortingng to the emailBody ssortingng //Don't forget the "<b>" tags are required, the "<p>" tags are optional [emailBody appendSsortingng:[NSSsortingng ssortingngWithFormat:@"<p><b><img src='data:image/png;base64,%@'></b></p>",base64Ssortingng]]; //You could repeat here with more text or images, otherwise //close the HTML formatting [emailBody appendSsortingng:@"</body></html>"]; NSLog(@"%@",emailBody); //Create the mail composer window MFMailComposeViewController *emailDialog = [[MFMailComposeViewController alloc] init]; emailDialog.mailComposeDelegate = self; [emailDialog setSubject:@"My Inline Image Document"]; [emailDialog setMessageBody:emailBody isHTML:YES]; [self presentModalViewController:emailDialog animated:YES]; [emailDialog release]; [emailBody release]; } 

Je l'ai testé sur l'iPhone et j'ai envoyé de jolis e-mails embarqués sur Yahoo, mon site personnel et mon MobileMe. Je n'ai pas de count Gmail, mais Yahoo a parfaitement fonctionné, et toutes les sources que j'ai trouvées indiquent que les tags en gras sont tout ce dont vous avez besoin pour le faire fonctionner. J'espère que cela aide tout le monde!

Il y a deux façons de le faire, selon l'endroit où les images sont stockées:

Si les images sont sur un server, il suffit d'inclure des balises HTML <img> avec l'URL source définie pour l'image distante. L'user visualise le message pendant la composition et le récepteur le voit lorsqu'il ouvre le message (sauf s'il a désactivé le chargement de l'image par défaut).

Si les images sont sur le téléphone, vous pouvez les inclure en tant qu'images en ligne. Il y a deux étapes à cela. Vous devez d'abord attacher toutes les images que vous souhaitez utiliser en tant que pièces jointes MIME en plusieurs parties et un «ID de contenu» (aka cid ), un nom de file et Content-Disposition doivent être atsortingbués à inline . Dans votre corps de message HTML, vous pouvez les referencer comme suit:

 <img src="cid:{messageid}/image.png" alt="My image" /> 

La mauvaise nouvelle est que le mécanisme de composition de courrier iPhone standard ne permet pas d'append ces données supplémentaires aux pièces jointes. La deuxième chose est de marquer l'email comme ayant un type de contenu MIME "alternatif". Encore une fois, le compositeur de courrier ne vous laisse pas faire cela.

Pour contourner ce problème, composez le message vous-même, puis envoyez-le directement au server de messagerie via SMTP, ou requestz à un server proxy de le faire via un relais SMTP. Si vous décidez d'aller de cette façon, vous voudrez peut-être vérifier skpsmtpmessage sur Google code ou un service comme AuthSMTP .

Cependant, une fois que l'user reçoit ce message, il voit un message HTML autonome contenant toutes les images en ligne. Mais c'est beaucoup de tracas à mettre en place. La première méthode (mettre des images sur le server) est de loin la plus facile à faire.

Pour iOS 3.0 et versions ultérieures, veuillez voir ceci: Attacher une image à un email?

Exemple:

 UIImage * image = [UIImage imageWithContentsOfFile:imagePath]; [composer addAttachmentData:UIImageJPEGRepresentation(itemImage, 1) mimeType:@"image/jpeg" fileName:@"MyFile.jpeg"]; 

Peut-être que cela fonctionnera pour vous:

Comment intégrer UIImage dans un corps de message Mail Composer

Voici ce qu'il dit:

Fondamentalement, vous convertissez votre image en base64 (les bases64 jointes ci-dessous doivent être raccourcis cause de la limite de longueur du message, donc ce n'est pas une image valide) string et incorporer dans la balise image. Je me souviens d'avoir arrêté de travailler parce que les images embeddedes ne sont visibles que de l'iPhone vers un autre iPhone, je me souviens de l'avoir testé avec Gmail, notre travail client Outlook sans chance affiche l'image, quand je regarde la source y a-t-il. Donc, je ne pense pas que ce soit un problème de filter de spam, mais les clients de messagerie sont plus intelligents. Pendant que je faisais des searchs sur ce sujet, j'ai découvert que c'est le nombre de spammeurs qui envoient des e-mails avec des informations sur les images, donc ça passe le filter anti-spam. Merde les spammeurs, j'allais l'utiliser pour la bonne cause mais puisque c'était à peu près inutile quand j'ai découvert que la plupart des clients de messagerie n'afficheront pas l'image. Pour ce que ça vaut, voici le code.

 NSSsortingng *eMailBody = @"<html>Just convert your image file to base64 to embed into the email<img src="data:image/gif;base64,R0lGODlhFAFuAPcAAPf39//7/+fn59bT1u/r787Lzq0UAN7b3hhFrRhJtRA0hBA8lMYYALWytffz94wQAMa+vb26vRhNxufj5+/v78bDxvfz772+vcbHxghRCM7PzggkYyFZ1tYkCNbX1hhRzpyenO+6AN7f3gBlANauAGOW7zFl1kp95wg8pbW2tZyanHOi797f5zlx3msMAAB9CP/PAL22va2mraWipedJMSlRtf91Y72WAFqK76WmpRBFta2qrcaeAK2urfdpUuc8If39/e9ZQmPTY94wGFrLWrUkEISq9/n5+ZR5ABCWGLWOAIRpAGNRAClJlK2GAL0sGGssITG2OaWCAK3H9848KaW+762qpcbX/73jvWN5pGvTc/eGc//vCFppfIwgEJRBMYSGlPeWhJSSjHN5jMaSjKWmrb3P787V1ilBa4R9c9nXy+rq6ntNQu/y95Su3svO1kphlISa1t7b1vf7/3uGraWGexdAmoySlDm6QrWyraWqrRiiIWtpa0LDStrl/1JtrcbHzpxlWntlUklVcztZk3vbhISStfffWufr786upVmB1ta2taW21tLS0ve6rd7j5zlhtfemnJSetefn78LCw7W2vdnZ2bVFMf/3//f3/8Z1a9bb59bb3eHh4a2WjM7HxoR1OSGqKbW6xvT09JyGQrXD3v/r5+fk3s7rzufb3q2ytffXKbWiY6inp1p1WrWmjP/LxnOOzsC/v+/n56qSMffXzr2eEP/3hPHx8f//987T57m4ubVZShk5f97LjO/HKQ03ks7DpdZlWv/vMd7LxqWuvefr/86uKd66QgwyhcnJyf/ztbKxsrWqpe/37//z7///75zTpf/397Szsvfn1ozLjO/jlN7v3qWko62OEO/r5//73tbX3vf37wotd1qqYxlNvYyujN7X1qKgoHuWe5KUmkKOQhZKvildMRh5IZqZmcXEwZ2amaajoNfU0QMaTAsiV5STlSo+bZibpSti2puZl5u28pGs5pqbn9Hd8/fr94WFi7i1sBguYfP09v///ywAAAAAFAFuAAAI/wD/CRxIsKDBgwgTKlzIsKHDhxAjSpxIsaLFixgzatzIsaPHjyBDihxJsqTJkyhTqlzJsqXLlzBjypxJs6bNmzhz6tzJs6fPn0CDCh1KtKjRo0iDYinEtJAWLUSIfJv6DVFShnOMXTEzpYrXKlPMXDGW6apZhli0CHmqtk+oJC9ejDDH6azBTGaMKDLBQUKCvzoC/5XAwcSJElV0UbB71lk0PFH6CGmqxS3cuZgyAwhw1tiUEiY+CEZBunTpwR9SfyisiNGmzYyNYqlWLZrtak6JRLmcoQKBCQQswEZ6ZcUJDn0RoFiwoAkhOH/+wCHURDkKHRIII0e+uoWbSbGRYv/SFy0qnj1yM6ArUEDDAQEOOBu9UqIF3xrMCWWRBGiAnP8eqKEBBpVIkgUhyg22nWocxKJLeEMBYIEAqVSD"></html>"; NSSsortingng *encodedBody = [eMailBody ssortingngByAddingPercentEscapesUsingEncoding:NSUTF8SsortingngEncoding]; NSSsortingng *urlSsortingng = [NSSsortingng ssortingngWithFormat:@"mailto:[email protected]?subject=ImageTest&body=%@", encodedBody]; NSURL *url = [[NSURL alloc] initWithSsortingng:urlSsortingng]; [[UIApplication sharedApplication] openURL:url]; Il NSSsortingng *eMailBody = @"<html>Just convert your image file to base64 to embed into the email<img src="data:image/gif;base64,R0lGODlhFAFuAPcAAPf39//7/+fn59bT1u/r787Lzq0UAN7b3hhFrRhJtRA0hBA8lMYYALWytffz94wQAMa+vb26vRhNxufj5+/v78bDxvfz772+vcbHxghRCM7PzggkYyFZ1tYkCNbX1hhRzpyenO+6AN7f3gBlANauAGOW7zFl1kp95wg8pbW2tZyanHOi797f5zlx3msMAAB9CP/PAL22va2mraWipedJMSlRtf91Y72WAFqK76WmpRBFta2qrcaeAK2urfdpUuc8If39/e9ZQmPTY94wGFrLWrUkEISq9/n5+ZR5ABCWGLWOAIRpAGNRAClJlK2GAL0sGGssITG2OaWCAK3H9848KaW+762qpcbX/73jvWN5pGvTc/eGc//vCFppfIwgEJRBMYSGlPeWhJSSjHN5jMaSjKWmrb3P787V1ilBa4R9c9nXy+rq6ntNQu/y95Su3svO1kphlISa1t7b1vf7/3uGraWGexdAmoySlDm6QrWyraWqrRiiIWtpa0LDStrl/1JtrcbHzpxlWntlUklVcztZk3vbhISStfffWufr786upVmB1ta2taW21tLS0ve6rd7j5zlhtfemnJSetefn78LCw7W2vdnZ2bVFMf/3//f3/8Z1a9bb59bb3eHh4a2WjM7HxoR1OSGqKbW6xvT09JyGQrXD3v/r5+fk3s7rzufb3q2ytffXKbWiY6inp1p1WrWmjP/LxnOOzsC/v+/n56qSMffXzr2eEP/3hPHx8f//987T57m4ubVZShk5f97LjO/HKQ03ks7DpdZlWv/vMd7LxqWuvefr/86uKd66QgwyhcnJyf/ztbKxsrWqpe/37//z7///75zTpf/397Szsvfn1ozLjO/jlN7v3qWko62OEO/r5//73tbX3vf37wotd1qqYxlNvYyujN7X1qKgoHuWe5KUmkKOQhZKvildMRh5IZqZmcXEwZ2amaajoNfU0QMaTAsiV5STlSo+bZibpSti2puZl5u28pGs5pqbn9Hd8/fr94WFi7i1sBguYfP09v///ywAAAAAFAFuAAAI/wD/CRxIsKDBgwgTKlzIsKHDhxAjSpxIsaLFixgzatzIsaPHjyBDihxJsqTJkyhTqlzJsqXLlzBjypxJs6bNmzhz6tzJs6fPn0CDCh1KtKjRo0iDYinEtJAWLUSIfJv6DVFShnOMXTEzpYrXKlPMXDGW6apZhli0CHmqtk+oJC9ejDDH6azBTGaMKDLBQUKCvzoC/5XAwcSJElV0UbB71lk0PFH6CGmqxS3cuZgyAwhw1tiUEiY+CEZBunTpwR9SfyisiNGmzYyNYqlWLZrtak6JRLmcoQKBCQQswEZ6ZcUJDn0RoFiwoAkhOH/+wCHURDkKHRIII0e+uoWbSbGRYv/SFy0qnj1yM6ArUEDDAQEOOBu9UqIF3xrMCWWRBGiAnP8eqKEBBpVIkgUhyg22nWocxKJLeEMBYIEAqVSD"></html>"; NSSsortingng *encodedBody = [eMailBody ssortingngByAddingPercentEscapesUsingEncoding:NSUTF8SsortingngEncoding]; NSSsortingng *urlSsortingng = [NSSsortingng ssortingngWithFormat:@"mailto:[email protected]?subject=ImageTest&body=%@", encodedBody]; NSURL *url = [[NSURL alloc] initWithSsortingng:urlSsortingng]; [[UIApplication sharedApplication] openURL:url]; de NSSsortingng *eMailBody = @"<html>Just convert your image file to base64 to embed into the email<img src="data:image/gif;base64,R0lGODlhFAFuAPcAAPf39//7/+fn59bT1u/r787Lzq0UAN7b3hhFrRhJtRA0hBA8lMYYALWytffz94wQAMa+vb26vRhNxufj5+/v78bDxvfz772+vcbHxghRCM7PzggkYyFZ1tYkCNbX1hhRzpyenO+6AN7f3gBlANauAGOW7zFl1kp95wg8pbW2tZyanHOi797f5zlx3msMAAB9CP/PAL22va2mraWipedJMSlRtf91Y72WAFqK76WmpRBFta2qrcaeAK2urfdpUuc8If39/e9ZQmPTY94wGFrLWrUkEISq9/n5+ZR5ABCWGLWOAIRpAGNRAClJlK2GAL0sGGssITG2OaWCAK3H9848KaW+762qpcbX/73jvWN5pGvTc/eGc//vCFppfIwgEJRBMYSGlPeWhJSSjHN5jMaSjKWmrb3P787V1ilBa4R9c9nXy+rq6ntNQu/y95Su3svO1kphlISa1t7b1vf7/3uGraWGexdAmoySlDm6QrWyraWqrRiiIWtpa0LDStrl/1JtrcbHzpxlWntlUklVcztZk3vbhISStfffWufr786upVmB1ta2taW21tLS0ve6rd7j5zlhtfemnJSetefn78LCw7W2vdnZ2bVFMf/3//f3/8Z1a9bb59bb3eHh4a2WjM7HxoR1OSGqKbW6xvT09JyGQrXD3v/r5+fk3s7rzufb3q2ytffXKbWiY6inp1p1WrWmjP/LxnOOzsC/v+/n56qSMffXzr2eEP/3hPHx8f//987T57m4ubVZShk5f97LjO/HKQ03ks7DpdZlWv/vMd7LxqWuvefr/86uKd66QgwyhcnJyf/ztbKxsrWqpe/37//z7///75zTpf/397Szsvfn1ozLjO/jlN7v3qWko62OEO/r5//73tbX3vf37wotd1qqYxlNvYyujN7X1qKgoHuWe5KUmkKOQhZKvildMRh5IZqZmcXEwZ2amaajoNfU0QMaTAsiV5STlSo+bZibpSti2puZl5u28pGs5pqbn9Hd8/fr94WFi7i1sBguYfP09v///ywAAAAAFAFuAAAI/wD/CRxIsKDBgwgTKlzIsKHDhxAjSpxIsaLFixgzatzIsaPHjyBDihxJsqTJkyhTqlzJsqXLlzBjypxJs6bNmzhz6tzJs6fPn0CDCh1KtKjRo0iDYinEtJAWLUSIfJv6DVFShnOMXTEzpYrXKlPMXDGW6apZhli0CHmqtk+oJC9ejDDH6azBTGaMKDLBQUKCvzoC/5XAwcSJElV0UbB71lk0PFH6CGmqxS3cuZgyAwhw1tiUEiY+CEZBunTpwR9SfyisiNGmzYyNYqlWLZrtak6JRLmcoQKBCQQswEZ6ZcUJDn0RoFiwoAkhOH/+wCHURDkKHRIII0e+uoWbSbGRYv/SFy0qnj1yM6ArUEDDAQEOOBu9UqIF3xrMCWWRBGiAnP8eqKEBBpVIkgUhyg22nWocxKJLeEMBYIEAqVSD"></html>"; NSSsortingng *encodedBody = [eMailBody ssortingngByAddingPercentEscapesUsingEncoding:NSUTF8SsortingngEncoding]; NSSsortingng *urlSsortingng = [NSSsortingng ssortingngWithFormat:@"mailto:[email protected]?subject=ImageTest&body=%@", encodedBody]; NSURL *url = [[NSURL alloc] initWithSsortingng:urlSsortingng]; [[UIApplication sharedApplication] openURL:url]; - NSSsortingng *eMailBody = @"<html>Just convert your image file to base64 to embed into the email<img src="data:image/gif;base64,R0lGODlhFAFuAPcAAPf39//7/+fn59bT1u/r787Lzq0UAN7b3hhFrRhJtRA0hBA8lMYYALWytffz94wQAMa+vb26vRhNxufj5+/v78bDxvfz772+vcbHxghRCM7PzggkYyFZ1tYkCNbX1hhRzpyenO+6AN7f3gBlANauAGOW7zFl1kp95wg8pbW2tZyanHOi797f5zlx3msMAAB9CP/PAL22va2mraWipedJMSlRtf91Y72WAFqK76WmpRBFta2qrcaeAK2urfdpUuc8If39/e9ZQmPTY94wGFrLWrUkEISq9/n5+ZR5ABCWGLWOAIRpAGNRAClJlK2GAL0sGGssITG2OaWCAK3H9848KaW+762qpcbX/73jvWN5pGvTc/eGc//vCFppfIwgEJRBMYSGlPeWhJSSjHN5jMaSjKWmrb3P787V1ilBa4R9c9nXy+rq6ntNQu/y95Su3svO1kphlISa1t7b1vf7/3uGraWGexdAmoySlDm6QrWyraWqrRiiIWtpa0LDStrl/1JtrcbHzpxlWntlUklVcztZk3vbhISStfffWufr786upVmB1ta2taW21tLS0ve6rd7j5zlhtfemnJSetefn78LCw7W2vdnZ2bVFMf/3//f3/8Z1a9bb59bb3eHh4a2WjM7HxoR1OSGqKbW6xvT09JyGQrXD3v/r5+fk3s7rzufb3q2ytffXKbWiY6inp1p1WrWmjP/LxnOOzsC/v+/n56qSMffXzr2eEP/3hPHx8f//987T57m4ubVZShk5f97LjO/HKQ03ks7DpdZlWv/vMd7LxqWuvefr/86uKd66QgwyhcnJyf/ztbKxsrWqpe/37//z7///75zTpf/397Szsvfn1ozLjO/jlN7v3qWko62OEO/r5//73tbX3vf37wotd1qqYxlNvYyujN7X1qKgoHuWe5KUmkKOQhZKvildMRh5IZqZmcXEwZ2amaajoNfU0QMaTAsiV5STlSo+bZibpSti2puZl5u28pGs5pqbn9Hd8/fr94WFi7i1sBguYfP09v///ywAAAAAFAFuAAAI/wD/CRxIsKDBgwgTKlzIsKHDhxAjSpxIsaLFixgzatzIsaPHjyBDihxJsqTJkyhTqlzJsqXLlzBjypxJs6bNmzhz6tzJs6fPn0CDCh1KtKjRo0iDYinEtJAWLUSIfJv6DVFShnOMXTEzpYrXKlPMXDGW6apZhli0CHmqtk+oJC9ejDDH6azBTGaMKDLBQUKCvzoC/5XAwcSJElV0UbB71lk0PFH6CGmqxS3cuZgyAwhw1tiUEiY+CEZBunTpwR9SfyisiNGmzYyNYqlWLZrtak6JRLmcoQKBCQQswEZ6ZcUJDn0RoFiwoAkhOH/+wCHURDkKHRIII0e+uoWbSbGRYv/SFy0qnj1yM6ArUEDDAQEOOBu9UqIF3xrMCWWRBGiAnP8eqKEBBpVIkgUhyg22nWocxKJLeEMBYIEAqVSD"></html>"; NSSsortingng *encodedBody = [eMailBody ssortingngByAddingPercentEscapesUsingEncoding:NSUTF8SsortingngEncoding]; NSSsortingng *urlSsortingng = [NSSsortingng ssortingngWithFormat:@"mailto:[email protected]?subject=ImageTest&body=%@", encodedBody]; NSURL *url = [[NSURL alloc] initWithSsortingng:urlSsortingng]; [[UIApplication sharedApplication] openURL:url]; 

(Malheureusement, la méthode suivante ne fonctionne pas, mais je quitte ce post parce que l'exemple de string de conversion de path d'URL de l'image est vraiment utile pour les autres cas où vous avez besoin de paths de file HTML dans votre code. fonctionne.)

J'ai moi-même rencontré ce problème et j'ai trouvé un moyen qui fonctionne. Vous pouvez get les images à apparaître en ligne en utilisant le path d'access complet à l'image.

Cela nécessite une petite conversion de votre part, mais utilisez les methods habituelles pour get les directorys de votre application (NSSsortingng *path = [[NSBundle mainBundle] resourcePath], etc...) , puis convertissez la string en une URL littérale. Par exemple, la string "path" renvoyée ci-dessus contiendra quelque chose comme "/ Users / Me / Bibliothèque / Application Support / iPhone Simulator / 3.2 / Applications / 25ADA98D-8DF4-4344-8B78-C18BC757EBDC / MyEmailingApplication.app" .

Vous devrez faire cette string dans

" file: /// Users // Me // Bibliothèque // Application% 20Support // iPhone% 20 Simulator // 3.2 // Applications // 25ADA98D-8DF4-4344-8B78-C18BC757EBDC // MyEmailingApplication.app //"

et puis vous pouvez append vos noms de files d'image à la fin. (cet exemple pointe vers les ressources de l'application, mais il en va de même pour les directorys tmp et documents).

Vous pouvez faire cette conversion de string avec une combinaison de [NSSsortingng ssortingngWithFormat:@"file:///%@//%@",path,myImageName]

après avoir utilisé [path ssortingngByReplacingOccurencesOfSsortingng:@"/" withSsortingng:@"//"]

pour corriger les barres obliques dans "path", et

[path ssortingngByReplacingOccurencesOfSsortingng:@" " withSsortingng:@"%20"]

rendre les espaces HTML conviviaux. Vous pouvez maintenant utiliser cette URL littérale dans votre corps de message HTML, comme img src = \ "", pathToMyImage, "\"

L'exemple ressemble à beaucoup de travail, mais en fait une fois que vous l'avez installé, ce n'est pas dur du tout, et ça fonctionne comme un charme 🙂 Bonne chance!

J'ai essayé la réponse de Mike fonctionne parfaitement dans le MFMailComposerViewController , mais malheureusement pas avec la plupart des clients de courriels. Comme j'ai vraiment besoin d'envoyer du contenu d'email avec UIImage embarqué , voici ce que j'ai fait:

  1. J'ai gardé le code de réponse de Mike pour générer ma page HTML avec UIImage
  2. J'ai créé un UIWebView présentant cette page, avec [yourwebview loadHTMLSsortingng:@"yourHTMLSsortingng" baseURL:nil]
  3. IMPORTANT: Je l'affiche dans un UIViewController comme une page de prévisualisation pour l'user
  4. Ensuite, je génère un PDF à partir de cette UIWebView , grâce à la méthode d' AnderCover
  5. Enfin, j'ajoute le PDF créé en [mailComposerController addAttachmentData:yourPDFFileAsNSData mimeType:@"application/pdf" fileName:@"yourFileName.pdf"] à l'email avec [mailComposerController addAttachmentData:yourPDFFileAsNSData mimeType:@"application/pdf" fileName:@"yourFileName.pdf"]

Ok, ne me blâmez pas, je sais qu'il y a beaucoup de conversions et d'actions pour append juste quelques images, mais votre structure de courriel HTML rest la même avec les images embeddedes , et l'user final ne recevra qu'une seule bonne pièce jointe .
La partie "sale" est que le contenu PDF est en réalité des captures d'écran de la webview … Pas vraiment réutilisable.

EDIT: Ce que vous êtes sur le sharepoint lire NE FONCTIONNE PAS (encore)! Vérifiez mon autre post sur Base64 Enencoding de votre image qui fonctionne.

Celui-ci semble très bien dans la window de composition d'e-mail, mais l'e-mail envoyé ne comprend pas les photos (je viens de le tester sur mon téléphone). J'ai pensé à tort que l'application mail encoderait base64 les images elle-même (c'est le cas pour les images jointes). Et, bien que ce soit pénible, vous pouvez get un e-mail sur l'iPhone pour insert plusieurs images en ligne «castings» en allant dans votre dossier image, en copiant une image dans le presse-papiers, en allant à votre email et en la collant où vous voulez. Vous pouvez écrire plus de text, save l'e-mail en tant que brouillon et répéter le process avec plus d'images collées dans le même e-mail. Envoyez-vous l'e-mail, puis ouvrez-le sur votre ordinateur avec Text Edit. Vous serez en mesure de voir exactement la mise en forme que l'email prend (y compris les images encodées en base64).

Ce qui se passe étrangement avec mon code ci-dessous est que le text le fait entrer dans l'email, mais les images disparaissent complètement (pas même une reference "cassée" qui leur fait miroiter: – /). Cela me fait douter que la binding aux images sur un server externe fonctionnerait. Je vais continuer à travailler dessus … Je me request si cela se passera différemment si j'ai le lancement du courrier électronique dans l'application de messagerie en dehors de mon programme. Je reviendrai pour mettre à jour ce que je comprends plus … il semble juste que cela devrait être plus facile que Apple le fait: – /

Ce code est écrit pour les files d'image que vous stockez dans votre directory "Documents" (votre application doit donc créer des images qui y sont stockées et un code HTML faisant reference à ces images.) Pour les images que vous avez stockées dans l'application bundle, utilisez [[NSBundle mainBundle] resourcePath] pour le path d'access initial aux images).

 - (void)createEmailWithInlineImages { //get app Documents directory NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSSsortingng *documentsPath = [paths objectAtIndex:0]; //make spaces HTML friendly documentsPath = [documentsPath ssortingngByReplacingOccurrencesOfSsortingng:@" " withSsortingng:@"%20"]; //make forward-slash into double-forward-slash for HTML file-URL comapatibility documentsPath = [documentsPath ssortingngByReplacingOccurrencesOfSsortingng:@"/" withSsortingng:@"//"]; //get the name for your image into the ssortingng however your app works //create a ssortingng formatted like a literal HTML URL to the image, eg //file:///myiPhoneFileSystemPath//MyApplication//MyApplicationDirectories//Documents//imageName.jpg NSSsortingng *myHTMLImageName = @"myHTMLImage.jpg"; NSSsortingng *imagePath = [NSSsortingng ssortingngWithFormat:@"file:///%@//%@",documentsPath,myHTMLImageName]; //this ssortingng is an example of your email body text with HTML formatting NSSsortingng *emailText = [NSSsortingng ssortingngWithFormat:@"%@%@%@",@"<html><head><title>My Inline Image Example Email</title></head><body><p>Here's some text before the inline image</p><p><img src = \"",imagePath,@"\"></p><p>Here's some text for after the inline image. You could add more inline images and text after this with the same kind of formatting.</p></body></html>"]; //create email MFMailComposeViewController *emailDialog = [[MFMailComposeViewController alloc] init]; emailDialog.mailComposeDelegate = self; [emailDialog setSubject:@"My Inline Image Email Document"]; [emailDialog setMessageBody:emailText isHTML:YES]; [self presentModalViewController:emailDialog animated:YES]; [emailDialog release]; } 
  1. enlever l'label de l'image
  2. il suffit de prendre la balise d'image retirée et d'afficher en utilisant la vue uimage

J'ai essayé les exemples ci-dessus, mais ils ne fonctionnent pas. Vous findez ci-dessous un exemple de code qui fonctionne à 100%. Mais vous devez vérifier l'URL de l'label de l'image.

 //remove the img tag NSScanner *theScanner; NSSsortingng *gt =nil; theScanner = [NSScanner scannerWithSsortingng:emailBody]; while ([theScanner isAtEnd] == NO) { // find start of tag [theScanner scanUpToSsortingng:@"<img" intoSsortingng:NULL] ; // find end of tag [theScanner scanUpToSsortingng:@">" intoSsortingng:&gt] ; emailBody = [emailBody ssortingngByReplacingOccurrencesOfSsortingng:[ NSSsortingng ssortingngWithFormat:@"%@>", gt] withSsortingng:@""]; NSSsortingng *tt=[ NSSsortingng ssortingngWithFormat:@"%@>", gt]; NSLog(@"*********************%@",tt); st=tt; NSLog(@"*********************%@",st); } st =[st ssortingngByReplacingOccurrencesOfSsortingng:@"<img src=\"" withSsortingng:@""]; st =[st ssortingngByReplacingOccurrencesOfSsortingng:@"\"/>" withSsortingng:@""]; st =[st ssortingngByReplacingOccurrencesOfSsortingng:@".png" withSsortingng:@""]; st =[st ssortingngByReplacingOccurrencesOfSsortingng:@"\"align=\"left" withSsortingng:@""]; //"align="left NSLog(@"*********************%@",st); NSSsortingng *path1 = [[NSBundle mainBundle] pathForResource:[ NSSsortingng ssortingngWithFormat:@"%@", st] ofType:@"png"]; NSData *myData1 = [NSData dataWithContentsOfFile:path1]; [picker addAttachmentData:myData1 mimeType:@"image/png" fileName:[ NSSsortingng ssortingngWithFormat:@"%@", st]];