无法使用MFMailComposeViewController从应用程序发送电子邮件

编程入门 行业动态 更新时间:2024-10-25 09:34:26
本文介绍了无法使用MFMailComposeViewController从应用程序发送电子邮件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我正在努力尝试从我的应用发送电子邮件。 我在iCodeBlog上尝试了这段代码( icodeblog/2009/11/18/iphone-coding-tutorial-in-application-emailing/ )

I'm having some hard time trying to send an email from my app. I tried this code from iCodeBlog (icodeblog/2009/11/18/iphone-coding-tutorial-in-application-emailing/)

-(void)sendEmail:(id)sender { MFMailComposeViewController *mail = [[MFMailComposeViewController alloc] init]; mail.mailComposeDelegate = self; if ([MFMailComposeViewController canSendMail]) { //Setting up the Subject, recipients, and message body. [mail setToRecipients:[NSArray arrayWithObjects:@"myEmail@email",nil]]; [mail setSubject:@"Subject of Email"]; [mail setMessageBody:@"Message of email" isHTML:NO]; //Present the mail view controller [self presentModalViewController:mail animated:YES]; } //release the mail [mail release]; } //This is one of the delegate methods that handles success or failure //and dismisses the mail - (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error { [self dismissModalViewControllerAnimated:YES]; if (result == MFMailComposeResultFailed) { UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Message Failed!" message:@"Your email has failed to send" delegate:self cancelButtonTitle:@"Dismiss" otherButtonTitles:nil]; [alert show]; [alert release]; } }

它说它发送电子邮件并且没有发生错误但我从未得到过收件箱中的电子邮件。 我尝试将它们发送到不同的电子邮件帐户并尝试从不同的帐户发送它们,没有发生错误但我从未收到电子邮件。 任何想法?

It says it send the email and no error occurs but I never get the email in my inbox. I tried sending them to different email accounts and tried sending them from different accounts as well, no error occurs but I never get the email. Any ideas?

如果这很重要,当我开始输入To:email

If it's important, I get this message on the Debugger Console when I start typing the To: email

DA |无法在/tmp/DAAccountsLoading.lock处打开锁定文件。无论如何我们都会加载帐户,但可能会发生不好的事情

DA|Could not open the lock file at /tmp/DAAccountsLoading.lock. We'll load the accounts anyway, but bad things may happen

=====编辑======

===== EDIT ======

我刚刚意识到所有这些电子邮件都是通过Mail.app发送到我的发件箱的。点击发送时是不是会自动发送?如果没有,那么当用户按下MFMailComposeView上的发送按钮时,我该怎么做才能发送它们?或者调用Mail.app并发送这些电子邮件。

I just realized that all those emails were sent to my Outbox on Mail.app. Aren't they sent automatically when I click send? If not, then what can I do to make them be sent when the user presses the Send button on MFMailComposeView? Or perhaps call the Mail.app and make those emails be sent.

推荐答案

使用此代码肯定会有效:

Use this code this will definitely work:

-(IBAction)send{ [self callMailComposer]; } -(void)callMailComposer{ Class mailClass = (NSClassFromString(@"MFMailComposeViewController")); if (mailClass != nil) { // We must always check whether the current device is configured for sending emails if ([mailClass canSendMail]) [self displayComposerSheet]; else [self launchMailAppOnDevice]; } else { [self launchMailAppOnDevice]; } } #pragma mark - #pragma mark Compose Mail #pragma mark // Displays an email composition interface inside the application. Populates all the Mail fields. -(void)displayComposerSheet{ MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init]; picker.mailComposeDelegate = self; NSString *tosubject =@""; [picker setSubject:tosubject]; // Set up recipients [picker setCcRecipients:nil]; [picker setBccRecipients:nil]; [picker setToRecipients:nil]; [picker setMessageBody:strNewsLink isHTML:NO]; [self presentModalViewController:picker animated:YES]; if(picker) [picker release]; if(picker) picker=nil; } // Dismisses the email composition interface when users tap Cancel or Send. Proceeds to update the message field with the result of the operation. - (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error { NSString* alertMessage; // message.hidden = NO; // Notifies users about errors associated with the interface switch (result) { case MFMailComposeResultCancelled: alertMessage = @"Email composition cancelled"; break; case MFMailComposeResultSaved: alertMessage = @"Your e-mail has been saved successfully"; break; case MFMailComposeResultSent: alertMessage = @"Your email has been sent successfully"; break; case MFMailComposeResultFailed: alertMessage = @"Failed to send email"; break; default: alertMessage = @"Email Not Sent"; break; } UIAlertView* alertView = [[UIAlertView alloc] initWithTitle:@"My app name" message:alertMessage delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; [alertView show]; [self dismissModalViewControllerAnimated:YES]; } #pragma mark #pragma mark Workaround #pragma mark // Launches the Mail application on the device. -(void)launchMailAppOnDevice{ NSString *recipients = @"mailto:?cc=&subject="; NSString *body = @"&body="; NSString *email = [NSString stringWithFormat:@"%@%@", recipients, body]; email = [email stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; [[UIApplication sharedApplication] openURL:[NSURL URLWithString:email]]; }

更多推荐

无法使用MFMailComposeViewController从应用程序发送电子邮件

本文发布于:2023-10-13 00:22:05,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1486282.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:应用程序   发送电子邮件   MFMailComposeViewController

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!