iOS SDK使用內置的API發送電子郵件變得非常簡單。通過幾行代碼,您可以啓動與股票郵件應用程序相同的電子郵件界面,以便您撰寫電子郵件。您可以使用MFMailComposeViewController類彈出郵件編輯器表單,編寫郵件併發送普通郵件或附加郵件。欲瞭解更多信息:從您的iOS應用程序發送電子郵件
但是,在這一節我將解釋的是關於發送電子郵件,而不顯示郵件作曲家表即。在後臺發送電子郵件。對於這個功能,我們不能使用iOS原生MFMailComposer類,因爲它不允許我們在後臺發送郵件,而是彈出郵件編輯器視圖,用戶必須點擊「發送」按鈕,所以對於本節我將要使用SKPSMTPMessage庫在後臺發送電子郵件,但電子郵件帳戶必須在此方法上進行硬編碼。
限制:
發送/接收的電子郵件地址必須被硬編碼或者你有使用你的應用程序,其中用戶輸入發送/接收電子郵件地址,一些彈出形式抓住它。此外,發件人帳戶憑據也必須硬編碼,因爲我們無法從設備設置中獲取它。
方法:
- 導入CFNetwork.framework到您的項目。
- 包括#IMPORT 「SKPSMTPMessage.h」 #進口 「的NSData + Base64Additions.h」 //爲Base64編碼
- 包括您的ViewController
- 下載SKPSMTPMessage庫從
https://github.com/jetseven/skpsmtpmessage
拖放已經下載到您的項目中的「SMTPLibrary」文件夾。
在繼續之前,讓我們知道我在本例的代碼中使用硬編碼的發件人/收件人電子郵件地址和發件人密碼。但是,你可以從用戶抓住這個證書,使他們能夠在輸入某種形式的(用UIViews)。
-(void) sendEmailInBackground {
NSLog(@"Start Sending");
SKPSMTPMessage *emailMessage = [[SKPSMTPMessage alloc] init];
emailMessage.fromEmail = @"[email protected]"; //sender email address
emailMessage.toEmail = @"[email protected]"; //receiver email address
emailMessage.relayHost = @"smtp.gmail.com";
//emailMessage.ccEmail [email protected]"your cc address";
//emailMessage.bccEmail [email protected]"your bcc address";
emailMessage.requiresAuth = YES;
emailMessage.login = @"[email protected]"; //sender email address
emailMessage.pass = @"Passwxxxx"; //sender email password
emailMessage.subject [email protected]"@"email subject header message";
emailMessage.wantsSecure = YES;
emailMessage.delegate = self; // you must include <SKPSMTPMessageDelegate> to your class
NSString *messageBody = @"your email body message";
//for example : NSString *messageBody = [NSString stringWithFormat:@"Tour Name: %@\nName: %@\nEmail: %@\nContact No: %@\nAddress: %@\nNote: %@",selectedTour,nameField.text,emailField.text,foneField.text,addField.text,txtView.text];
// Now creating plain text email message
NSDictionary *plainMsg = [NSDictionary dictionaryWithObjectsAndKeys:@"text/plain",kSKPSMTPPartContentTypeKey, messageBody,kSKPSMTPPartMessageKey,@"8bit",kSKPSMTPPartContentTransferEncodingKey,nil];
emailMessage.parts = [NSArray arrayWithObjects:plainMsg,nil];
//in addition : Logic for attaching file with email message.
/*
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"filename" ofType:@"JPG"];
NSData *fileData = [NSData dataWithContentsOfFile:filePath];
NSDictionary *fileMsg = [NSDictionary dictionaryWithObjectsAndKeys:@"text/directory;\r\n\tx- unix-mode=0644;\r\n\tname=\"filename.JPG\"",kSKPSMTPPartContentTypeKey,@"attachment;\r\n\tfilename=\"filename.JPG\"",kSKPSMTPPartContentDispositionKey,[fileData encodeBase64ForData],kSKPSMTPPartMessageKey,@"base64",kSKPSMTPPartContentTransferEncodingKey,nil];
emailMessage.parts = [NSArray arrayWithObjects:plainMsg,fileMsg,nil]; //including plain msg and attached file msg
*/
[emailMessage send];
// sending email- will take little time to send so its better to use indicator with message showing sending...
}
現在,辦理委託方法:
//在成功
-(void)messageSent:(SKPSMTPMessage *)message{
NSLog(@"delegate - message sent");
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Message sent." message:nil delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles: nil];
[alert show];
}
//如果失敗
-(void)messageFailed:(SKPSMTPMessage *)message error:(NSError *)error{
// open an alert with just an OK button
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error!" message:[error localizedDescription] delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles: nil];
[alert show];
NSLog(@"delegate - error(%d): %@", [error code], [error localizedDescription]);
}
好了,從編碼側多數民衆贊成。希望對您guyz
能否請您給您的回答更多的細節本教程會發現有用嗎?有這樣的樣品嗎?我也在努力發送郵件。謝謝。 – Gopinath 2012-02-25 05:38:35
正如我剛纔所說,沒有用戶的同意也沒辦法,你可以從iOS設備發送電子郵件。那麼你還想要什麼? – 2012-02-25 06:41:42
是的,我明白了。謝謝。 – Gopinath 2012-02-25 07:40:11