Cómo agregar una imagen en el cuerpo del correo electrónico usando MFMailComposeViewController

Estoy tratando de encontrar la mejor manera de agregar una imagen dentro del cuerpo del correo electrónico y no como un archivo adjunto en ios.

1) Apple ha proporcionado una función ” addAttachment ” y el documento dice que, para agregar cualquier imagen en el contenido, debemos utilizar esta función, pero probé esa función, y envié un correo, lo revisé en mi navegador, se recibió como un adjunto.

2) En segundo lugar, muchos blogs dicen que para usar la encoding base64, pero eso tampoco funciona, la imagen se envía como una que está rota.

Así que amigos, ayúdenme a encontrar la mejor solución disponible para hacer esto.

Saludos Ranjit

Establecer el formato de correo electrónico como HTML. Este código está funcionando bien en mi aplicación.

MFMailComposeViewController *emailDialog = [[MFMailComposeViewController alloc] init]; NSString *htmlMsg = @"

This is your message

"; NSData *jpegData = UIImageJPEGRepresentation(emailImage, 1.0); NSString *fileName = @"test"; fileName = [fileName stringByAppendingPathExtension:@"jpeg"]; [emailDialog addAttachmentData:jpegData mimeType:@"image/jpeg" fileName:fileName]; emailDialog setSubject:@"email subject"]; [emailDialog setMessageBody:htmlMsg isHTML:YES]; [self presentModalViewController:emailDialog animated:YES]; [emailDialog release];

Rápido

 import MessageUI func composeMail() { let mailComposeVC = MFMailComposeViewController() mailComposeVC.addAttachmentData(UIImageJPEGRepresentation(UIImage(named: "emailImage")!, CGFloat(1.0))!, mimeType: "image/jpeg", fileName: "test.jpeg") mailComposeVC.setSubject("Email Subject") mailComposeVC.setMessageBody("

This is your message

", isHTML: true) self.presentViewController(mailComposeVC, animated: true, completion: nil) }

Acabo de revisar esto recientemente para Swift.

Función para agregar fotos al correo electrónico en Swift:

 func postEmail() { var mail:MFMailComposeViewController = MFMailComposeViewController() mail.mailComposeDelegate = self mail.setSubject("your subject here") var image = // your image here var imageString = returnEmailStringBase64EncodedImage(image) var emailBody = "" mail.setMessageBody(emailBody, isHTML:true) self.presentViewController(mail, animated: true, completion:nil) } 

Función para devolver la imagen formateada:

 func returnEmailStringBase64EncodedImage(image:UIImage) -> String { let imgData:NSData = UIImagePNGRepresentation(image)!; let dataString = imgData.base64EncodedStringWithOptions(NSDataBase64EncodingOptions(rawValue: 0)) return dataString } 

Descubrí que (al menos en mi caso) un PNG funcionará en el compositor de mensajes, pero NO cuando el mensaje sea abierto / recibido por el usuario.

Compositor Dandily mostrando la imagen de logotipo PNG!

Visor No hay tantas imágenes de logotipo aquí.

(Ocasionalmente habrá un contorno azul claro donde debería estar la imagen).

Usar la cadena de cuerpo HTML a continuación y la conversión a continuación parece ser el truco.


Cuerpo del mensaje HTML String usando JPEG

 NSString *body = [NSString stringWithFormat: @"\ \ \ Check out the App!\ 
\ Isn't this a terriffic logo?!.\
\ \
\ CLICK ITTTTTTT! \ \ ", imageString, @"http://www.LOLamazingappLOL.com"];

Convertir imagen a cadena con datos JPEG

 + (NSString *)dataStringFromImage:(UIImage *)image { NSData *imgData = UIImageJPEGRepresentation(image, 1); return [imgData base64EncodedStringWithOptions:kNilOptions]; } 

Información adicional:

  • Objetivo de iOS = 8.0
  • Dispositivo iOS = 9.1
  • ¡Soy horrible con HTML!

Gracias @Richard por la respuesta CORRECTA a esta pregunta.

Pocas cosas a tener en cuenta: – Use addAttachmentData – use setMessageBody y establezca isHTML: true

no tiene que agregar manualmente en su cuerpo de correo electrónico. la API se encargará de eso.

 func postEmail() { var mail:MFMailComposeViewController = MFMailComposeViewController() mail.mailComposeDelegate = self mail.setSubject("your subject here") var image = // your image here var imageData = UIImageJPEGRepresentation(image, 1) mail.addAttachmentData(imageData, mimeType:"image/jpeg", fileName:"Your Filename" var emailBody = "

This is your message

" mail.setMessageBody(emailBody, isHTML:true) self.presentViewController(mail, animated: true, completion:nil)}