ios - poner - Cómo agregar una imagen en el cuerpo del correo electrónico usando MFMailComposeViewController
insertar imagen en firma mail mac (4)
Estoy tratando de encontrar la mejor manera de agregar una imagen dentro del cuerpo del correo electrónico y no como archivo adjunto en ios.
1) Apple ha proporcionado una función " addAttachment " y el documento dice que, para agregar cualquier imagen en el contenido, deberíamos usar esta función, pero probé esa función y envié un correo, lo verifiqué en mi navegador, se recibe como un adjunto.
2) En segundo lugar, muchos blogs dicen que utilizan la codificación base64, pero que tampoco funciona, la imagen se envía como dañada.
Entonces, amigos, por favor, ayúdenme a encontrar la mejor solución disponible para hacer esto.
Saludos Ranjit
Acabo de pasar por esto recientemente para Swift.
Función para agregar una foto 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 = "<img src=''data:image/png;base64,/(imageString)'' width=''/(image.size.width)'' height=''/(image.size.height)''>"
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
}
Algunas cosas a tener en cuenta: - Use addAttachmentData - use setMessageBody y set isHTML: true
No tienes que agregar manualmente en tu 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 = "<html><body><p>This is your message</p></body></html>"
mail.setMessageBody(emailBody, isHTML:true)
self.presentViewController(mail, animated: true, completion:nil)}
Descubrí que (al menos en mi caso) un PNG funcionará en el editor de mensajes, pero NO cuando el usuario abra o reciba el mensaje.
Compositor Dandily mostrando logo PNG de imagen!
Visor No hay tanto imágenes de logotipos por aquí.
(Ocasionalmente habrá un contorno azul claro donde debería estar la imagen).
Usar la cadena del cuerpo HTML a continuación y la conversión a continuación que parece hacer el truco.
Cadena HTML del cuerpo del mensaje usando JPEG
NSString *body = [NSString stringWithFormat:
@"/
<html>/
<body>/
Check out the App!/
<br>/
Isn''t this a terriffic logo?!./
<br>/
<img src = /"data:image/jpeg;base64,%@/" width = 100 height= 100>/
<br>/
<a href = /"%@/" > CLICK ITTTTTTT! </a>/
</body>/
</html>",
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:
- iOS Target = 8.0
- Dispositivo iOS = 9.1
- ¡Soy horrible con HTML!
Gracias a @Richard por la respuesta CORRECTA a esta pregunta.
Establecer formato de correo electrónico como HTML. Este código está funcionando bien en mi aplicación.
MFMailComposeViewController *emailDialog = [[MFMailComposeViewController alloc] init];
NSString *htmlMsg = @"<html><body><p>This is your message</p></body></html>";
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("<html><body><p>This is your message</p></body></html>", isHTML: true)
self.presentViewController(mailComposeVC, animated: true, completion: nil)
}