APP应用发送邮件

Demo

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;
}

// 生成实例
......




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

番薯大佬

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值