2012-10-12 82 views
2

我發現在iOS設備中有許多方法可以在後臺(不使用UI)發送電子郵件,也不需要使用MFMailComposeViewController類。最流行的例子是填寫在線表格,然後按提交按鈕。這裏是我看到的最流行的方法在計算器中。從ipad或iphone發送沒有UI的電子郵件的替代方法

(1)使用您自己的SMTP客戶端。這種方法適用於我,但在我的私人網絡中,但不在公司網絡中工作,如在公司網絡中,我不允許使用Gmail(公共電子郵件),也沒有公司郵件服務器的SMTP詳細信息。我在這個方法中受到了衝擊。

(2)使用CTCoreMessage & Three20 Framework(開源)。但在這裏,我無法找到除了git以外的地方下載這個框架,我的pc VLAN不允許GIT。有人可以幫我找出Three20 Framework可下載的位置,並與我分享一個示例代碼。

(3)使用HTTP Post:將您的電子郵件正文發送到服務器,並委派發送給HTTP Server的電子郵件。如果這很簡單,那麼有人可以幫助我如何設置自己的HTTP服務器來發送電子郵件。

有沒有人可以幫助找到任何工作示例代碼。我在我的項目交付結束。發表這個很久以前。直到現在還沒有答覆。任何人可以幫我請..

回答

0

我也許能提供第三種選擇一些幫助,使用HTTP ,因爲我做的一個項目一旦實現它。

首先,我使用this nice and simple iOS class來照顧我的發帖。 接着,下面的iOS代碼段應你展示它是如何做

NSString* from = @"[email protected]"; 

NSString* to = @"[email protected]"; 

NSString* mailCc = @"[email protected]"; 

NSString* message = @"my message" 

NSString* subject = @"my subject"; 

NSURL* url = [NSURL URLWithString:@"http://yourtestsite.com/my_email_script.php"]; 

//these are $_POST variables sent, so 'from' would be $_POST['from']   
NSArray *keys = [[NSArray alloc] initWithObjects:@"from", @"to", @"cc", @"subject", @"message", nil]; 
NSArray *objects = [[NSArray alloc] initWithObjects:from, to, mailCc, subject, message, nil]; 
NSDictionary *dictionary = [[NSDictionary alloc] initWithObjects:objects forKeys:keys]; 


NSMutableURLRequest* request = [SimplePost urlencodedRequestWithURL:url andDataDictionary:dictionary]; 
NSURLResponse* response = [[NSURLResponse alloc] init]; 
NSError* error = [[NSError alloc] init]; 

NSData *returnData = [NSURLConnection sendSynchronousRequest: request returningResponse: &response error: &error]; 

NSString* result = [[NSString alloc] initWithData:returnData encoding:NSStringEncodingConversionAllowLossy]; 

//I'm checking for 1 because my php script was set to write 1 to the page in case of success and 0 otherwise, so this is simply my implementation 
if([result isEqualToString:@"1"]) { 
    NSLog(@"success"); 
} else { 
    NSLog(@"error"); 

} 

對於PHP文件,這應該做的伎倆

$from = filter_var($_POST['from'], FILTER_SANITIZE_EMAIL); 

$to = filter_var($_POST['to'], FILTER_SANITIZE_EMAIL); 

$cc = filter_var($_POST['cc'], FILTER_SANITIZE_EMAIL); 

$subject = htmlspecialchars(utf8_decode($_POST['subject'])); 

$message = utf8_decode($_POST['message']); 

// To send HTML mail, the Content-type header must be set 
$headers = 'MIME-Version: 1.0' . "\r\n"; 
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n"; 

// Additional headers 
$headers .= 'From: ' . $from . "\r\n"; 

$headers .= 'Cc: ' . $cc . "\r\n"; 

// Mail it 
if(mail($to, $subject, $message, $headers)) { 
    echo("1"); 
} else { 
    echo("0"); 

    } 

請記住,我不是PHP的專家,所以該代碼可能會得到改進,特別是在安全部分。

PHP郵件應該已經在大多數主要託管解決方案中啓用,無論是廉價的共享帳戶,VPS還是專用服務器。但是,如果您打算使用此方法發送大量電子郵件,則建議使用專用服務器。

但是,您可以發送的電子郵件數量有限,且功能比mail功能更好。你可以找到更多關於這個here的信息。

[稍後編輯] 似乎作者刪除了SimplePost類。然而,同一作者提出了一個應該幫助的替代方案,稱爲SimpleHTTPRequest。其餘應該保持不變

+0

嗨,對不起,遲到的迴應。我想這種實現方式需要一個專用的網絡服務器。你能粗略地告訴我設置這臺服務器需要多少努力嗎?也沒有服務器設置,我不能嘗試這種方法,我猜。 – Srivathsa

+0

檢查我的編輯。簡短的回答是:並不是真的,你可以毫不費力地做到這一點,但主要取決於你將發送多少封電子郵件。我使用這種方法的內部應用程序,可能在極端情況下,每小時會發送幾十封電子郵件,所以這不是問題 – BBog

+0

嗨,m測試你的代碼,你想告訴我什麼是「SimplePost」,因爲使用「NSMutableURLRequest *請求= [SimplePost urlencodedRequestWithURL:url」 –

2

我會考慮使用Mailgun,它會使發送電子郵件變得更容易,每月免費處理10K。他們允許你使用他們的子域名,如果你沒有你自己的,但可以很容易地設置你自己的與他們的工作。

它很容易安裝一個cocoapod和添加5行代碼左右。

+0

感謝真棒服務! – MaKo