2012-08-31 29 views
21

का उपयोग कर ईमेल बॉडी में कोई छवि कैसे जोड़ें I ईमेल के शरीर के अंदर एक छवि जोड़ने और आईओएस में अनुलग्नक के रूप में नहीं जोड़ने का सबसे अच्छा तरीका खोजने का प्रयास कर रहा हूं।MFMailComposeViewController

1) एप्पल एक समारोह "addAttachment" प्रदान की गई है और डॉक कहते हैं, सामग्री में किसी भी छवि को जोड़ने के लिए, हम इस समारोह का उपयोग करना चाहिए, लेकिन मुझे लगता है कि समारोह की कोशिश की है, और एक मेल भेजा है, मैं पर जाँच की मेरी ब्राउज़र, यह एक अनुलग्नक के रूप में प्राप्त किया जाता है।

2) दूसरा, कई ब्लॉग बेस 64 एन्कोडिंग, का उपयोग करने के लिए कहते हैं, लेकिन यह भी काम नहीं करेगा, छवि टूटी हुई के रूप में भेजी जाती है।

तो दोस्तों, कृपया इसे करने के लिए सबसे अच्छा उपलब्ध समाधान खोजने में मेरी सहायता करें।

सादर रंजीत

+0

[विस्तृत जवाब यहाँ है] (http://stackoverflow.com/questions/1527351/how-to-add-an-uiimage-in-mailcomposer-sheet-of-mfmailcomposeviewcontroller-in-ip) – Hemang

उत्तर

59

सेट ईमेल HTML के रूप में प्रारूप। यह कोड मेरे ऐप में ठीक हो रहा है।

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

स्विफ्ट

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

हाय @MSK, आपके उत्तर के लिए धन्यवाद, क्या आपने ब्राउजर में प्राप्त मेल की जांच की है, उदाहरण के लिए, जीमेल के लिए, याहू, यह ईमेल के शरीर के अंदर या अटैचमेंट के रूप में कैसा दिखाई देता है? – Ranjit

+0

हाय एमएसके, यह आकर्षण की तरह काम करता है, धन्यवाद – Ranjit

+0

खुशी है कि यह काम किया! मुझे लगता है कि आप इस जवाब को स्वीकार कर सकते हैं :) – msk

10

मैं सिर्फ स्विफ्ट के लिए हाल ही में इस माध्यम से चला गया।

समारोह स्विफ्ट में ईमेल करने के लिए तस्वीर को जोड़ने के लिए:

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

समारोह प्रारूपित छवि लौटने के लिए:

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

क्या ये छवियां आपके लिए जीमेल, हॉटमेल इत्यादि में सही तरीके से दिखाई देती हैं? वे मेरे लिए नहीं हैं .. – egfconnor

+0

@ रिचर्ड, शानदार समाधान :- डी। – sabiland

+3

यह आईओएस में काम करता है, लेकिन सावधान रहें - अभी भी हॉटमेल, जीमेल में काम नहीं करता है या उस मामले के लिए अधिकांश अन्य क्लाइंट्स जैसे egfconnor का उल्लेख किया गया है। – Wraithbone

3

मैं पाया है कि (कम से कम मेरे मामले में) एक PNG काम करेंगे संदेश संगीतकार में लेकिन जब उपयोगकर्ता द्वारा संदेश खोला/प्राप्त नहीं किया जाता है।

संगीतकार Dandily showing logo PNG image!

व्यूअर Not so much logo images over here.

(कभी कभी वहाँ एक हल्के नीले रंग की रूपरेखा जहां छवि होना चाहिए होगा।)

नीचे HTML शरीर स्ट्रिंग और रूपांतरण का उपयोग नीचे करने के लिए लगता है चाल।


संदेश का मुख्य भाग एचटीएमएल स्ट्रिंग जेपीईजी डाटा के साथ जेपीईजी

स्ट्रिंग के लिए
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 छवि का उपयोग करते हुए

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

अतिरिक्त जानकारी:

  • आईओएस लक्ष्य = 8.0
  • आईओएस डिवाइस = 9.1
  • मैं HTML के साथ भयानक हूँ!

इस प्रश्न के सही उत्तर के लिए @ रिचर्ड धन्यवाद।

+0

नहीं, यह काम नहीं करता है, छवि प्राप्त ईमेल में दिखाई नहीं देती है। – Leon

1

कुछ बातें ध्यान रखें: - उपयोग addAttachmentData - उपयोग setMessageBody और isHTML सेट: सच

आप न अपना ईमेल शरीर में मैन्युअल रूप से जोड़ने के लिए है। एपीआई इसका ख्याल रखेगा।

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