2009-09-29 7 views
5

Wiem, jak wysłać wiadomość e-mail w mojej aplikacji, uruchamiając aplikację Poczta, a następnie wracając do mojej aplikacji ... ale chcę, aby moja aplikacja mogła wysyłać wiadomości e-mail bez otwierania aplikacji pocztowej. Na przykład powinienem mieć przycisk w mojej aplikacji, klikając ten przycisk, aby wysłać wiadomość e-mail. Powiadomię użytkownika, że ​​wiadomość e-mail została wysłana ...Aplikacja iPhone Wyślij e-mail

Czy ktoś to zrobił?

dzięki.

Sami

+0

jak wybrać odbiorców, czy też jest on zakodowany na stałe? – Tim

Odpowiedz

3

Najlepszym sposobem na to jest posiadanie serwera WWW dla Twojej aplikacji, dokłada wysyłania poczty. Przekazywałbyś szczegóły wiadomości e-mail, a twój serwer wyśle ​​ją w imieniu użytkownika.

+0

Masz problem, jeśli nie masz dostępu do serwera WWW. Następnie musisz umieścić wiadomość w kolejce, aby później spróbować ponownie na serwerze internetowym. Ale Twoja aplikacja może nie działać później. W tym miejscu byłoby dobrze, gdyby iPhone pozwalał na przetwarzanie w tle, ograniczając się do, powiedzmy, jeśli ekran jest zablokowany lub nie było interakcji użytkownika przez kilka minut. – mahboudz

4

Masz kilka możliwości. Możesz użyć klasy MFMailComposeViewController firmy Apple (patrz poniżej), która umożliwia utworzenie wiadomości w aplikacji i przesłanie jej do Poczty iPhone'a, bez uruchamiania aplikacji Poczta lub wychodzenia z aplikacji. Możesz także zaimplementować SMTP w swojej aplikacji, aby bezpośrednio wysyłać wiadomości e-mail. Możesz również przekazać swoją pocztę e-mail na serwer internetowy i serwer internetowy wyśle ​​go. Najprostszy jest pierwszy sposób. Wadą jest to, że tak naprawdę nie wiadomo, czy wiadomość została wysłana, czy nie, co zależy od tego, czy sieć działa, czy nie i innych czynników. Oczywiście, jeśli używasz własnego kodu SMTP, będziesz musiał obsłużyć wszystkie kolejkowanie i ponawianie próby w przypadku, gdy sieć lub serwer jest niedostępny, a to oznacza, że ​​twoja aplikacja musi być uruchomiona, aby to zrobić.

Od Apple's docs:

Klasa MFMailComposeViewController zapewnia standardowy interfejs, który zarządza edycję i wysyłanie wiadomości e-mail. Za pomocą tego kontrolera widoku można wyświetlać standardowy widok e-mail w aplikacji i zapełniać pola tego widoku wartościami początkowymi, takimi jak temat, adresaci e-mail, treść i załączniki. Użytkownik może edytować początkową zawartość, którą określisz, i wyśle ​​wiadomość e-mail lub anuluje operację.

+0

dziękuję, prawdopodobnie spróbuję najpierw użyć MFMailComposeViewController bez uruchamiania aplikacji pocztowej, a następnie ... – sami

9

Oto przykładowy kod do wysyłania wiadomości e-mail za pomocą 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

dodawania ramy w buildphases MessageUI.framework

ViewController.h złożyć

#import <MessageUI/MessageUI.h> 

    @interface ViewController() <MFMailComposeViewControllerDelegate> 

plik 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]; 
     }