序言:app內(nèi)部調(diào)用系統(tǒng)郵件發(fā)送和分享文件,其中文件作為郵件附件發(fā)送的email目標(biāo)地址饿肺,使用了MessageUI Framework蒋困。
- 查看MessageUI框架,包含<MessageUI/MFMailComposeViewController.h>
<MessageUI/MFMessageComposeViewController.h>敬辣,前者是郵件發(fā)送雪标,后者是短信發(fā)送零院,設(shè)計(jì)架構(gòu)都是一致的。今天我主要整理郵件發(fā)送和分享文件村刨。 - 使用的簡(jiǎn)要步驟暫且如下表述:
1.判斷系統(tǒng)是否配置郵箱賬戶等告抄;
2.MFMailComposeViewController實(shí)例并設(shè)置代理(需要注意是:代理屬性是mailComposeDelegate,不是delegate嵌牺,如果不小心寫(xiě)成了delegate就是UINavigationControllerDelegate的代理打洼,而不是我們要的MFMailComposeViewControllerDelegate),并實(shí)現(xiàn)代理方法逆粹,處理取消發(fā)送募疮、發(fā)送成功及發(fā)送失敗等情況。
3.設(shè)置郵件主題僻弹、收件人阿浓、抄送和密送人等,這些也可以在稍后彈出來(lái)的系統(tǒng)UI由用戶自行輸入或添加蹋绽。
4.通過(guò)addAttachmentData設(shè)置郵件的附件數(shù)據(jù)芭毙,也就是我們要發(fā)送和分享的文件。
5.將以上定制的MFMailComposeViewController實(shí)例實(shí)例present出來(lái)卸耘。 - 以下是具體實(shí)現(xiàn)的代碼
##pragma mark - 郵件分享方法
#- (void)shareByEmail{
MFMailComposeViewController *mailSender = [[MFMailComposeViewController alloc]init];
mailSender.mailComposeDelegate = self;
[mailSender setSubject:NKLocalizedString(@"EmailFromMyApp")];
//以下為具體業(yè)務(wù)代碼
data = [NSData dataWithContentsOfFile:path];//文件數(shù)據(jù)
NSString *extension;//文件類(lèi)型識(shí)別字符串退敦,如文件擴(kuò)展名
NSString *mimeType = nil;//這個(gè)不能錯(cuò),錯(cuò)了的話會(huì)閃退
if ([extension isEqualToString:@"MOV"] || [extension isEqualToString:@"MP4"]) {
mimeType = @"video/quicktime";
}else if ([extension isEqualToString:@"MP3"] || [extension isEqualToString:@"M4A"]) {
mimeType = @"audio/mpeg3";
}else if ([extension isEqualToString:@"JPG"] || [extension isEqualToString:@"JPEG"]) {
mimeType = @"image/jpeg";
}else if ([extension isEqualToString:@"PNG"]) {
mimeType = @"image/png";
}else if ([extension isEqualToString:@"TXT"]) {
mimeType = @"text/plain";
}else if ([extension isEqualToString:@"PDF"]) {
mimeType = @"application/pdf";
}else if ([extension isEqualToString:@"DOC"] || [extension isEqualToString:@"DOCX"]) {
mimeType = @"application/msword";
}else if ([extension isEqualToString:@"XLS"] || [extension isEqualToString:@"XLSX"]) {
mimeType = @"application/vnd.ms-exceld";
}else if ([extension isEqualToString:@"PPT"] || [extension isEqualToString:@"PPTX"]) {
mimeType = @"application/vnd.ms-powerpoint";
}else if ([extension isEqualToString:@"ZIP"]) {
mimeType = @"application/zip";
}else{
return ;
}
[mailSender addAttachmentData:data mimeType:mimeType fileName:name];
}
[self presentViewController:mailSender animated:YES completion:nil];
}
##pragma mark - MFMailComposeViewControllerDelegate
#- (void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error
{
[controller dismissViewControllerAnimated:YES completion:nil];
switch (result) {
case MFMailComposeResultCancelled:
{
}
break;
case MFMailComposeResultSaved:
{
}
break;
case MFMailComposeResultSent:
{
showAlertMessage(nil, LocalizedString(@"HaveSent"));
}
break;
case MFMailComposeResultFailed:
{
}
break;
}
}