Joseph Tura
Joseph Tura

Reputation: 6360

MFMailComposeViewController does not send mail

I am trying to send mail using MFMailComposeViewController. Everything works, except that mails do not get sent, and I always get MFMailComposeResultFailed.

Any pointers? I am NOT using the simulator, and sending mail does work from my device. I do have a connection (testing via Reachability), and [MFMailComposeViewController canSendMail] returns YES.

No compiler warnings in the project, no crashes...

Upvotes: 0

Views: 2702

Answers (3)

Joseph Tura
Joseph Tura

Reputation: 6360

It was a bug in IOS4.

I had both an Exchange mail account and an old, inactive IMAP account on my phone. Apparently, that leads to problems with iOS4. The mails actually were stuck in the outbox. Once I removed the inactive IMAP account, everything worked as expected.

Upvotes: 2

Abdo
Abdo

Reputation: 14051

Some readers might be facing this problem:

Make sure you implement the <MFMailComposeViewControllerDelegate> protocol

Here's the code:

// in TestViewController.h
@interface TestViewController : UIViewController<MFMailComposeViewControllerDelegate>
@end

// in TestViewController.m
@interface TestViewController ()
@end

@implementation
- (void) compose {
    MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init];
    picker.mailComposeDelegate = self;

    [picker setSubject:@"Hello there"];

    [picker setToRecipients:@[]];

    // Fill out the email body text
    NSString *emailBody = @"Hello, sending a message from my app";

    [picker setMessageBody:emailBody isHTML:NO];

    // use this function. presentModalViewController:... is deprecated
    [self presentViewController:picker animated:YES completion:nil];
}

- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error
{
    [self dismissViewControllerAnimated:YES completion:nil];
}
@end

Upvotes: 1

Massimo Cafaro
Massimo Cafaro

Reputation: 25419

It's difficult to tell without seeing a code snippet, however you should check the following:

1) you have correctly set the MFMailComposeViewController's delegate and implemented its delegate methods;

2) you have set the mail subject using setSubject:

3) you have set the message body using setMessageBody:isHTML:

and optionally set an attach using addAttachmentData:mimeType:fileName:

4) you have presented to the user your mail compose view controller using something like

[self presentModalViewController:mcvc animated:YES];

Hope this helps.

Upvotes: 0

Related Questions