IOS開発中にe-mailを送るいくつかの方法をまとめました。


iOSシステムのフレームワークで提供される2つのEmailの送信方法      
1、オプンURLを使ってメールを送る機能を実現する:   

NSString *url = [NSString stringWithString: @"mailto:foo@example.
[email protected]&subject=Greetings%20from%20Cupertino!&body=Wish%20you%20were%20here!"]; 
[[UIApplication sharedApplication] openURL: [NSURL URLWithString: url]]; 
欠点は明らかで、このような過程はプログラムが一時的に終了することを招きます。iOS 4.xがマルチタスクをサポートしている場合でも、このような過程はやはり不便だと思われます。   
2、MFMail Compseview Controllerを使ってメールを送る機能を実現します。それはMessage UID.frame eworkの中で、プロジェクトにこのフレームを追加する必要があります。そして使用したファイルにMFMail Compseview Controller.hヘッダファイルを導入します。 

#import <MessageUI/MFMailComposeViewController.h>; 
 
MFMailComposeViewController* controller = [[MFMailComposeViewController alloc] init]; 
controller.mailComposeDelegate = self; 
[controller setSubject:@"My Subject"]; 
[controller setMessageBody:@"Hello there." isHTML:NO]; 
[self presentModalViewController:controller animated:YES]; 
[controller release]; 
//         Email       ,       MFMailComposeViewControllerDelegate  : 
 
- (void)mailComposeController:(MFMailComposeViewController*)controller 
   didFinishWithResult:(MFMailComposeResult)result 
      error:(NSError*)error; 
{ 
 if (result == MFMailComposeResultSent) { 
 NSLog(@"It's away!"); 
 } 
 [self dismissModalViewControllerAnimated:YES]; 
} 
//                         : 
 
enum MFMailComposeResult { 
 MFMailComposeResultCancelled,//         
 MFMailComposeResultSaved,//         
 MFMailComposeResultSent,//      ,         
 MFMailComposeResultFailed//               
}; 
typedef enum MFMailComposeResult MFMailComposeResult; // iOS3.0     
//     MFMailComposeViewController         : 
 
+ (BOOL)canSendMail __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_3_0); 
//            ,    NO,               MFMailComposeViewController    mailto://     ,   ,           skpsmtpmessage     Email   。 
- (void)addAttachmentData:(NSData *)attachment mimeType:(NSString *)mimeType fileName:(NSString *)filename; 
//NSData   attachment      ,  mimeType      ,            http://www.iana.org/assignments/media-types/ ,               。  mimeType   ,            =] 
第二の方法の劣勢も明らかで、iOSシステムは私達のためにメールの中のUIを提供してくれましたが、私達は完全に整列して注文することができません。これはそれらのオーダーを自分のスタイルにしたAppが望ましくないです。このように使うと、間違いなく目立ってしまうからです。  
3、私達は自分のUI設計の要求によって相応のビューをカスタマイズして全体の設計に適応できます。有名なオープンSMTPプロトコルを使って実現できます。   
SKPSMT PMessgeクラスでは、ビューに対していかなる要求も行われていません。データレベルの処理を提供しています。対応する送信要求を定義すれば、メール送信が可能になります。どのような方法でこれらの情報を取得するかについては、ソフトウェアのニーズに応じてインタラクティブな方式とビューのスタイルを決定することができます。  

    SKPSMTPMessage *testMsg = [[SKPSMTPMessage alloc] init]; 
  testMsg.fromEmail = @"[email protected]"; 
  testMsg.toEmail =@"[email protected]"; 
  testMsg.relayHost = @"smtp.gmail.com"; 
  testMsg.requiresAuth = YES; 
  testMsg.login = @"[email protected]"; 
  testMsg.pass = @"test"; 
  testMsg.subject = [NSString stringWithCString:"  " encoding:NSUTF8StringEncoding]; 
  testMsg.bccEmail = @"[email protected]"; 
  testMsg.wantsSecure = YES; // smtp.gmail.com doesn't work without TLS! 
 
  // Only do this for self-signed certs! 
  // testMsg.validateSSLChain = NO; 
  testMsg.delegate = self; 
 
  NSDictionary *plainPart = [NSDictionary dictionaryWithObjectsAndKeys:@"text/plain",kSKPSMTPPartContentTypeKey, 
         [NSString stringWithCString:"    " encoding:NSUTF8StringEncoding],kSKPSMTPPartMessageKey,@"8bit",kSKPSMTPPartContentTransferEncodingKey,nil]; 
 
   NSString *vcfPath = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"vcf"]; 
   NSData *vcfData = [NSData dataWithContentsOfFile:vcfPath]; 
 
   NSDictionary *vcfPart = [NSDictionary dictionaryWithObjectsAndKeys:@"text/directory;\r
\tx-unix-mode=0644;\r
\tname=\"test.vcf\"",kSKPSMTPPartContentTypeKey, @"attachment;\r
\tfilename=\"test.vcf\"",kSKPSMTPPartContentDispositionKey,[vcfData encodeBase64ForData],kSKPSMTPPartMessageKey,@"base64",kSKPSMTPPartContentTransferEncodingKey,nil]; testMsg.parts = [NSArray arrayWithObjects:plainPart,vcfPart,nil]; [testMsg send]; // Delegate . -(void)messageSent:(SKPSMTPMessage *)message; -(void)messageFailed:(SKPSMTPMessage *)message error:(NSError *)error;
読んでくれてありがとうございます。みなさんのご協力をお願いします。ありがとうございます。