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

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


person rudifa    schedule 13.01.2010    source источник


Ответы (5)


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

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

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

person Adrian Kosmaczewski    schedule 13.01.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"];

Ваше здоровье!

person XJones    schedule 11.11.2010
comment
Превосходно! приятно знать о разрывах строк !, сэкономьте мне немного времени, ура - person manuelBetancurt; 25.09.2011

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

Моя ссылка в формате 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

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

Спасибо.

person Mikel    schedule 06.06.2012
comment
Вы сделали с кликом? вы перенаправляете по ссылке, если да, то, пожалуйста, напишите здесь @Oceanicsix Спасибо - person Maul; 25.12.2013
comment
Привет, это было больше года назад, если честно, сейчас я не могу вспомнить, как я закончил этот выпуск. Прости и удачи! - person Mikel; 26.12.2013

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

person Greg Martin    schedule 13.01.2010

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

Любое лучшее предложение?

person Luke    schedule 04.11.2010
comment
Вы нажали на полученное письмо или в режиме редактирования? - person AsifHabib; 17.06.2014