5

Deseo enviar correo desde mi aplicación de iPhone personalizada. He usado MFMailComposeViewController para enviar correos desde mi iphone en mi aplicación anterior. Ahora, no quiero mostrar el MFMailComposeViewController al usuario, si hacen clic en Send Mail button, el correo se envía automáticamente al recipient mail address. ¿Cómo puedo hacer esto? ¿Puedes por favor ayudarme en esto? Gracias por adelantado.¿Cómo enviar correo desde la aplicación iphone sin mostrar MFMailComposeViewController?

he utilizado a continuación código para mostrar el MFMailComposeViewController,

MFMailComposeViewController *controller = [[MFMailComposeViewController alloc] init]; 
controller.mailComposeDelegate = self; 
[controller setSubject:@"Details"]; 
[controller setMessageBody:@"Hi" isHTML:NO]; 
[controller setToRecipients:[NSArray arrayWithObjects:@"[email protected]", nil]]; 
[self presentModalViewController:controller animated:YES]; 
[controller release]; 

Respuesta

13

envío de correos electrónicos mediante programación, sin intervención del usuario, desde una aplicación iPhone, no pueden implementarse usando cualquiera de los marcos de Apple. Podría ser posible en un teléfono con jailbreak, pero nunca vería el interior de la App Store.

Si desea controlar el envío de correo electrónico, una forma mejor sería configurar un servicio web (en su extremo del servidor) que pueda publicar utilizando una solicitud HTTP. Si está publicando en una sola dirección, esto puede funcionar muy bien, aunque es posible que desee que el usuario ingrese su dirección de correo de devolución.

De lo contrario, solo está disponible el diálogo estándar (esto depende de usar cualquier cuenta que hayan configurado en el dispositivo).

+0

¿Puede darnos más detalles sobre su respuesta? Hay muestras disponibles en esto? También estoy luchando para enviar correos. Gracias. – Gopinath

+0

Como ya he dicho, sin el consentimiento de los usuarios no hay forma de que puedan enviar correos electrónicos desde dispositivos con iOS. Entonces, ¿qué más quieres? –

+0

Sí, lo tengo entendido. Gracias. – Gopinath

3

El iOS SDK ha hecho que sea muy fácil enviar correos electrónicos utilizando las API integradas. Con algunas líneas de códigos, puede iniciar la misma interfaz de correo electrónico que la aplicación de correo de valores que le permite redactar un correo electrónico. Puede abrir el formulario de compositor de correo, escribir un mensaje y puede enviar correo simple o archivo adjunto utilizando la clase MFMailComposeViewController. Para más información: Envío de correo electrónico desde su aplicación iOS

Pero, en esta sección lo que voy a explicar es sobre el envío de correos electrónicos sin mostrar la hoja del autor del correo, es decir. enviando correos electrónicos en segundo plano. Para esta función, no podemos usar la clase MFMailComposer nativa de iOS porque no nos permite enviar correos electrónicos en segundo plano sino que muestra la vista del autor del correo desde donde el usuario tiene que tocar el botón "enviar", por lo que para esta sección voy a use SKPSMTPMessage Library para enviar correos electrónicos en segundo plano, sin embargo, la cuenta de correo electrónico debe estar codificada en este método.

Limitaciones:

dirección de correo electrónico del remitente/receptor tiene que ser hardcoded o tiene que agarrar el uso de algunos pop-up forma en su aplicación en la dirección de correo electrónico entradas del usuario emisor/receptor. Además, las credenciales de la cuenta del remitente también deben estar codificadas, ya que no hay forma de que podamos obtenerlas de la configuración del dispositivo.

Método:

  1. importación CFNetwork.framework a su proyecto.
  2. Incluir import "SKPSMTPMessage.h" import "NSData + Base64Additions.h" // para la codificación Base64
  3. Incluir a su ViewController
  4. descarga Biblioteca SKPSMTPMessage de
    https://github.com/jetseven/skpsmtpmessage
  5. de arrastrar y soltar Carpeta "SMTPLibrary" que ha descargado en su proyecto.

    Antes de continuar, le informamos que estoy usando la dirección de correo electrónico del remitente/receptor y la contraseña del remitente codificadas en el código para este ejemplo.Sin embargo, puede obtener estas credenciales del usuario, lo que le permite ingresar en algún tipo de formulario (usando UIViews).

    -(void) sendEmailInBackground { 
        NSLog(@"Start Sending"); 
        SKPSMTPMessage *emailMessage = [[SKPSMTPMessage alloc] init]; 
        emailMessage.fromEmail = @"[email protected]"; //sender email address 
        emailMessage.toEmail = @"[email protected]"; //receiver email address 
        emailMessage.relayHost = @"smtp.gmail.com"; 
        //emailMessage.ccEmail [email protected]"your cc address"; 
        //emailMessage.bccEmail [email protected]"your bcc address"; 
        emailMessage.requiresAuth = YES; 
        emailMessage.login = @"[email protected]"; //sender email address 
        emailMessage.pass = @"Passwxxxx"; //sender email password 
        emailMessage.subject [email protected]"@"email subject header message"; 
        emailMessage.wantsSecure = YES; 
        emailMessage.delegate = self; // you must include <SKPSMTPMessageDelegate> to your class 
        NSString *messageBody = @"your email body message"; 
        //for example : NSString *messageBody = [NSString stringWithFormat:@"Tour Name: %@\nName: %@\nEmail: %@\nContact No: %@\nAddress: %@\nNote: %@",selectedTour,nameField.text,emailField.text,foneField.text,addField.text,txtView.text]; 
        // Now creating plain text email message 
        NSDictionary *plainMsg = [NSDictionary dictionaryWithObjectsAndKeys:@"text/plain",kSKPSMTPPartContentTypeKey, messageBody,kSKPSMTPPartMessageKey,@"8bit",kSKPSMTPPartContentTransferEncodingKey,nil]; 
        emailMessage.parts = [NSArray arrayWithObjects:plainMsg,nil]; 
        //in addition : Logic for attaching file with email message. 
        /* 
        NSString *filePath = [[NSBundle mainBundle] pathForResource:@"filename" ofType:@"JPG"]; 
        NSData *fileData = [NSData dataWithContentsOfFile:filePath]; 
        NSDictionary *fileMsg = [NSDictionary dictionaryWithObjectsAndKeys:@"text/directory;\r\n\tx- unix-mode=0644;\r\n\tname=\"filename.JPG\"",kSKPSMTPPartContentTypeKey,@"attachment;\r\n\tfilename=\"filename.JPG\"",kSKPSMTPPartContentDispositionKey,[fileData encodeBase64ForData],kSKPSMTPPartMessageKey,@"base64",kSKPSMTPPartContentTransferEncodingKey,nil]; 
        emailMessage.parts = [NSArray arrayWithObjects:plainMsg,fileMsg,nil]; //including plain msg and attached file msg 
        */ 
        [emailMessage send]; 
        // sending email- will take little time to send so its better to use indicator with message showing sending... 
    } 
    

Ahora, el manejo de métodos de delegado:

// En caso de éxito

-(void)messageSent:(SKPSMTPMessage *)message{ 
    NSLog(@"delegate - message sent"); 
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Message sent." message:nil delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles: nil]; 
    [alert show]; 
} 

// El fracaso

-(void)messageFailed:(SKPSMTPMessage *)message error:(NSError *)error{ 
// open an alert with just an OK button 
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error!" message:[error localizedDescription] delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles: nil]; 
    [alert show]; 
    NSLog(@"delegate - error(%d): %@", [error code], [error localizedDescription]); 
} 

Ok, eso es todo desde el lado de codificación . Espero que este tutorial pueda serle útil guyz

+1

Funciona bien. Acabo de cambiar un código que no es ARC. También he cambiado la configuración de la cuenta de correo de google del remitente a "Permitir el acceso a aplicaciones menos seguras". – Panayot

Cuestiones relacionadas