如何实现程序调用系统邮件,发送app中抓取的xml图片和内容到指定的邮箱?
这里要感谢无聊给与的无私帮助,ok,下面详述思路过程和发放核心代码:
1.思路:你首先要了解,如何调用ios系统邮件,用到哪些协议,类,函数,这里我直接给出,你要在触发发送邮件的view类中加入MFMailComposeViewControllerDelegate委托协议,这样我们才可以调用系统发送邮件的displayComposerSheet函数来编辑要发送的邮件,调用launchMailAppOnDevice函数来发送邮件。
2.既然思路清晰了,现在的问题就是如何设计实现了,我的方法是想通过alertView上一个自绘的按钮来完成触发系统的发邮件功能,即是:[okbtn addTarget: self action: @selector(sendEMail) forControlEvents: UIControlEventTouchUpInside];这句话中的selector调用了一个sendEmail自定义函数,实现点击ok按钮后,打开系统邮件发送功能。下面是具体发送代码:
-(void)sendEMail
{
Class mailClass = (NSClassFromString(@"MFMailComposeViewController"));
if (mailClass != nil)
{
if ([mailClass canSendMail])
{
[self displayComposerSheet];
}
else
{
[self launchMailAppOnDevice];
}
}
else
{
[self launchMailAppOnDevice];
}
}
这段代码很简,,就是先判断系统邮件功能是否可用,满足条件就执行上文提到的两个具体的函数完成编辑发送邮件的功能,源码如下:
//可以发送邮件的话
-(void)displayComposerSheet
{
MFMailComposeViewController *mailPicker = [[MFMailComposeViewController alloc] init];
mailPicker.mailComposeDelegate = self;
//设置主题
[mailPicker setSubject: @"eMail主题"];
// 添加发送者
NSArray *toRecipients = [NSArray arrayWithObject: @"first@example.com"];
// NSArray *ccRecipients = [NSArray arrayWithObjects:@"second@example.com", @"third@example.com", nil];
//NSArray *bccRecipients = [NSArray arrayWithObject:@"fourth@example.com", nil];
[mailPicker setToRecipients: toRecipients];
// 添加图片
NSData *imageData = UIImagePNGRepresentation(bigimg); // 将bigimg中的jpg转换为png
// NSData *imageData = UIImageJPEGRepresentation(addPic, 1); // jpeg
[mailPicker addAttachmentData: imageData mimeType: @"" fileName: @"mypic.jpg"];
NSString *emailBody = @"eMail 正文";
[mailPicker setMessageBody:emailBody isHTML:YES];
[self presentModalViewController: mailPicker animated:YES];
[mailPicker release];
}
-(void)launchMailAppOnDevice
{
NSString *recipients = @"mailto:first@example.com&subject=my email!";
NSString *body = @"&body=email body!";
NSString *email = [NSString stringWithFormat:@"%@%@", recipients, body];
email = [email stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding];
[[UIApplication sharedApplication] openURL: [NSURL URLWithString:email]];
}
自此就完成我们开始要实现的发送邮件图片,文字的目标了。至于发送是否成功,我们就直接调用协议中的 didFinishWithResult函数即可完成判断,这虽然不是本文的核心,但考虑到代码的完整性也一并放出:
- (void)mailComposeController:(MFMailComposeViewController *)controller
didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error
{
NSString *msg;
switch (result)
{
case MFMailComposeResultCancelled:
msg = @"邮件发送取消";
break;
case MFMailComposeResultSaved:
msg = @"邮件保存成功";
[self alertWithTitle:nil msg:msg];
break;
case MFMailComposeResultSent:
msg = @"邮件发送成功";
[self alertWithTitle:nil msg:msg];
break;
case MFMailComposeResultFailed:
msg = @"邮件发送失败";
[self alertWithTitle:nil msg:msg];
break;
default:
break;
}
[self dismissModalViewControllerAnimated:YES];
}
然后你就可以在你的alertview中直接设置title为msg,就可以告诉用户发送结果成功与否了。
3.由于最近在研究算法方面的工作,可能下一篇关于xml多线程解析的总结会在这个星期五,六出来,然后就是发送图片文字到微博的内容了,这个还没研究,等搞懂了就写东西给大家分享,这里先写着,留作提醒。
4.如有问题请群里讨论,我会尽力予以答复,谢谢各位!