IOS開発中にe-mailを送るいくつかの方法をまとめました。
iOSシステムのフレームワークで提供される2つのEmailの送信方法
1、オプンURLを使ってメールを送る機能を実現する:
2、MFMail Compseview Controllerを使ってメールを送る機能を実現します。それはMessage UID.frame eworkの中で、プロジェクトにこのフレームを追加する必要があります。そして使用したファイルにMFMail Compseview Controller.hヘッダファイルを導入します。
3、私達は自分のUI設計の要求によって相応のビューをカスタマイズして全体の設計に適応できます。有名なオープンSMTPプロトコルを使って実現できます。
SKPSMT PMessgeクラスでは、ビューに対していかなる要求も行われていません。データレベルの処理を提供しています。対応する送信要求を定義すれば、メール送信が可能になります。どのような方法でこれらの情報を取得するかについては、ソフトウェアのニーズに応じてインタラクティブな方式とビューのスタイルを決定することができます。
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;
読んでくれてありがとうございます。みなさんのご協力をお願いします。ありがとうございます。