2012-01-26 118 views
2

有人可以幫我使用下面的代碼嗎?對於iOS中發送電子郵件,是下面的代碼,一個好或者我應該使用MFMailComposeViewController比這個?:使用mailto發送電子郵件:URL

NSString *url = [NSString stringWithString: @"mailto:[email protected][email protected]&subject=Greetings%20from%20Cupertino!&body=Wish%20you%20were%20here!"]; 
[[UIApplication sharedApplication] openURL: [NSURL URLWithString: url]];NSString *url = [NSString stringWithString: @"mailto:[email protected][email protected]&subject=Greetings%20from%20Cupertino!&body=Wish%20you%20were%20here!"]; 
[[UIApplication sharedApplication] openURL: [NSURL URLWithString: url]]; 

是否發送郵件的可靠的代碼?

+0

您不需要在字符串上使用'stringWithString:'。它已經是一個字符串。 (事實上​​,有幾個原因可以稱爲'stringWithString:'永遠。) –

回答

6

如果這是針對IOS 3.0+然後MFMailCompseViewController

#import <MessageUI/MFMailComposeViewController.h> 
    // .... 

     MFMailComposeViewController* controller = [[MFMailComposeViewController alloc] init]; 
     controller.mailComposeDelegate = self; 
     [controller setSubject:@"My Subject"]; 
     [controller setMessageBody:@"Hello there." isHTML:NO]; 
     if (controller) [self presentModalViewController:controller animated:YES]; 
     [controller release]; 

然後用戶做的工作,你會得到及時委託回調:

- (void)mailComposeController:(MFMailComposeViewController*)controller 
       didFinishWithResult:(MFMailComposeResult)result 
          error:(NSError*)error; 
{ 
     if (result == MFMailComposeResultSent) { 
      NSLog(@"sent"); 
     } 
    [self dismissModalViewControllerAnimated:YES]; 
} 
+0

謝謝dj ..另一個問題> ...是否有可能在AB界面出現時從地址簿中選擇多個聯繫人? – Aldee

2

你真的應該使用MFMailComposeViewController。它讓你在應用程序中使你的代碼更具可讀性。

2

要在提供的答案擴大,我想補充一點,mailto方法有一個好處,那就是你並不需要檢查用戶是否能夠發送電子郵件。如果用戶無法使用,它將通過電子郵件嚮導提示用戶,允許他/她使用默認的蘋果郵件應用程序設置電子郵件帳戶。

如果是MFMailComposeViewController,您應該始終檢查用戶是否可以用canSendMail方法發送電子郵件,並採取相應措施。

我還想指出,mailto方法不允許你以直接的方式設置委託,使錯誤處理更棘手一些。