MFMailComposeViewController: как встроить кликабельную ссылку URL в тело сообщения электронной почты - PullRequest
13 голосов
/ 13 января 2010

Я хочу, чтобы мое приложение с помощью MFMailComposeViewController отправляло электронное письмо, чтобы получатель мог щелкнуть по встроенному url, чтобы открыть соответствующий веб-сайт. MFMailComposeViewController явно не поддерживает это. Есть идеи?

Ответы [ 5 ]

27 голосов
/ 11 ноября 2010

Я удалил свой предыдущий ответ, так как он был неправильным и неуместным. После долгих потягиваний волос я наконец понял, что происходит в моем случае, и, вероятно, что происходит в этом вопросе.

Когда вы составляете тело HTML для MFMailComposeViewController, вы должны вставлять разрывы строк в HTML. Если длина любой строки> 76 символов, тело будет интерпретировано следующим образом:

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

Если вы вставите разрывы строк, Content-Transfer-Encoding: quoted-printable не произойдет, и все будет работать, как ожидалось. Предполагая, что у вас есть правильный HTML.

В качестве примера, построить тело следующим образом:

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

ура!

16 голосов
/ 13 января 2010

:) Да, вы можете сделать это:

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

где сообщение - это просто строка NSS с содержимым HTML. Внутри вы можете добавить все, что вы хотите.

8 голосов
/ 06 июня 2012

У меня такая же проблема.

Моя ссылка - HTML, я вижу синий, но если я нажму на нее, Safari Mobile не откроется. Разрешено мне редактировать текст.

В классе у меня есть это:

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

Здесь вы можете увидеть снимок экрана iPad: iPad Screen shot

Если я отправляю, а затем перехожу на «Отправленный» почтовый ящик, ссылка работает, поэтому я думаю, что проблема заключается в событии, которое открывает ссылки.

Спасибо.

5 голосов
/ 04 ноября 2010

вы примерили свой код для вашего предложения? Я пробовал это, прежде чем попасть на этот сайт, и, к сожалению, он не работает вообще. Ссылка действительно отображается синим цветом, HTML читается как HTML, но ссылка невозможна. Когда я нажимаю на ссылку, я могу ее просто отредактировать ....

Есть лучшее предложение?

5 голосов
/ 13 января 2010

Используйте setMessageBody:isHTML: и передайте правильную ссылку HTML в теле (<a href="your_url">your link text</a>) и передайте YES параметру isHTML.

...