一个关于iphone应用邮件功能的问题

邮件功能也许没有太多需要说的,这里要说的是有关邮件功能涉及到的一些细节问题。先看一段代码:

- (void)LaunchMailComposer:(UIButton *)sender
{
    NSArray *Array = [ImageArray objectAtIndex:sender.tag-1];
    NSString *URL = [Array objectAtIndex:1];
   
    MFMailComposeViewController *Composer = [[MFMailComposeViewController alloc] init];
    //Composer = [Composer init];
    NSLog(@"composer description:%@",[Composer description]);
    Composer.mailComposeDelegate = self;
   
    //NSArray *toRecipients = nil;
    //    NSArray *ccRecipients = nil;
    //    NSArray *bccRecipients = nil;
    //    [Composer setToRecipients:toRecipients];
    //    [Composer setCcRecipients:ccRecipients];   
    //    [Composer setBccRecipients:bccRecipients];
   
    NSString *Body = [NSString stringWithFormat:@"<style type='text/css'><!-- body{background-image:url(%@)} --></style>", URL];
    //NSString *Body = @"<style type='text/css'><!-- body{background-image:url(http://www.4oa.com/Article/UploadPic/2009-4/2009429102347901.jpg)} --></style>";
    [Composer setMessageBody:Body isHTML:YES];
   
    if (nil == Composer) {
        return;
    }
    [self presentModalViewController:Composer animated:YES];
    [Composer release];
}

上面的代码本身并没有什么问题,在通常来说也不会有什么问题,但是做一个有趣的操作,把所有的默认设置好的邮箱都删除,奇怪的事情出现了,如果仅仅是上面的方式来设置邮件功能回导致程序崩溃。认真调试,怎么会初始化失败呢?原来,忘记了是否能发送邮件。那么我们在看如下的代码:

- (void)LaunchMailComposer:(UIButton *)sender
{
    NSArray *Array = [ImageArray objectAtIndex:sender.tag-1];
    NSString *URL = [Array objectAtIndex:1];
   
    if (![MFMailComposeViewController canSendMail]) {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Warning" message:@"Please set your mail address!" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
        return;
    }
   
    MFMailComposeViewController *Composer = [[MFMailComposeViewController alloc] init];
    //Composer = [Composer init];
    NSLog(@"composer description:%@",[Composer description]);
    Composer.mailComposeDelegate = self;
   
    //NSArray *toRecipients = nil;
    //    NSArray *ccRecipients = nil;
    //    NSArray *bccRecipients = nil;
    //    [Composer setToRecipients:toRecipients];
    //    [Composer setCcRecipients:ccRecipients];   
    //    [Composer setBccRecipients:bccRecipients];
   
    NSString *Body = [NSString stringWithFormat:@"<style type='text/css'><!-- body{background-image:url(%@)} --></style>", URL];
    //NSString *Body = @"<style type='text/css'><!-- body{background-image:url(http://www.4oa.com/Article/UploadPic/2009-4/2009429102347901.jpg)} --></style>";
    [Composer setMessageBody:Body isHTML:YES];
   
    if (nil == Composer) {
        return;
    }
    [self presentModalViewController:Composer animated:YES];
    [Composer release];
}

其实就只是多了一个判断条件这样就好了。可是我们如果想要在没有设置邮件帐号的情况下进入到设置页面呢?

 

那么我们可以用如下方式:

-(IBAction)emailBTN:(id)sender
{
    Class mailClass = (NSClassFromString(@"MFMailComposeViewController"));
    if (mailClass != Nil)
    {
        // We must always check whether the current device is configured for sending emails
        if ([mailClass canSendMail])
        {
            [self displayComposerSheet];
        }
        else
        {
            [self launchMailAppOnDevice];
        }
    }
    else
    {
        [self launchMailAppOnDevice];
    }
}

#pragma mark -
#pragma mark Compose Mail
-(void)displayComposerSheet
{
    MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init];
    picker.mailComposeDelegate = self;
   
    [picker setSubject:[imageNameArray objectAtIndex:picNumber]];//@"Hello from California!"];
   
   
    // Set up recipients
    NSArray *toRecipients = [NSArray arrayWithObject:@"fengxijun51020@hotmail.com"];
    NSArray *ccRecipients = nil;//[NSArray arrayWithObjects:@"second@example.com", @"third@example.com", nil];
    NSArray *bccRecipients = nil;//[NSArray arrayWithObject:@"fourth@example.com"];
   
    [picker setToRecipients:toRecipients];
    [picker setCcRecipients:ccRecipients];   
    [picker setBccRecipients:bccRecipients];
   
    // Attach an image to the email
    NSString *path = [[NSBundle mainBundle] pathForResource:[imageNameArray objectAtIndex:picNumber] ofType:@"jpg"];
    NSData *myData = [NSData dataWithContentsOfFile:path];
    [picker addAttachmentData:myData mimeType:@"image/jpg" fileName:[imageNameArray objectAtIndex:picNumber]];
   
    // Fill out the email body text
    NSString *emailBody = nil;//[imageNameArray objectAtIndex:picNumber];
    [picker setMessageBody:emailBody isHTML:NO];
   
    [self presentModalViewController:picker animated:YES];
    [picker release];
}


// Dismisses the email composition interface when users tap Cancel or Send. Proceeds to update the message field with the result of the operation.
- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error
{   
   
    // Notifies users about errors associated with the interface
    switch (result)
    {
        case MFMailComposeResultCancelled:
            [self dismissModalViewControllerAnimated:YES];
            break;
        case MFMailComposeResultSaved:
            [self sendResult:@"/n/nE-mail saved!"];
            break;
        case MFMailComposeResultSent:
            [self sendResult:@"/n/nSent succeed!"];
            break;
        case MFMailComposeResultFailed:
            [self sendResult:@"send Failed!"];
            break;
    }
}

-(void)sendResult:(NSString *)string
{
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil message:string delegate:nil cancelButtonTitle:nil otherButtonTitles:nil];
    [alert show];
    [self performSelector:@selector(delayDismissModalView:) withObject:alert afterDelay:1];
}

-(void)delayDismissModalView:(UIAlertView *)alert
{
    [alert dismissWithClickedButtonIndex:0 animated:YES];
    [self dismissModalViewControllerAnimated:YES];
    [alert release];
}


#pragma mark -
#pragma mark Workaround

// Launches the Mail application on the device.
-(void)launchMailAppOnDevice
{
    NSString *recipients = @"mailto:first@example.com?cc=second@example.com,third@example.com&subject=Hello from California!";
    NSString *body = @"&body=It is raining in sunny California!";
   
    NSString *email = [NSString stringWithFormat:@"%@%@", recipients, body];
    email = [email stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
   
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:email]];
}

这样邮件功能就做好了。

 

 

小提示:在写代码是一定要逻辑严谨,否则出现了问题是很难调试的,特别是与人合作进行开发的过程中这点尤其重要。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值