2009-09-29 28 views
5

Ich weiß, wie man eine E-Mail innerhalb meiner App sendet, indem ich die Mail App starte und dann zu meiner App zurückkomme ... aber ich möchte meine App in der Lage sein, E-Mails zu versenden, ohne die Mail App zu öffnen. Zum Beispiel würde ich eine Schaltfläche in meiner App haben, klicken Sie auf diese Schaltfläche würde eine E-Mail senden. Ich werde dann den Benutzer benachrichtigen, dass die E-Mail gesendet wurde ...iphone app sende email

Hat jemand das getan?

danke.

Sami

+0

Wie wählen Sie Empfänger oder ist es fest codiert? – Tim

Antwort

3

Der beste Weg, dies zu tun ist, einen Webserver für Ihre App zu haben, die die E-Mail zu senden hat. Sie geben die Details der E-Mail weiter und lassen sie von Ihrem Server im Namen des Benutzers senden.

+0

Sie haben ein Problem, wenn Sie nicht auf den Webserver zugreifen können. Dann müssen Sie die Nachricht für einen späteren Wiederholungsversuch auf dem Webserver einreihen. Aber Ihre App wird möglicherweise nicht später ausgeführt. An dieser Stelle wäre es gut, wenn das iPhone eine Hintergrundverarbeitung erlaubt, die beispielsweise auf den Bildschirm beschränkt ist oder für wenige Minuten keine Benutzerinteraktion stattgefunden hat. – mahboudz

4

Sie haben ein paar Möglichkeiten. Sie können Apples MFMailComposeViewController-Klasse (siehe unten) verwenden, mit der Sie eine Nachricht in Ihrer App erstellen und an die Mail des iPhones übergeben können, ohne die Mail-App zu starten oder Ihre App zu verlassen. Sie können SMTP auch in Ihrer App implementieren, um E-Mails direkt zu senden. Sie können Ihre E-Mail auch an einen Webserver übergeben und vom Webserver verschicken lassen. Am einfachsten ist der erste Weg. Der Nachteil ist, dass Sie nicht wirklich wissen, ob die Nachricht gesendet wurde oder nicht, was davon abhängt, ob das Netzwerk betriebsbereit war oder nicht und andere Faktoren. Natürlich, wenn Sie mit Ihrem eigenen SMTP-Code gehen, müssen Sie alle Warteschlangen und Wiederholungsversuche durchführen, falls das Netzwerk oder der Server nicht verfügbar ist, und das bedeutet, dass Ihre App ausgeführt werden muss, um dies zu tun.

Von Apple's docs:

Die MFMailComposeViewController-Klasse stellt eine Standardschnittstelle, die das Bearbeiten und Versenden einer E-Mail verwaltet. Sie können diesen Ansichtscontroller verwenden, um eine Standard-E-Mail-Ansicht in Ihrer Anwendung anzuzeigen und die Felder dieser Ansicht mit Anfangswerten wie Betreff, E-Mail-Empfänger, Nachrichtentext und Anlagen zu füllen. Der Benutzer kann die von Ihnen angegebenen anfänglichen Inhalte bearbeiten und auswählen, ob die E-Mail gesendet oder der Vorgang abgebrochen werden soll.

+0

danke, ich werde wahrscheinlich zuerst mit MFMailComposeViewController versuchen, ohne die Mail-App dann zu starten ... – sami

9

Hier ist ein Beispielcode zum Senden von E-Mails mit 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

Add Rahmen in buildphases MessageUI.framework

ViewController.h Datei

#import <MessageUI/MessageUI.h> 

    @interface ViewController() <MFMailComposeViewControllerDelegate> 

ViewController.m Datei

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