APP应用中发送邮件的方式有两种
方式一
使用"[[UIApplicationsharedApplication]openURL: [NSURL URLWithString:""]]; "
// 邮件接收人
NSString *receiverString = @"mailto:first@example.com";
// 邮件抄送人(注意:拼接使用符号"?")
NSString *ccReceiverString = @"?cc=second@example.com,third@example.com";
// 邮件密送人(注意:拼接使用符号"&")
NSString *bccReceiverString = @"&bcc=second@example.com,third@example.com";
// 邮件标题(注意:拼接使用符号"&")
NSString *title = @"&subject=邮件主题!";
// 邮件内容(注意:拼接使用符号"&")
NSString *content = @"&body=邮件内容!";
NSString *email = [NSString stringWithFormat:@"%@%@%@%@%@", receiverString, ccReceiverString, bccReceiverString, title, content];
email = [email stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding];
NSURL *url = [NSURL URLWithString:email];
[[UIApplication sharedApplication] openURL: url];
方法二
使用MFMailComposeViewController来显示界面
1、添加框架、导入头文件,及设置代理
1-1、添加framework:MessageUi.framework
1-2、引入头文件:#import <MessageUI/MessageUI.h>
1-3、添加协议:MFMailComposeViewControllerDelegate
2、代码示例
if (self.mailPicker == nil)
{
self.mailPicker = [[MFMailComposeViewController alloc] init];
}
// 邮件接收人
NSArray *toRecipients = [NSArray arrayWithObject:@"151311301@qq.com"];
[self.mailPicker setToRecipients: toRecipients];
// 邮件抄送人
NSArray *ccRecipients = [NSArray arrayWithObjects:@"second@example.com", @"third@example.com", nil];
[self.mailPicker setCcRecipients:ccRecipients];
// 邮件密送人
NSArray *bccRecipients = [NSArray arrayWithObjects:@"fourth@example.com", nil];
[self.mailPicker setBccRecipients:bccRecipients];
// 邮件主题
[self.mailPicker setSubject:@"邮件主题"];
// 邮件附件
UIImage *addPic = [UIImage imageNamed:@"123.jpg"];
NSData *imageData = UIImagePNGRepresentation(addPic); // png
// NSData *imageData = UIImageJPEGRepresentation(addPic, 1); // jpeg
[self.mailPicker addAttachmentData:imageData mimeType:@"image/png" fileName:@"123.jpg"];
// 邮件内容
NSString *emailBody = @"eMail 正文";
[self.mailPicker setMessageBody:emailBody isHTML:YES];
self.mailPicker.mailComposeDelegate = self;
[self presentViewController:self.mailPicker animated:YES completion:nil];
// MFMailComposeViewControllerDelegate
- (void)mailComposeController:(MFMailComposeViewController *)controller
didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error
{
switch (result)
{
case MFMailComposeResultCancelled:
{
NSLog(@"邮件发送取消");
}
break;
case MFMailComposeResultSaved:
{
NSLog(@"邮件保存成功");
}
break;
case MFMailComposeResultSent:
{
NSLog(@"邮件发送成功");
}
break;
case MFMailComposeResultFailed:
{
NSLog(@"邮件发送失败");
}
break;
default:break;
}
[self dismissViewControllerAnimated:YES completion:nil];
}
效果图示例
如果调用MFMailComposeViewController,但没有设置邮箱帐户信息时,会先显示下图界面,要求新建帐户
如果已设置邮箱帐户信息,则出现如下页面(成功发送后页面)
注意事项:
1、在调用系统邮件控件前,必须先设置添加发件人邮件帐户,否则会出现异常情况。添加邮件帐户的设置方法:
设置->邮件、通讯录、日历->添加帐户->其他->添加邮件帐户。
2、在编码时,可以通过代码进行控制,如下所示:
if ([MFMailComposeViewController canSendMail])
{
// 已设置邮件帐户
MFMailComposeViewController *mailPicker = [[MFMailComposeViewController alloc] init];
........
}
else
{
// 未设置邮箱帐户
NSString *title = @"没有邮件帐户";
NSString *message = @"请添加邮件帐户(添加方法:设置->邮件、通讯录、日历->添加帐户->其他->添加邮件帐户)";
[UIAlertView alertWithTitle:title message:message cancelButtonTitle:nil otherButtonTitles:@[AlertRealized] controller:self onDismiss:^(int buttonIndex, NSString *buttonTitle) {
} onCancel:^{
}];
}
/**
* 初始化时如何为空则停止,否则会出现异常
* 为空的情况,主要是因为手机设备没有设置邮箱帐户信息
* 会自动弹出系统提示,提示内容为"no mail accounts,please set up a mail account in order to send email"
* 使用方法"[MFMailComposeViewController canSendMail]"交互比较好,便于设置自定义弹出信息
*/
MFMailComposeViewController *mailPicker = [[MFMailComposeViewController alloc] init];
if (mailPicker == nil)
{
// 未生成实例
return;
}
// 生成实例
......