2012-08-31 10 views
21

Ich versuche herauszufinden, die beste Möglichkeit, ein Bild in den Körper der E-Mail und nicht als Anlage in ios hinzuzufügen.Wie füge ich ein Bild in E-Mail-Körper mit MFMailComposeViewController

1) Apple eine Funktion „addAttachment“ zur Verfügung gestellt hat und der Doc sagt, jedes Bild in den Inhalt hinzufügen möchten, wir diese Funktion nutzen sollte, aber ich versuchte, diese Funktion, und eine E-Mail geschickt, überprüfte ich meine Browser wird es als Anhang empfangen.

2) Zweitens sagen viele Blogs zu verwenden base64 Codierung,, aber das wird auch nicht funktionieren, Bild wird als eine gebrochene gesendet.

Also Freunde, bitte helfen Sie mir, die beste verfügbare Lösung zu finden, dies zu tun.

Grüße Ranjit

+0

[Detaillierte Antwort ist hier] (http://stackoverflow.com/questions/1527351/how-to-add-an-uiimage-in-mailcomposer-sheet-of-mfmailcomposeviewcontroller-in-ip) – Hemang

Antwort

59

Set E-Mail-Format HTML. Dieser Code funktioniert in meiner App gut.

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]; 

Swift

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) 

    } 
+0

Hi @MSK, danke für deine Antwort, hast du die empfangene Mail im Browser überprüft, zB für Gmail, Yahoo, wie sieht es aus, in der E-Mail oder als Attachment? – Ranjit

+0

Hallo MSK, es funktioniert wie Charme, danke – Ranjit

+0

Froh, dass es funktioniert hat! Ich denke du kannst diese Antwort annehmen :) – msk

10

Ich ging gerade durch diese kürzlich für Swift.

Funktion Foto hinzufügen in Swift zu E-Mail:

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) 
} 

Funktion zurückzukehren, um die formatierte Bild:

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

Werden diese Bilder in Google Mail, Hotmail usw. richtig angezeigt? Sie sind nicht für mich .. – egfconnor

+0

@Richard, hervorragende Lösung: -D. – sabiland

+3

Dies funktioniert in iOS, aber Vorsicht - funktioniert immer noch nicht in Hotmail, Gmail oder für die meisten anderen Clients als egfconnor erwähnt. – Wraithbone

3

Ich habe festgestellt, dass (zumindest in meinem Fall) ein PNG arbeiten im Nachrichten-Composer aber NICHT, wenn die Nachricht vom Benutzer geöffnet/empfangen wird.

Komponist Dandily showing logo PNG image!

-Viewer Not so much logo images over here.

(Gelegentlich wird es einen hellblauen Umriss sein, wo das Bild sein soll.)

Mit dem HTML-Body String unten und die Umwandlung unter das zu tun scheint der Trick.


Nachrichtentext HTML String JPEG mit

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"]; 

Convert Image to String mit JPEG Daten

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

Zusätzliche Information:

  • iOS Ziel = 8.0
  • iOS Gerät = 9.1
  • Ich bin schrecklich mit HTML!

Vielen Dank @Richard für die richtige Antwort auf diese Frage.

+0

Nein, das funktioniert nicht, das Bild wird nicht in der empfangenen E-Mail angezeigt. – Leon

1

Ein paar Dinge zu beachten: - Verwenden Sie addAttachmentData - Verwendung setMessageBody und setzen ISHTML: true

Sie müssen manuell in Ihrem E-Mail-Körper hinzufügen nicht. die api wird sich darum kümmern.

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)}