2011-08-17 11 views
10

He estado buscando un marco para simplemente permitirme enviar un correo electrónico desde mi aplicación. He intentado MailCore, Pantomime y SKPSMTP todo sin suerte. No puedo hacer que compilen en Xcode, así que supuse que estaban desactualizados. ¿Hay alguna manera de que pueda hacer esto? ¿Si es así, cómo? Gracias.Xcode 4/iOS - Enviar un correo electrónico usando SMTP desde mi aplicación

+0

Hay una manera de mostrar un nuevo cuadro de correo electrónico en su aplicación con su contenido, pero el usuario controla si enviarlo. No estoy seguro de que la implementación de su propio SMTP dentro de una aplicación sea aprobada por Apple. – Dani

+0

Quizás no, pero hay muchas aplicaciones que implementan esto no están allí? El contexto en el que se encuentra es un formulario de reserva para un hotel. Entonces, si agrego un botón de enviar, y Apple veo que no estoy haciendo nada desagradable, no veo ninguna razón por la que sea rechazado. A menos que me haya perdido algo en las pautas. Gracias por tu aporte. –

+0

He compilado el código SKPSMTP con éxito. Intente agregar los archivos .m explícitamente a Build Fhases/Compile Sources. – Ellis

Respuesta

18

Puede enviar fácilmente correos electrónicos desde su dispositivo iOS. No es necesario implementar SMTP y todo. Lo mejor de usar las funciones de correo electrónico incorporado en iOS es que le da acceso a la libreta de direcciones. Por lo tanto, completa automáticamente los nombres, las direcciones de correo electrónico. Yaaiiii !!

Incluir, AddressBook, AddressBookUI y MessageUI marcos y código algo como esto. Tenga en cuenta que incluso puede elegir enviar contenido como HTML también.

#import <MessageUI/MessageUI.h> 
#import <AddressBook/AddressBook.h> 
#import <AddressBookUI/AddressBookUI.h> 

MFMailComposeViewController *mailComposer; 
mailComposer = [[MFMailComposeViewController alloc] init]; 
mailComposer.mailComposeDelegate = self; 
[mailComposer setModalPresentationStyle:UIModalPresentationFormSheet]; 
[mailComposer setSubject:@"your custom subject"]; 
[mailComposer setMessageBody:@"your custom body content" isHTML:NO]; 
[self presentModalViewController:mailComposer animated:YES]; 
[mailComposer release]; 

En aras de la exhaustividad, tengo que escribir este selector para cerrar la ventana de correo electrónico si el usuario presiona cancel o send -

- (void)mailComposeController:(MFMailComposeViewController*)controller 
      didFinishWithResult:(MFMailComposeResult)result 
         error:(NSError*)error 
{ 
    if(error) NSLog(@"ERROR - mailComposeController: %@", [error localizedDescription]); 
    [self dismissModalViewControllerAnimated:YES]; 
    return; 
} 

codificación feliz ...

+0

¡Gracias por su respuesta detallada y algo humorística! :) ¿Esto traerá la pantalla de correo desde la parte inferior o la enviará silenciosamente en segundo plano? Porque estoy apuntando a lo último. –

1

lo haría imagine que la forma de hacerlo de Apple Approved sería enviar los datos a un servidor a través de HTTP Post, y hacer que el servidor genere el correo para usted. He visto a otros haciendo preguntas similares a esto, y la respuesta es que si lo envía desde el dispositivo, realmente necesita avisarle al usuario.

Incluso puedo decirle por qué esto es: Imagine una aplicación que podría enviarse a todos en su libreta de direcciones sin su confirmación, diciéndoles que acaba de instalar la aplicación X, y ellos también deberían hacerlo. Incluso si tiene buenas intenciones, esto podría crear rápidamente una gran tormenta SMTP, y en esencia, este sería el virus "Te amo".

Eso fue una tensión suficiente en el Internet público, pero en los operadores inalámbricos, podría causar rápidamente una sobrecarga suficiente para bloquear el servicio de cel.

Conclusión: Use el ComposeViewController como lo sugiere @Srikar, o bien envíe los datos a su servidor y envíelos desde allí.

+0

Entiendo eso, pero si no fuera a utilizar los marcos incorporados de apple, entonces no necesitaría acceder a la libreta de direcciones. Solo uno por correo electrónico y uno por correo electrónico. Pero si esto no es posible, solo tendré que hacer que el usuario complete el formulario y se genere el correo electrónico solo para presionar Enviar. –

4

SKPSMTPMessage funciona bien para enviar correos electrónicos sin la necesidad de una IU .

Asegúrese de agregar una referencia al CFNetwork.framework en su proyecto. De lo contrario, obtendrás errores de compilación.

+3

Utilicé este 'SKPSMTPMessage'. Pero necesita codificar el nombre de usuario y la contraseña. Pero quiero enviar el correo electrónico usando una cuenta de correo electrónico ya iniciada en el iPhone. Cómo puedo hacer eso – iDia

6

Cabe señalar que MFMailComposeViewController tiene un método llamado canSendMail. Si no marca esto antes de presentar un MFMailComposeViewController en un dispositivo que no tiene una cuenta de correo electrónico, obtendrá un SIGABRT.

Es fácil pasar esto por alto al probar en el dispositivo o el simulador, ya que probablemente tenga una cuenta de correo electrónico en su Mac y su iPad.

Cuestiones relacionadas