2010-08-03 14 views
0

J'essaye d'envoyer du courrier en utilisant MFMailComposeViewController. Tout fonctionne, sauf que les mails ne sont pas envoyés, et je reçois toujours MFMailComposeResultFailed.MFMailComposeViewController n'envoie pas de courrier

Des pointeurs? Je n'utilise pas le simulateur, et l'envoi de courrier fonctionne à partir de mon appareil. J'ai une connexion (test via Reachability), et [MFMailComposeViewController canSendMail] renvoie YES.

Aucun avertissement du compilateur du projet, aucun accident ...

Répondre

2

C'était un bug dans IOS4.

J'avais à la fois un compte de messagerie Exchange et un ancien compte IMAP inactif sur mon téléphone. Apparemment, cela conduit à des problèmes avec iOS4. Les mails étaient en fait bloqués dans la boîte d'envoi. Une fois que j'ai supprimé le compte IMAP inactif, tout a fonctionné comme prévu.

+0

On dirait que le bogue existe toujours en 4.1. Je ne sais pas encore à propos de 4.2. –

0

Il est difficile de dire sans voir un extrait de code, mais vous devez vérifier les points suivants:

1) vous avez correctement le délégué MFMailComposeViewController's et mis en œuvre ses méthodes de délégué;

2) vous avez défini le sujet du mail en utilisant setSubject:

3) vous avez défini le corps du message en utilisant setMessageBody:isHTML:

et éventuellement fixer un vous fixer à l'aide addAttachmentData:mimeType:fileName:

4) ont présenté au l'utilisateur de votre courrier composer contrôleur de vue en utilisant quelque chose comme

[self presentModalViewController:mcvc animated:YES]; 

H ope cela aide.

+1

Oui, je l'avais fait tout ce qui correctement. Il s'avère que c'était un bug dans le système d'exploitation. Voir ma réponse ci-dessous. Merci quand même :) –

1

Certains lecteurs pourraient être confrontés à ce problème:

Assurez-vous de mettre en œuvre le protocole <MFMailComposeViewControllerDelegate>

Voici le 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