Sending out HTML email with IMG tag from an iPhone App using MFMailComposeViewController class

后端 未结 4 1120
北恋
北恋 2020-12-30 18:23

I am using MFMailComposeViewController class to send out formatted HTML email from my iPhone app. I need to include an image in the email and I added am IMG tag to my emailb

相关标签:
4条回答
  • 2020-12-30 18:23

    I strongly believe (from your question) that your image SG10002_1.jpg is located in main bundle.
    If it is so, then below code should work for you. It's a complete hack from this question.

    - (void)createEmail {
    //Create a string with HTML formatting for the email body
        NSMutableString *emailBody = [[[NSMutableString alloc] initWithString:@"<html><body>"] retain];
     //Add some text to it however you want
        [emailBody appendString:@"<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 string representation of the data using NSData+Base64
        NSString *base64String = [imageData base64EncodedString];
     //Add the encoded string to the emailBody string
     //Don't forget the "<b>" tags are required, the "<p>" tags are optional
        [emailBody appendString:[NSString stringWithFormat:@"<p><b><img src='data:image/png;base64,%@'></b></p>",base64String]];
     //You could repeat here with more text or images, otherwise
     //close the HTML formatting
        [emailBody appendString:@"</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];
    }
    
    0 讨论(0)
  • 2020-12-30 18:33

    Here is the code which was working for me,

    Class mailClass = (NSClassFromString(@"MFMailComposeViewController"));

            if (mailClass != nil)
            {
    
                // We must always check whether the current device is configured for sending emails
    
    
                UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
    
                UIGraphicsEndImageContext();
                MFMailComposeViewController *composeVC = [[MFMailComposeViewController alloc] init];
                composeVC.mailComposeDelegate = self;
                [composeVC setSubject:@"test"];
                NSString *messageBody = @"";
                [composeVC setMessageBody:messageBody isHTML:NO];
                UIImage *artworkImage = viewImage;
                NSData *artworkJPEGRepresentation = nil;
                if (artworkImage)
                {
                    artworkJPEGRepresentation = UIImageJPEGRepresentation(artworkImage, 0.7);
                }
                if (artworkJPEGRepresentation) 
                {
                    [composeVC addAttachmentData:artworkJPEGRepresentation mimeType:@"image/jpeg" fileName:@"Quote.jpg"];
                }
    
                NSString *emailBody = @"Find out more  App at <a href='http://itunes.apple.com/us/artist/test/id319692005' target='_self'>Test</a>";//add code
                const char *urtfstring = [emailBody UTF8String];
                NSData *HtmlData = [NSData dataWithBytes:urtfstring length:strlen(urtfstring)];
                [composeVC addAttachmentData:HtmlData mimeType:@"text/html" fileName:@""];
                //Add code
                [self presentModalViewController:composeVC animated:YES];
                [composeVC release];
                [self dismissModalViewControllerAnimated:YES];
                UIGraphicsEndImageContext();
    
    0 讨论(0)
  • 2020-12-30 18:38

    Add it as an image/jpeg attachment. It will appear at the bottom of your message but above the signature.

    There are lots of other potential ways, but they're all a bit crap.

    0 讨论(0)
  • 2020-12-30 18:50

    You can't use images with relative paths like that in mail because that will try and look for the file from the recipients mail client.

    You can either embed the image using the base64 encoded object (google html base64 image) or upload the image to a publicly accessible web server and reference the absolute URL for the image from your mail, that way the recipient's mail client can always access it.

    0 讨论(0)
提交回复
热议问题