Запустить приложение Apple Mail из моего собственного приложения?

Я уже нашел

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

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

Любые идеи?

Ответ 1

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

NSURL* mailURL = [NSURL URLWithString:@"message://"];
if ([[UIApplication sharedApplication] canOpenURL:mailURL]) {
    [[UIApplication sharedApplication] openURL:mailURL];
}

Ответ 2

NSString *recipients = @"mailto:[email protected][email protected],[email protected]&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]];

Ответ 3

Быстрая версия исходного ответа Amit:

Swift 2:

func openMailApp() {

    let toEmail = "[email protected]"
    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 = "[email protected]"
    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)
    }
}

Ответ 4

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

Ответ 5

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

Ответ 6

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

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"[email protected]"]];

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

Ответ 7

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

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

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

Ответ 8

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

//put email info here:
NSString *[email protected]"[email protected]";
NSString *[email protected]"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]];

Ответ 9

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

string email = "[email protected]";
NSUrl url = new NSUrl(string.Format(@"mailto:{0}", email));
UIApplication.SharedApplication.OpenUrl(url);

Ответ 10

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

UIApplication.sharedApplication().openURL(NSURL(string: "message:")!)

Ответ 11

Быстро 4/5, чтобы открыть почтовое приложение по умолчанию без просмотра. Если почтовое приложение удалено, оно автоматически показывает UIAlert с опциями для повторной загрузки приложения :)

UIApplication.shared.open(URL(string: "message:")!, options: [:], completionHandler: nil)

Ответ 12

Возможно, вы захотите использовать скриптовый мост. Я использовал этот метод в своем приложении, чтобы напрямую дать пользователю возможность отправлять уведомления по электронной почте, используя встроенный Mail.app. Я также создал опцию, чтобы сделать это напрямую через SMTP в качестве альтернативы.

Но поскольку вы хотите использовать метод Mail.app, вы можете найти больше информации о том, как сделать это решение, выполнив следующие действия:

https://github.com/HelmutJ/CocoaSampleCode/tree/master/SBSendEmail

Удачи!

Ответ 13

Откроется почтовое приложение по умолчанию с представлением композитора:

NSURL* mailURL = [NSURL URLWithString:@"mailto://"];
if ([[UIApplication sharedApplication] canOpenURL:mailURL]) {
    [[UIApplication sharedApplication] openURL:mailURL];
}

Откроется приложение Mail по умолчанию:

NSURL* mailURL = [NSURL URLWithString:@"message://"];
if ([[UIApplication sharedApplication] canOpenURL:mailURL]) {
    [[UIApplication sharedApplication] openURL:mailURL];
}

Ответ 14

Версия Swift 5:

if let mailURL = URL(string: "message:") {
    if UIApplication.shared.canOpenURL(mailURL) {
        UIApplication.shared.open(mailURL, options: [:], completionHandler: nil)
    }
}

Ответ 15

В Swift:

let recipients = "[email protected]"
let url = NSURL(string: "mailto:\(recipients)")
UIApplication.sharedApplication().openURL(url!)