Sending email from an application using MFMailComposeViewController in MessageUI on iPhone

I am a software developer and I am making an email message application and I have the following code:

// Header file // importing the MessageUI framework #import <MessageUI/MessageUI.h> // adding the delegate functionality to the class (<MFMailComposeViewControllerDelegate>) @interface TutorialProjectViewController : UIViewController <MFMailComposeViewControllerDelegate> { } - (IBAction)pressTheMailButtonDudeFunction:(id)sender // Implementation file - (IBAction)pressTheMailButtonDudeFunction:(id)sender { // allocatind new message composer window MFMailComposeViewController *mc = [[MFMailComposeViewController alloc] init]; // setting a delegate method to "self" mc.mailComposeDelegate = self; // pre-populating the message subject [mc setSubject:@"Send me a message"]; // adding content of the message as a plain text [mc setMessageBody:@"Send me a message is you like this tutorial :)" isHTML:NO]; // adding content of the message as an HTML [mc setMessageBody:@"<p>Send me a message is you like this tutorial :)<p>" isHTML:YES]; // adding recipients [mc setToRecipients:[NSArray arrayWithObjects:@"Fuerte < info@fuerte.cz >", @" info@xprogress.com ", nil]]; // adding recipients for a send copy to (arrayWithObject or arrayWithObjects) [mc setCcRecipients:[NSArray arrayWithObject:@" test@example.com "]]; // adding hidden recipients [mc setBccRecipients:[NSArray arrayWithObject:@" test@example.com "]]; // adding image attachment // getting path for the image we have in the tutorial project NSString *path = [[NSBundle mainBundle] pathForResource:@"Extra_Xcode_100x100" ofType:@"png"]; // loading content of the image into NSData NSData *imageData = [NSData dataWithContentsOfFile:path]; // adding the attachment to he message [mc addAttachmentData:imageData mimeType:@"image/png" fileName:@"Collection"]; // setting different than the default transition for the modal view controller [mc setModalTransitionStyle:UIModalTransitionStyleCrossDissolve]; /* Modal view controllers transitions: UIModalTransitionStyleCoverVertical => pops up from the bottom, default transition UIModalTransitionStyleCrossDissolve => fade on the screen UIModalTransitionStyleFlipHorizontal => page flip */ // displaying our modal view controller on the screen (of course animated has to be set on YES if you want to see any transition) [self presentModalViewController:mc animated:YES]; // releasing the controller [mc release]; } // delegate function callback - (void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error { // switchng the result switch (result) { case MFMailComposeResultCancelled: NSLog(@"Mail send canceled."); /* Execute your code for canceled event here ... */ break; case MFMailComposeResultSaved: NSLog(@"Mail saved."); /* Execute your code for email saved event here ... */ break; case MFMailComposeResultSent: NSLog(@"Mail sent."); /* Execute your code for email sent event here ... */ break; case MFMailComposeResultFailed: NSLog(@"Mail send error: %@.", [error localizedDescription]); /* Execute your code for email send failed event here ... */ break; default: break; } // hide the modal view controller [self dismissModalViewControllerAnimated:YES]; } 

And I do not get the correct answer ... Is this the correct code?

+7
source share
3 answers
  • Make sure you include the MessageUI framework in your iOS project. In Xcode 4, you can enable the framework by selecting your project in the left column. Then select the Build Phases tab. Here you can click on the arrow to the left of "Link Binary With Libraries" and you will see a list of frameworks that are already included in your application. If MessageUI.framework is missing, just add it there.
  • The code you posted looks like the complete tutorial code that was disabled ... so use only the code you need ... and add additional features to it step by step. This way you will see where you add the buggy line of code. Your application may not have an "Extra_Xcode_100x100.png" image.

So here is the "minimal" MFMailComposeViewController:

 - (IBAction)showMinimalModalMailView:(id)sender { // get a new new MailComposeViewController object MFMailComposeViewController *mc = [[MFMailComposeViewController alloc] init]; // his class should be the delegate of the mc mc.mailComposeDelegate = self; // set a mail subject ... but you do not need to do this :) [mc setSubject:@"This is an optional mail subject!"]; // set some basic plain text as the message body ... but you do not need to do this :) [mc setMessageBody:@"This is an optional message body plain text!" isHTML:NO]; // set some recipients ... but you do not need to do this :) [mc setToRecipients:[NSArray arrayWithObjects:@" first.address@test.com ", @" second.address@test.com ", nil]]; // displaying our modal view controller on the screen with standard transition [self presentModalViewController:mc animated:YES]; // be a good memory manager and release mc, as you are responsible for it because your alloc/init [mc release]; } 
+5
source

If you had the same problem, every time I run the application when sending a message, it crashes. I found that if I remove

[mc setToRecipients:[NSArray arrayWithObjects:@" first.address@test.com ", @" second.address@test.com ", nil]];

the line works fine and just asks for an email address.

+2
source

To send e-mail from the application, your device must be configured for the e-mail service.

 // importing the MessageUI framework #import <MessageUI/MessageUI.h> // adding the delegate functionality to the class (<MFMailComposeViewControllerDelegate>) @interface ViewController : UIViewController <MFMailComposeViewControllerDelegate> { } - (IBAction)sendEMailClick:(id)sender { //check mail service is configure to your device or not. if ([MFMailComposeViewController canSendMail]) { // get a new new MailComposeViewController object MFMailComposeViewController * composeVC = [MFMailComposeViewController new]; // his class should be the delegate of the composeVC [composeVC setDelegate:self]; // set a mail subject ... but you do not need to do this :) [composeVC setSubject:@"This is an optional mail subject!"]; // set some basic plain text as the message body ... but you do not need to do this :) [composeVC setMessageBody:@"This is an optional message body plain text!" isHTML:NO]; // set some recipients ... but you do not need to do this :) [composeVC setToRecipients:[NSArray arrayWithObjects:@" first.address@test.com ", @" second.address@test.com ", nil]]; // Present the view controller modally. [self presentViewController:composeVC animated:true completion:nil]; } else { NSLog(@"Mail services are not available or configure to your device"); } } 

after sending or canceling email, click MFMailComposeViewController delegate method MFMailComposeViewControllerDelegate is a call, so you can check the status of sending emails.

 #pragma mark - MFMailComposeViewControllerDelegate Methode. - (void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(nullable 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.description); break; } // Dismiss the mail compose view controller. [controller dismissViewControllerAnimated:true completion:nil]; } 
0
source

All Articles