2009-09-29 29 views
5

Sé cómo enviar un correo electrónico dentro de mi aplicación lanzando la aplicación de correo y luego volviendo a mi aplicación ... pero me gustaría que mi aplicación pueda enviar un correo electrónico sin abrir la aplicación de correo. Por ejemplo, tendría un botón en mi aplicación que al hacer clic en ese botón enviaría un correo electrónico. A continuación, notificaré al usuario que se ha enviado el correo electrónico ...iphone app enviar correo electrónico

¿Alguien ha estado haciendo esto?

gracias.

Sami

+0

¿cómo se eligen los destinatarios, o está codificado? – Tim

Respuesta

3

La mejor manera de hacer esto es tener un servidor web para su aplicación que hace el envío de correo. Pasaría los detalles del correo electrónico y su servidor lo enviaría en nombre del usuario.

+0

Tiene un problema si no puede acceder al servidor web. Luego debe poner en cola el mensaje para un posterior reintentar al servidor web. Pero es posible que su aplicación no se ejecute más tarde. Aquí es donde sería bueno si el iPhone permitiera algún procesamiento en segundo plano, limitado a, por ejemplo, si la pantalla está bloqueada o si no ha habido interacción del usuario durante unos minutos. – mahboudz

4

Tiene algunas opciones. Puede usar la clase MFMailComposeViewController de Apple (ver a continuación) que le permite hacer un mensaje en su aplicación y pasarlo al correo de iPhone, sin iniciar la aplicación de correo o dejar la suya. También puede implementar SMTP en su aplicación para enviar correos electrónicos directamente. También puede transferir su correo electrónico a un servidor web y hacer que el servidor web lo envíe. El más fácil es la primera forma. El inconveniente es que no se sabe realmente si el mensaje se envió o no, lo que depende de si la red estaba operativa o no y de otros factores. Por supuesto, si va con su propio código SMTP, tendrá que manejar todas las colas y volver a intentarlo en caso de que la red o el servidor no estén disponibles, y eso significa que su aplicación debe estar ejecutándose para poder hacerlo.

De Apple's docs:

La clase MFMailComposeViewController proporciona una interfaz estándar que gestiona la edición y el envío de un mensaje de correo electrónico. Puede usar este controlador de vista para mostrar una vista de correo electrónico estándar dentro de su aplicación y rellenar los campos de esa vista con valores iniciales, como el asunto, los destinatarios del correo electrónico, el texto del cuerpo y los archivos adjuntos. El usuario puede editar los contenidos iniciales que especifique y elegir enviar el correo electrónico o cancelar la operación.

+0

gracias, probablemente intente primero usar MFMailComposeViewController sin iniciar la aplicación de correo, entonces ... – sami

9

Aquí hay un código de muestra para enviar correos electrónicos usando 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

Agregar marco en el buildphases MessageUI.framework archivo

ViewController.h

#import <MessageUI/MessageUI.h> 

    @interface ViewController() <MFMailComposeViewControllerDelegate> 

archivo 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]; 
     } 
Cuestiones relacionadas