Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

MFMailComposeViewController : how do I embed a clickable URL link into the email message body

I want my app using the MFMailComposeViewController to send an email such that the recipient can click on the embedded url to open the corresponding web site. MFMailComposeViewController does not appear to support this explicitly. Any ideas?

like image 832
rudifa Avatar asked Jan 13 '10 16:01

rudifa


4 Answers

I deleted my previous answer as it was incorrect and irrelevant. After much hair pulling I finally figured out what was going on in my case and is probably what is happening in this question.

When you compose the HTML body for the MFMailComposeViewController you must put line breaks in the HTML. If any line is > 76 chars long, the body will be interpreted as follows:

Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

If you put line breaks in, the Content-Transfer-Encoding: quoted-printable will not happen and everything works as expected. Assuming you have proper HTML.

As an example, build the body as follows:

NSMutableString *body = [NSMutableString string];
// add HTML before the link here with line breaks (\n)
[body appendString:@"<h1>Hello User!</h1>\n"];
[body appendString:@"<a href=\"http://www.mysite.com/path/to/link\">Click Me!</a>\n"];
[body appendString:@"<div>Thanks much!</div>\n"];

Cheers!

like image 76
XJones Avatar answered Nov 04 '22 12:11

XJones


:) Yes, you can do this:

MFMailComposeViewController *composer = [[MFMailComposeViewController alloc] init];
composer.mailComposeDelegate = self;
[composer setSubject:subject];
[composer setMessageBody:message isHTML:YES];                    

where message is just an NSString with HTML content. Inside you can add all the HTML you want.

like image 38
Adrian Kosmaczewski Avatar answered Nov 04 '22 11:11

Adrian Kosmaczewski


I have the same problem.

My link is HTML, I can see 'blue' but if I click it, doesn't open safari mobile. Is allowed to me edit the text.

In a class I have this:

-(id) init{
    self = [super init];
    if (self) {
            if ([MFMailComposeViewController canSendMail]) {
                self.mailComposeDelegate = self;
                [self setSubject: @"Subject"];
                [self setMessageBody: @"<h2>Body</h2><a href='http://www.google.com'>link example</a>" isHTML: YES];
            }
            else {
                UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"No Mail Accounts" 
                                                                message:@"You don't have a Mail account configured, please configure to send email."
                                                               delegate:nil 
                                                      cancelButtonTitle:@"OK" 
                                                      otherButtonTitles: nil];
                [alert show];
            }
    }
    return self;
}

-(void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error{
    [controller dismissModalViewControllerAnimated: YES];
}

Here you can see the iPad Screen shot: iPad Screen shot

If I send, and then I go to "Sent" Mailbox the link works, so I think the problem is the event which open the links.

Thanks.

like image 9
Mikel Avatar answered Nov 04 '22 11:11

Mikel


Use setMessageBody:isHTML: and pass a proper HTML link in the body (<a href="your_url">your link text</a>) and pass YES to the isHTML parameter.

like image 6
Greg Martin Avatar answered Nov 04 '22 13:11

Greg Martin