243 votes

Comment envoyer du courrier à partir d'une application iPhone

Je veux envoyer un courriel à partir de mon application iPhone. J'ai entendu dire que le SDK iOS n'avait pas d'API de messagerie. Je ne veux pas utiliser le code suivant car il va quitter mon application :

NSString *url = [NSString stringWithString: @"mailto:foo@example.com?cc=bar@example.com&subject=Greetings%20from%20Cupertino!&body=Wish%20you%20were%20here!"];
[[UIApplication sharedApplication] openURL: [NSURL URLWithString: url]];

Alors, comment puis-je envoyer un courriel à partir de mon application ?

429voto

PeyloW Points 25312

Sur iOS 3.0 et les versions ultérieures, vous devez utiliser la fonction MFMailComposeViewController et la classe MFMailComposeViewControllerDelegate qui est caché dans le cadre de MessageUI.

Ajoutez d'abord le cadre et l'importation :

#import <MessageUI/MFMailComposeViewController.h>

Ensuite, pour envoyer un message :

MFMailComposeViewController* controller = [[MFMailComposeViewController alloc] init];
controller.mailComposeDelegate = self;
[controller setSubject:@"My Subject"];
[controller setMessageBody:@"Hello there." isHTML:NO]; 
if (controller) [self presentModalViewController:controller animated:YES];
[controller release];

Ensuite, l'utilisateur fait le travail et vous recevez le rappel du délégué à temps :

- (void)mailComposeController:(MFMailComposeViewController*)controller  
          didFinishWithResult:(MFMailComposeResult)result 
                        error:(NSError*)error;
{
  if (result == MFMailComposeResultSent) {
    NSLog(@"It's away!");
  }
  [self dismissModalViewControllerAnimated:YES];
}

N'oubliez pas de vérifier si l'appareil est configuré pour l'envoi d'e-mails :

if ([MFMailComposeViewController canSendMail]) {
  // Show the composer
} else {
  // Handle the error
}

5 votes

+1. Les frameworks qui doivent être importés sont mentionnés ici ( mobileorchard.com/ ).

71 votes

Pour vous épargner le saut, vous devez #import <MessageUI/MFMailComposeViewController.h>

0 votes

Puis-je accéder au corps du message ? Je veux dire que si j'utilise setMessageBody pour afficher le texte par défaut et que je clique sur le corps, tout le texte par défaut devrait être effacé Une idée ?

61voto

Mugunth Points 8671

MFMailComposeViewController est la voie à suivre après la sortie du logiciel iPhone OS 3.0. Vous pouvez consulter le exemple de code ou le tutoriel que j'ai écrit .

2 votes

Un poste impressionnant par Mugunth. Bien joué mon pote !

1 votes

C'est vraiment génial. Merci. J'ai conçu une vue spécialement pour accepter l'email et le sujet de l'utilisateur. En mettant en œuvre le même code, il montre à nouveau une vue quelque peu similaire. Puis-je invoquer la méthode de délégué de mon événement de pression de bouton dans la classe de contrôleur de vue Merci pour votre aide, Shibin.

0 votes

J'ai téléchargé le même exemple de code mais il n'envoie pas de courrier. Il indique seulement que le courrier a été envoyé avec succès mais aucun courrier n'est reçu. J'ai essayé d'ajouter le cadre MessageUI qui apparaît en rouge par défaut mais l'application n'envoie toujours pas de courrier. Toute aide à cet égard sera très appréciée. Je teste l'application dans un simulateur.

20voto

J'aimerais ajouter quelques éléments ici :

  1. L'utilisation de l'URL mailto ne fonctionnera pas dans le simulateur car mail.app n'est pas installé sur le simulateur. En revanche, elle fonctionne sur l'appareil.

  2. Il y a une limite à la longueur de l'URL du mailto. Si l'URL est supérieure à 4096 caractères, mail.app ne se lancera pas.

  3. Il existe une nouvelle classe dans OS 3.0 qui vous permet d'envoyer un e-mail sans quitter votre application. Voir la classe MFMailComposeViewController.

13voto

Genericrich Points 3538

Si vous voulez envoyer des e-mails à partir de votre application, le code ci-dessus est la seule façon de le faire, à moins que vous ne codiez votre propre client de messagerie (SMTP) dans votre application, ou que vous demandiez à un serveur d'envoyer les e-mails pour vous.

Par exemple, vous pouvez coder votre application de manière à invoquer une URL sur votre serveur qui enverra le courrier pour vous. Il vous suffit ensuite d'appeler l'URL à partir de votre code.

Notez qu'avec le code ci-dessus, vous ne pouvez rien joindre à l'e-mail, ce que la méthode du client SMTP vous permettrait de faire, ainsi que la méthode côté serveur.

12voto

Kannan Prasad Points 637

Le code ci-dessous est utilisé dans mon application pour envoyer un email avec une pièce jointe, ici la pièce jointe est une image, vous pouvez envoyer n'importe quel type de fichier, la seule chose à garder à l'esprit est que vous devez spécifier le bon mimeType

ajoutez ceci à votre fichier .h

#import <MessageUI/MFMailComposeViewController.h>

Ajouter MessageUI.framework à votre fichier de projet

NSArray *paths = SSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);

NSString *documentsDirectory = [paths objectAtIndex:0];

NSString *getImagePath = [documentsDirectory stringByAppendingPathComponent:@"myGreenCard.png"];

MFMailComposeViewController* controller = [[MFMailComposeViewController alloc] init];
controller.mailComposeDelegate = self;
[controller setSubject:@"Green card application"];
[controller setMessageBody:@"Hi , <br/>  This is my new latest designed green card." isHTML:YES]; 
[controller addAttachmentData:[NSData dataWithContentsOfFile:getImagePath] mimeType:@"png" fileName:@"My Green Card"];
if (controller)
    [self presentModalViewController:controller animated:YES];
[controller release];

La méthode de délégation est présentée ci-dessous

  -(void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error;
{
    if (result == MFMailComposeResultSent) {
        NSLog(@"It's away!");
    }
    [self dismissModalViewControllerAnimated:YES];
}

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