2009-09-29 12 views
5

Je sais comment envoyer un e-mail dans mon application en lançant l'application Mail puis en revenant à mon application ... mais je voudrais que mon application puisse envoyer un e-mail sans ouvrir l'application mail. Par exemple, j'aurais un bouton dans mon application en cliquant sur ce bouton enverrait un e-mail. Je vais ensuite informer l'utilisateur que l'e-mail a été envoyé ...iphone app envoyer un e-mail

Quelqu'un at-il fait cela?

merci.

Sami

+0

comment choisissez-vous les destinataires, ou est-ce codé en dur? – Tim

Répondre

3

La meilleure façon de le faire est d'avoir un serveur Web pour votre application qui fait l'envoi de courrier. Vous transmettez les détails de l'e-mail et demandez à votre serveur de l'envoyer au nom de l'utilisateur.

+0

Vous avez un problème si vous ne pouvez pas accéder au serveur Web. Ensuite, vous devez mettre en file d'attente le message pour une nouvelle tentative ultérieure sur le serveur Web. Mais votre application peut ne pas fonctionner plus tard. C'est là que ce serait bien si l'iPhone permettait un traitement en arrière-plan, limité, disons, si l'écran est verrouillé ou s'il n'y a pas eu d'interaction de l'utilisateur depuis quelques minutes. – mahboudz

4

Vous avez plusieurs choix. Vous pouvez utiliser la classe MFMailComposeViewController d'Apple (voir ci-dessous), ce qui vous permet de créer un message dans votre application et de le transmettre à la messagerie de l'iPhone, sans lancer l'application Mail ni quitter la vôtre. Vous pouvez également implémenter SMTP dans votre application pour envoyer des e-mails directement. Vous pouvez également transmettre votre courrier électronique à un serveur Web et le faire envoyer par le serveur Web. Le plus simple est la première façon. L'inconvénient est que vous ne savez pas vraiment si le message a été envoyé ou non, ce qui dépend si le réseau était opérationnel ou non et d'autres facteurs. Bien sûr, si vous utilisez votre propre code SMTP, vous devrez gérer toutes les files d'attente et réessayer au cas où le réseau, ou le serveur n'est pas disponible, et cela signifie que votre application doit être en cours d'exécution pour le faire.

De Apple's docs:

La classe MFMailComposeViewController fournit une interface standard qui gère l'édition et l'envoi d'un message électronique. Vous pouvez utiliser ce contrôleur de vue pour afficher une vue de courrier électronique standard dans votre application et remplir les champs de cette vue avec les valeurs initiales, telles que le sujet, les destinataires de l'e-mail, le corps du texte et les pièces jointes. L'utilisateur peut modifier le contenu initial que vous spécifiez et choisir d'envoyer l'e-mail ou d'annuler l'opération.

+0

merci, je vais probablement essayer d'abord en utilisant MFMailComposeViewController sans lancer l'application mail alors ... – sami

9

Voici un exemple de code pour envoyer un courrier électronique à l'aide de MFMailComposeViewController.

-(IBAction)showPicker:(id)sender { 
// This sample can run on devices running iPhone OS 2.0 or later 
// The MFMailComposeViewController class is only available in iPhone OS 3.0 or later. 
// So, we must verify the existence of the above class and provide a workaround for devices running 
// earlier versions of the iPhone OS. 
// We display an email composition interface if MFMailComposeViewController exists and the device can send emails. 
// We launch the Mail application on the device, otherwise. 

Class mailClass = (NSClassFromString(@"MFMailComposeViewController")); 
if (mailClass != nil) 
{ 
    // We must always check whether the current device is configured for sending emails 
    if ([mailClass canSendMail]) 
    { 
     [self displayComposerSheet]; 
    } 
    else 
    { 
     [self launchMailAppOnDevice]; 
    } 
} 
else 
{ 
    [self launchMailAppOnDevice]; 
} 
} 

-(void)displayComposerSheet { 
// Displays an email composition interface inside the application. Populates all the Mail fields. 

MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init]; 
picker.mailComposeDelegate = self; 

[picker setSubject:@"Hello from California!"]; 


// Set up recipients 
NSArray *toRecipients = [NSArray arrayWithObject:@"[email protected]"]; 
NSArray *ccRecipients = [NSArray arrayWithObjects:@"[email protected]", @"[email protected]", nil]; 
NSArray *bccRecipients = [NSArray arrayWithObject:@"[email protected]"]; 

[picker setToRecipients:toRecipients]; 
[picker setCcRecipients:ccRecipients]; 
[picker setBccRecipients:bccRecipients]; 

// Attach an image to the email 
NSString *path = [[NSBundle mainBundle] pathForResource:@"rainy" ofType:@"png"]; 
NSData *myData = [NSData dataWithContentsOfFile:path]; 
[picker addAttachmentData:myData mimeType:@"image/png" fileName:@"rainy"]; 

// Fill out the email body text 
NSString *emailBody = @"It is raining in sunny California!"; 
[picker setMessageBody:emailBody isHTML:NO]; 

[self presentModalViewController:picker animated:YES]; 
[picker release]; 
} 


- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error { 
// Dismisses the email composition interface when users tap Cancel or Send. Proceeds to update the message field with the result of   the operation. 
message.hidden = NO; 
// Notifies users about errors associated with the interface 
switch (result) 
{ 
    case MFMailComposeResultCancelled: 
     message.text = @"Result: canceled"; 
     break; 
    case MFMailComposeResultSaved: 
     message.text = @"Result: saved"; 
     break; 
    case MFMailComposeResultSent: 
     message.text = @"Result: sent"; 
     break; 
    case MFMailComposeResultFailed: 
     message.text = @"Result: failed"; 
     break; 
    default: 
     message.text = @"Result: not sent"; 
     break; 
} 
[self dismissModalViewControllerAnimated:YES]; 
} 

-(void)launchMailAppOnDevice { 

// Launches the Mail application on the device. 
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]]; 
} 
0

cadre Ajouter dans buildphases de MessageUI.framework

fichier ViewController.h

#import <MessageUI/MessageUI.h> 

    @interface ViewController() <MFMailComposeViewControllerDelegate> 

fichier ViewController.m

-(IBAction)emailButtonClicked:(id)sender{ 

     MFMailComposeViewController *mailComposer =[[MFMailComposeViewController alloc] init]; 
     if (mailComposer !=nil) { 
      mailComposer.mailComposeDelegate = self; 
      NSString *emailBody = @"Write the text here........"; 
      [mailComposer setMessageBody:emailBody isHTML:NO]; 
      [self presentModalViewController:mailComposer animated:YES]; 
     } 
     } 

     - (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error { 
      [self becomeFirstResponder]; 
      [self dismissModalViewControllerAnimated:YES]; 
     } 
Questions connexes