5

我想從我的自定義iPhone應用程序發送郵件。我已經使用MFMailComposeViewController在我以前的應用程序中從我的iphone發送郵件。現在,我不想向用戶顯示MFMailComposeViewController,如果他們點擊Send Mail button郵件自動發送到recipient mail address。我怎樣才能做到這一點?你能幫我解決這個問題嗎?提前致謝。如何從iphone應用程序發送郵件而不顯示MFMailComposeViewController?

我用下面的代碼來顯示MFMailComposeViewController,

MFMailComposeViewController *controller = [[MFMailComposeViewController alloc] init]; 
controller.mailComposeDelegate = self; 
[controller setSubject:@"Details"]; 
[controller setMessageBody:@"Hi" isHTML:NO]; 
[controller setToRecipients:[NSArray arrayWithObjects:@"[email protected]", nil]]; 
[self presentModalViewController:controller animated:YES]; 
[controller release]; 

回答

13

發送電子郵件程序,無需用戶干預,從iPhone應用程序,不能使用任何蘋果的框架來實現。這可能是一個越獄手機,但它永遠不會看到App Store的內部。

如果你想控制電子郵件發送,那麼更好的方法是設置一個Web服務(在你的服務器端),你可以使用HTTP請求進行發佈。如果您只發布到一個地址,這可以很好地工作,雖然您可能希望讓用戶輸入他們的回覆郵件地址。

否則只有標準對話框可用(這依賴於使用他們在設備上設置的任何帳戶)。

+0

能否請您給您的回答更多的細節本教程會發現有用嗎?有這樣的樣品嗎?我也在努力發送郵件。謝謝。 – Gopinath 2012-02-25 05:38:35

+0

正如我剛纔所說,沒有用戶的同意也沒辦法,你可以從iOS設備發送電子郵件。那麼你還想要什麼? – 2012-02-25 06:41:42

+0

是的,我明白了。謝謝。 – Gopinath 2012-02-25 07:40:11

3

iOS SDK使用內置的API發送電子郵件變得非常簡單。通過幾行代碼,您可以啓動與股票郵件應用程序相同的電子郵件界面,以便您撰寫電子郵件。您可以使用MFMailComposeViewController類彈出郵件編輯器表單,編寫郵件併發送普通郵件或附加郵件。欲瞭解更多信息:從您的iOS應用程序發送電子郵件

但是,在這一節我將解釋的是關於發送電子郵件,而不顯示郵件作曲家表即。在後臺發送電子郵件。對於這個功能,我們不能使用iOS原生MFMailComposer類,因爲它不允許我們在後臺發送郵件,而是彈出郵件編輯器視圖,用戶必須點擊「發送」按鈕,所以對於本節我將要使用SKPSMTPMessage庫在後臺發送電子郵件,但電子郵件帳戶必須在此方法上進行硬編碼。

限制:

發送/接收的電子郵件地址必須被硬編碼或者你有使用你的應用程序,其中用戶輸入發送/接收電子郵件地址,一些彈出形式抓住它。此外,發件人帳戶憑據也必須硬編碼,因爲我們無法從設備設置中獲取它。

方法:

  1. 導入CFNetwork.framework到您的項目。
  2. 包括#IMPORT 「SKPSMTPMessage.h」 #進口 「的NSData + Base64Additions.h」 //爲Base64編碼
  3. 包括您的ViewController
  4. 下載SKPSMTPMessage庫從
    https://github.com/jetseven/skpsmtpmessage
  5. 拖放已經下載到您的項目中的「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

+1

工作正常。我只是更改了一些非ARC代碼。此外,我已將發件人Google郵件帳戶的設置更改爲「允許訪問不太安全的應用程序」。 – Panayot 2018-01-22 23:12:51

相關問題