web-dev-qa-db-fra.com

Lancer l'application Apple Mail à partir de ma propre application?

Ce que j'ai déjà trouvé c'est

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

Mais je veux juste ouvrir l'application Mail, pas seulement une vue du compositeur. Juste l'application de messagerie dans son état normal ou dernier.

Des idées?

55
cschuff

Comme le seul moyen de lancer d'autres applications consiste à utiliser leurs modèles d'URL, le seul moyen d'ouvrir un courrier consiste à utiliser le modèle mailto: Ce qui, malheureusement pour votre cas, ouvrira toujours la vue de composition.

11
Briggs

Apparemment, l'application Mail prend en charge le deuxième schéma d'URL - message:// qui (je suppose) permet d'ouvrir un message spécifique s'il a été récupéré par l'application. Si vous ne fournissez pas d'URL de message, il vous suffira d'ouvrir l'application de messagerie:

NSURL* mailURL = [NSURL URLWithString:@"message://"];
if ([[UIApplication sharedApplication] canOpenURL:mailURL]) {
    [[UIApplication sharedApplication] openURL:mailURL];
}
73
Vladimir
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]];
47
Amit

Version rapide de la réponse originale d'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)
    }
}
17
VojtaStavik

Vous pouvez ouvrir l'application de messagerie sans ouvrir la vue Composition à l'aide du schéma d'URL message://.

9
Jesse S.

Exécutez votre application sur un appareil réel et appelez

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

Notez que cette ligne n'a aucun effet sur le simulateur.

9
poima

Vous pouvez lancer n'importe quelle application sur iOS si vous connaissez son schéma d'URL. Je ne sais pas que le schéma de l'application Mail est public, mais vous pouvez être sournois et essayer ceci:

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

Des accessoires à Farhad Noorzay pour m'avoir informé de cela. C'est un peu de reverse engineering de l'API de l'application Mail. Plus d'infos ici: https://medium.com/@vijayssundaram/how-to-deep-link-to-ios-7-mail-6c212bc79bd9

6
Diogenes

En développant la réponse d’Amit: Il suffit de modifier les chaînes pour changer le début du nouvel email.

//put email info here:
NSString *toEmail=@"[email protected]";
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]];
5
Stan Tatarnykov

Si vous utilisez Xamarin pour développer une application iOS, voici l'équivalent C # pour ouvrir la vue de composition d'application de messagerie:

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

sur Swift 2.3: ouvrir une boîte aux lettres

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

Vous voudrez peut-être utiliser un pont de script. J'ai utilisé cette méthode dans mon application pour donner directement à l'utilisateur la possibilité d'envoyer des notifications par courrier électronique à l'aide du fichier Mail.app intégré. J'ai également construit une option pour le faire directement sur SMTP en alternative.

Mais puisque vous voulez utiliser la méthode Mail.app, vous pouvez trouver plus d’informations sur la façon de procéder, en procédant comme suit:

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

Bonne chance!

0
user2275294

Il ouvrira l'application Mail par défaut avec la vue du compositeur:

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

Il ouvrira l'application Mail par défaut:

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

Swift 4/5 pour ouvrir l’application Mail par défaut sans affichage composé. Si l'application Mail est supprimée, UIAlert s'affiche automatiquement avec les options permettant de télécharger à nouveau l'application :)

UIApplication.shared.open(URL(string: "message:")!, options: [:], completionHandler: nil)
0
Ondřej H