Запустить приложение Apple Mail из моего собственного приложения? - PullRequest
58 голосов
/ 11 января 2012

То, что я уже нашел, это

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"mailto:"]];

Но я просто хочу открыть приложение Почта не только в представлении композитора. Просто почтовое приложение в нормальном или последнем состоянии.

Есть идеи?

Ответы [ 14 ]

79 голосов
/ 23 марта 2015

Судя по всему, почтовое приложение поддерживает 2-ю схему URL - message://, которая (я полагаю) позволяет открыть конкретное сообщение, если оно было получено приложением.Если вы не предоставите URL-адрес сообщения, оно просто откроет почтовое приложение:

NSURL* mailURL = [NSURL URLWithString:@"message://"];
if ([[UIApplication sharedApplication] canOpenURL:mailURL]) {
    [[UIApplication sharedApplication] openURL:mailURL];
}
47 голосов
/ 11 января 2012
NSString *recipients = @"mailto:first@example.com?cc=second@example.com,third@example.com&subject=Hello from California!";

NSString *body = @"&body=It is raining in sunny California!";

NSString *email = [NSString stringWithFormat:@"%@%@", recipients, body];

email = [email stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:email]];
18 голосов
/ 03 августа 2015

Свифт версия оригинального ответа Амит:

Swift 2:

func openMailApp() {

    let toEmail = "stavik@outlook.com"
    let subject = "Test email".stringByAddingPercentEncodingWithAllowedCharacters(.URLHostAllowedCharacterSet()
    let body = "Just testing ...".stringByAddingPercentEncodingWithAllowedCharacters(.URLHostAllowedCharacterSet()

    if let
        urlString = ("mailto:\(toEmail)?subject=\(subject)&body=\(body)")),
        url = NSURL(string:urlString) {
        UIApplication.sharedApplication().openURL(url)
    }
}

Swift 3.0:

func openMailApp() {

    let toEmail = "stavik@outlook.com"
    let subject = "Test email".addingPercentEncoding(withAllowedCharacters: .urlHostAllowed)
    let body = "Just testing ...".addingPercentEncoding(withAllowedCharacters: .urlHostAllowed)

    if let
        urlString = "mailto:\(toEmail)?subject=\(subject)&body=\(body)",
        url = URL(string:urlString) {
        UIApplication.shared().openURL(url)
    }
}
11 голосов
/ 11 января 2012

Поскольку единственный способ запустить другие приложения - это использовать их схемы URL, единственный способ открыть почту - это использовать схему mailto :.Что, к сожалению, для вашего случая, всегда будет открывать составное представление.

10 голосов
/ 17 марта 2017

Вы можете открыть почтовое приложение, не открывая составное представление, используя схему URL message://

9 голосов
/ 07 октября 2014

Запустите ваше приложение на реальном устройстве и наберите

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"your@email.com"]];

Обратите внимание, что эта строка не влияет на симулятор.

7 голосов
/ 04 апреля 2015

Вы можете запустить любое приложение на iOS, если знаете его схему URL.Не знаю, что схема приложения Mail общедоступна, но вы можете быть хитрым и попробовать это:

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"message:message-id"]];

Подсказки Фархаду Нурзаю за подсказку.Это что-то вроде обратного проектирования API почтового приложения.Больше информации здесь: https://medium.com/@vijayssundaram/how-to-deep-link-to-ios-7-mail-6c212bc79bd9

5 голосов
/ 08 марта 2015

Расширение ответа Амит: Это запустит почтовое приложение с новым электронным письмом.Просто измените строки, чтобы изменить начало нового письма.

//put email info here:
NSString *toEmail=@"supp0rt.fl0ppyw0rm@gmail.com";
NSString *subject=@"The subject!";
NSString *body = @"It is raining in sunny California!";

//opens mail app with new email started
NSString *email = [NSString stringWithFormat:@"mailto:%@?subject=%@&body=%@", toEmail,subject,body];
email = [email stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:email]];
2 голосов
/ 17 сентября 2014

Если вы используете Xamarin для разработки приложения для iOS, вот эквивалент C # для открытия представления композитора почтового приложения:

string email = "yourname@companyname.com";
NSUrl url = new NSUrl(string.Format(@"mailto:{0}", email));
UIApplication.SharedApplication.OpenUrl(url);
1 голос
/ 17 января 2017

на swift 2.3: открытый почтовый ящик

UIApplication.sharedApplication().openURL(NSURL(string: "message:")!)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...