How to setToRecipients with MFMailComposeViewController
Asked Answered
P

3

8

I'm trying to get emails that i select to send an email. But i dont know how to setToRecipients which users that i heve selected in the MFMailComposeViewController view.

if ([MFMailComposeViewController canSendMail])
    {
        mailer = [[MFMailComposeViewController alloc] init];

        mailer.mailComposeDelegate = self;
        [mailer setSubject:@"A Message from blablabl"];

        NSMutableArray *usersTo = [[NSMutableArray alloc] init];
        toRecipients = usersTo;
        [mailer setToRecipients:toRecipients];

        NSString *emailBody = @"blablablabal";

        [mailer setMessageBody:emailBody isHTML:YES];

        // only for iPad
        // mailer.modalPresentationStyle = UIModalPresentationPageSheet;

        [self presentModalViewController:mailer animated:YES];
    }
    else
    {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Failure" 
                                                        message:@"Your device doesn't support the composer sheet" 
                                                       delegate:nil 
                                              cancelButtonTitle:@"OK" 
                                              otherButtonTitles: nil];
        [alert show];
    }

Delegate http://pastie.org/3281814

Piano answered 30/1, 2012 at 12:18 Comment(0)
A
29

A couple things are wrong here.

1 )

MFMailComposeViewController's setToRecipients method expects an immutable array with recipients already set.

2 )

And you're setting it to a blank mutable array.

Try something like this:

NSArray *usersTo = [NSArray arrayWithObject: @"[email protected]"];
[mailer setToRecipients:usersTo];

And you should see it work.

Aronow answered 30/1, 2012 at 12:22 Comment(4)
It doesnt work.... "[email protected] & 1 more\U2026", only can get one email because after he put & n users... I'm going to try to resize the uitextfieldPiano
@Michael Dautermann There is no way to send emails when testing the app in Xcode with an IOS simulator since the Mail App is missing from Settings in IOS simulator. When I connect an Iphone device to my Mac, and run the app from Xcode on this device, is there a way to display the screen of my Iphone on the Mac so that I can control the app that is running on the physical device with the mouse and send the emails from the screen shown on mac rather than touching the screen on the Iphone device itself? Many thanksPagano
any API to make predefined recipients readonly? so that user wont be able to add new recipient?Wavell
@SazzadHissainKhan not that I know of! Apple would probably prefer users have control over where e-mail gets sent on a user's behalf.Aronow
D
5
   MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init];
   NSArray *toRecipients = [NSArray arrayWithObjects:@"[email protected]",@"[email protected]",nil];   
   [picker setToRecipients:toRecipients];
Daph answered 30/1, 2012 at 12:28 Comment(0)
I
0
MFMailComposer In “ Swift “ and “ Objective c “
*********************************************
In objective c
Steps:
1. Create new project.
2. Add a button into storyboard.
3. In .h add header file  like “Import <MessageUI/MessageUI.h>”
4. Add delegate to ViewController “ MFMailComposeViewControllerDelegate”

5. In Button Action     {
                            NSString *emailTitle  = “”
                            NSString *messageBody = “”
                            NSArray *toRecipents  = “”                                  
                            MFMailComposeViewController *VC = [[MFMailComposeViewController]alloc init];
                            VC.mailComposeDelegate = self;
                            [VC.setSubject: emailTitle];
                            [VC.setMessageBody: messageBody];
                            [VC.setToRecepents: toRecipents];
           if([MFMailComposeViewController canSendMail]) {
              [self presentViewController:mc animated:YES completion:NULL];
           }

6.MailComposeController Function

       - (void) mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error
{
    switch (result)
    {
        case MFMailComposeResultCancelled:
            NSLog(@"Mail cancelled");
            break;
        case MFMailComposeResultSaved:
            NSLog(@"Mail saved");
            break;
        case MFMailComposeResultSent:
            NSLog(@"Mail sent");
            break;
        case MFMailComposeResultFailed:
            NSLog(@"Mail sent failure: %@", [error localizedDescription]);
            break;
        default:
            break;
    }
    [self dismissViewControllerAnimated:YES completion:NULL];
}

7. And also add  FrameWork: MessageUI.FrameWork

8. Run the App into mobile or Simulator.    




In Swift:
*******
Steps:
1. Create New Project 

2. Add a button Storyboard

3. In ViewController.Swift Class File   Import MessageUI

4. In Button Action  ConfiguredMailComposer below Steps  
      {
        let mailComposeViewController = configuredMailComposeViewController()

        if MFMailComposeViewController.canSendMail() 
{
            self.present(mailComposeViewController, animated: true, completion: nil)
            self.showSendmailSuccesfulAlert()
        } else {

            self.showSendMailErrorAlert()  

        }
5. Implement the configure mail composer 

      func configuredMailComposeViewController() -> MFMailComposeViewController {

        let mailComposerVC = MFMailComposeViewController()
        mailComposerVC.mailComposeDelegate = self 
        mailComposerVC.setToRecipients(["[email protected]"])
        mailComposerVC.setSubject("Sending you an in-app e-mail...")
        mailComposerVC.setMessageBody("Sending e-mail in-app is not so bad!", isHTML: false)
        return mailComposerVC

    }

6. MailComposer optional method

        func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?) {

        controller.dismiss(animated: true, completion: nil)

    }

7. After completed the step no: run the app into device or simulator.
Imco answered 15/9, 2017 at 10:23 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.