0

我基于 Apple 的“Tabster”示例代码创建了一个应用程序。该应用程序运行良好,但我想向它添加电子邮件。我创建了一个电子邮件应用程序。并尝试了我能想到的所有方法,从教程中学习或阅读,但它不断崩溃。我在 Apple Dev 上提出了这个问题。论坛和几个回应是简单地“将文件复制到现有的应用程序。你应该很好。” 显然不是这么简单。我已经添加了 MessageUI 框架并尝试以多种不同的方式复制文件,但我仍然卡住了。今天是星期五,这个问题从星期一开始就一直困扰着我。我猜第一部分是有 2 个 main.m 文件,我尝试将它们组合起来,我尝试将邮件的 main.m 文件重命名为 emailmain.m。我不知道还能尝试什么。

令我惊讶的是,所有关于在 iOS 应用程序中创建电子邮件的文档和教程都从创建新应用程序开始。我错过了什么?如何将电子邮件添加到功能齐全的应用程序中。我将不胜感激有关该主题的任何指导、文献链接或教程。

我能得到的任何帮助将不胜感激。我还想添加其他几种类型的东西,但我什至无法在其中实现电子邮件!

感谢您提供的帮助。约翰

4

3 回答 3

3

这是我一直使用的方法。它应该能够简单而干净地添加到任何 UIViewController 中。

导入您的框架:

#import <MessageUI/MessageUI.h>

确保在界面中包含您的委托:

@interface MyViewController : UIViewController <MFMailComposeViewControllerDelegate>

然后在您的实现中添加此方法或变体,如果您需要它是 IBAction 或类似的东西:

- (void)sendEmail
{    
    if ([MFMailComposeViewController canSendMail]) {
        MFMailComposeViewController *email = [[MFMailComposeViewController alloc] init];
        email.mailComposeDelegate = self;

        [email setSubject:@"My Email Subject"];

        [email setMessageBody:@"My message body." isHTML:NO];

        [self presentModalViewController:email animated:YES];

    } else {
        UIAlertView *emailAlert = [[UIAlertView alloc] initWithTitle:@"Email Failure" message:@"Your device is not configured to send email" delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil];
        [emailAlert show];
    }
}

你可以在按钮点击或任何你想要的时候调用这个方法。它将打开一个电子邮件编辑器视图,您的用户可以在其中点击发送。

于 2012-05-11T20:03:38.543 回答
0

这是创建带有图像作为附件的电子邮件的示例代码。您可以根据需要对其进行修改。

-(void)createEmail 
    {
    NSMutableString *emailBody = [[[NSMutableString alloc] initWithString:@"<html><body>"] retain];
       [emailBody appendString:@"<p>Some email body text can go here</p>"];
       UIImage *emailImage = [UIImage imageNamed:@"myImageName.png"];
       NSData *imageData = [NSData dataWithData:UIImagePNGRepresentation(emailImage)];

       NSString *base64String = [imageData base64EncodedString];
      [emailBody appendString:[NSString stringWithFormat:@"<p><b><img src='data:image/png;base64,%@'></b></p>",base64String]];
      [emailBody appendString:@"</body></html>"];
        NSLog(@"%@",emailBody);

     //mail composer window
        MFMailComposeViewController *emailDialog = [[MFMailComposeViewController alloc] init];
        emailDialog.mailComposeDelegate = self;
        [emailDialog setSubject:@"My Inline Image Document"];
        [emailDialog setMessageBody:emailBody isHTML:YES];

        [self presentModalViewController:emailDialog animated:YES];
        [emailDialog release];
        [emailBody release];
    }
于 2012-05-11T20:18:29.267 回答
0

您需要导入 MessageUI 框架。无论您想在哪里使用它,都将其导入相应的 .h 文件并设置 MFMailComposeViewControllerDelegate。

#import <MessageUI/MessageUI.h>
@interface ViewController : UIViewController <MFMailComposeViewControllerDelegate>

然后,当您要发送消息时,请在 .m 文件中使用以下代码:

MFMailComposeViewController *mailViewController = [[MFMailComposeViewController alloc] init];
mailViewController.mailComposeDelegate = self;

// Optional Configuration Parameters to make life easier for the user
[mailViewController setSubject:subjectString];
[mailViewController setMessageBody:messageString isHTML:YES];
[mailViewController setToRecipients:recipientsArray];

// Present the VIew Controller and clean up after ourselves
[self presentModalViewController:mailViewController animated:YES];
[mailViewController release];

添加适当的委托方法,您可以在发送电子邮件后使用它来关闭控制器:

-(void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error {
    [self dismissModalViewControllerAnimated:YES];
}
于 2012-05-11T20:07:10.567 回答