Objective C: Send email without leaving app

前端 未结 3 1767
悲哀的现实
悲哀的现实 2020-11-30 22:19

How do I send an email within an app without leaving the app.

This works:

-(void) sendEmailTo:(NSString *)to withSubject:(NSString *)subject withBo         


        
相关标签:
3条回答
  • 2020-11-30 23:00
    1. Add MessageUI framework:

      • Click on the project
      • Select "Build Phases"
      • Expand "Link Binary With Libraries"
      • Click "+" and type "Message" to find "MessageUI" framework, then add.
    2. In current view controller add import and implement a protocol:

      #import <MessageUI/MessageUI.h> 
      #import <MessageUI/MFMailComposeViewController.h> 
      @interface MyViewController : UIViewController<MFMailComposeViewControllerDelegate>
      

    Add methods:

        -(void)sendEmail {
            // From within your active view controller
            if([MFMailComposeViewController canSendMail]) {
                MFMailComposeViewController *mailCont = [[MFMailComposeViewController alloc] init];
                mailCont.mailComposeDelegate = self;        // Required to invoke mailComposeController when send
    
                [mailCont setSubject:@"Email subject"];
                [mailCont setToRecipients:[NSArray arrayWithObject:@"myFriends@email.com"]];
                [mailCont setMessageBody:@"Email message" isHTML:NO];
    
                [self presentViewController:mailCont animated:YES completion:nil];
            }
        }
    
        - (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error {
            [controller dismissViewControllerAnimated:YES completion:nil];
        }
    
    0 讨论(0)
  • 2020-11-30 23:05

    Updated for iOS 6. Please note that this uses ARC and does not use the deprecated modal view presentation:

    #import <MessageUI/MessageUI.h> 
    #import <MessageUI/MFMailComposeViewController.h> 
    @interface MyViewController : UIViewController<MFMailComposeViewControllerDelegate>
    

    And then the code to present the email screen:

    - (IBAction)emailButtonPushed:(id)sender {
    
        if([MFMailComposeViewController canSendMail]) {
            MFMailComposeViewController *mailCont = [[MFMailComposeViewController alloc] init];
            mailCont.mailComposeDelegate = self;
            [mailCont setSubject:@"Your email"];
            [mailCont setMessageBody:[@"Your body for this message is " stringByAppendingString:@" this is awesome"] isHTML:NO];
            [self presentViewController:mailCont animated:YES completion:nil];
        }
    
    }
    
    - (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error {
        //handle any error
        [controller dismissViewControllerAnimated:YES completion:nil];
    }
    
    0 讨论(0)
  • 2020-11-30 23:13

    Yes. Use the MFMailComposeViewController.

    // From within your active view controller
    if([MFMailComposeViewController canSendMail]) {
        MFMailComposeViewController *mailCont = [[MFMailComposeViewController alloc] init];
        mailCont.mailComposeDelegate = self;
    
        [mailCont setSubject:@"yo!"];
        [mailCont setToRecipients:[NSArray arrayWithObject:@"joel@stackoverflow.com"]];
        [mailCont setMessageBody:@"Don't ever want to give you up" isHTML:NO];
        [self presentViewController:mailCont animated:YES completion:nil];
    
    }
    
    
    // Then implement the delegate method
    - (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error {
        [self dismissViewControllerAnimated:YES completion:nil];
    }
    
    0 讨论(0)
提交回复
热议问题