42 votes

Objective C : Envoyer un email sans quitter l'application

Comment envoyer un courriel dans une application sans quitter celle-ci ?

Ça marche :

-(void) sendEmailTo:(NSString *)to withSubject:(NSString *)subject withBody:(NSString *)body {
NSString *mailString = [NSString stringWithFormat:@"mailto:?to=%@&subject=%@&body=%@",
                        [to stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding],
                        [subject stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding],
                        [body stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding]];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:mailString]];
}

mais va dans l'application de messagerie pour l'envoyer. Existe-t-il un moyen de le faire sans quitter l'application ?

0 votes

Vous pouvez trouver ce tutoriel utile.

0 votes

J'ai trouvé ce meilleur tutoriel codingexplorer.com/

57voto

kubi Points 20607

Oui. Utilisez le MFMailComposeViewController .

// From within your active view controller
if([MFMailComposeViewController canSendMail]) {
    MFMailComposeViewController *mailCont = [[MFMailComposeViewController alloc] init];
    mailCont.mailComposeDelegate = self;

    [mailCont setSubject:@"yo!"];
    [mailCont setToRecipients:[NSArray arrayWithObject:@"joel@stackoverflow.com"]];
    [mailCont setMessageBody:@"Don't ever want to give you up" isHTML:NO];
    [self presentViewController:mailCont animated:YES completion:nil];

}

// Then implement the delegate method
- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error {
    [self dismissViewControllerAnimated:YES completion:nil];
}

0 votes

Ça a marché, mais l'écran de messagerie ne s'affiche pas exactement quand c'est fait.

0 votes

Vous devez également mettre en œuvre la méthode du délégué, que j'ai ajoutée.

0 votes

Cette deuxième partie va dans le fichier d'implémentation aussi, correct ? Parce qu'il se bloque toujours lorsque je clique sur annuler ou envoyer sur l'écran de l'e-mail.

27voto

Alexander Volkov Points 241
  1. Ajout du cadre MessageUI :

    • Cliquez sur le projet
    • Sélectionnez "Phases de construction".
    • Développer "Lier les binaires avec les bibliothèques".
    • Cliquez sur "+" et tapez "Message" pour trouver le cadre "MessageUI", puis ajoutez-le.
  2. Dans le contrôleur de vue actuel, ajoutez l'importation et l'implémentation d'un protocole :

    #import <MessageUI/MessageUI.h> 
    #import <MessageUI/MFMailComposeViewController.h> 
    @interface MyViewController : UIViewController<MFMailComposeViewControllerDelegate>

Ajouter des méthodes :

    -(void)sendEmail {
        // From within your active view controller
        if([MFMailComposeViewController canSendMail]) {
            MFMailComposeViewController *mailCont = [[MFMailComposeViewController alloc] init];
            mailCont.mailComposeDelegate = self;        // Required to invoke mailComposeController when send

            [mailCont setSubject:@"Email subject"];
            [mailCont setToRecipients:[NSArray arrayWithObject:@"myFriends@email.com"]];
            [mailCont setMessageBody:@"Email message" isHTML:NO];

            [self presentViewController:mailCont animated:YES completion:nil];
        }
    }

    - (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error {
        [controller dismissViewControllerAnimated:YES completion:nil];
    }

12voto

AbuZubair Points 535

Mise à jour pour iOS 6. Veuillez noter que ceci utilise ARC et n'utilise pas la présentation de la vue modale dépréciée :

#import <MessageUI/MessageUI.h> 
#import <MessageUI/MFMailComposeViewController.h> 
@interface MyViewController : UIViewController<MFMailComposeViewControllerDelegate>

Et ensuite le code pour présenter l'écran de l'email :

- (IBAction)emailButtonPushed:(id)sender {

    if([MFMailComposeViewController canSendMail]) {
        MFMailComposeViewController *mailCont = [[MFMailComposeViewController alloc] init];
        mailCont.mailComposeDelegate = self;
        [mailCont setSubject:@"Your email"];
        [mailCont setMessageBody:[@"Your body for this message is " stringByAppendingString:@" this is awesome"] isHTML:NO];
        [self presentViewController:mailCont animated:YES completion:nil];
    }

}

- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error {
    //handle any error
    [controller dismissViewControllerAnimated:YES completion:nil];
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X