2

我看到有很多方法可以在 iOS 设备的后台(没有 UI)发送电子邮件,而无需使用 MFMailComposeViewController 类。最流行的例子是填写在线表格并按下提交按钮。这是我在stackoverflow中看到的最流行的方法。

(1) 使用您自己的 SMTP 客户端。这种方法对我有用,但在我的私人网络中,但在我的公司场所中不起作用,因为在公司网络中我不允许使用 gmail(公共电子邮件)并且没有我们公司邮件服务器的 SMTP 详细信息。我对这种方法感到震惊。

(2) 使用 CTCoreMessage & Three20 框架(开源)。但是在这里我无法找到除 git 之外的其他地方下载此框架,我的 pc VLAN 不允许 GIT。有人可以帮我找出 Three20 Framework 的可下载位置并分享给我一个示例代码。

(3) 使用 HTTP Post:将您的电子邮件正文发送到服务器,并将电子邮件发送委托给 HTTP 服务器。如果这很简单,那么有人可以帮助我如何设置自己的 HTTP 服务器来发送电子邮件。

任何人都可以帮助找到任何有效的示例代码。我的项目交付即将结束。发了这么久。到现在都没有回复。有人可以帮我吗..

4

2 回答 2

2

我会考虑使用Mailgun,它将使发送电子邮件变得更加容易,并且每月免费处理多达 10k。如果您没有自己的子域,它们允许您使用他们的子域,但可以轻松设置您自己的子域以与他们的子域一起使用。

它就像安装一个 cocoapod 并添加 5 行左右的代码一样简单。

于 2014-05-19T19:21:53.597 回答
0

我也许可以使用HTTP Post为第三个选项提供一些帮助,因为我确实在项目中实现过一次。

首先,我使用这个漂亮而简单的 iOS 类来为我处理发布。然后,下面的 iOS 代码片段应该向您展示它是如何完成的

NSString* from = @"sender@email";

NSString* to = @"receiver@email";

NSString* mailCc = @"cc@email";

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功能更好的选项。您可以在此处找到有关此的更多信息。

[后来编辑]似乎作者删除了 SimplePost 类。但是,同一作者提出了一个应该有所帮助的替代方案,称为SimpleHTTPRequest。其余的应该保持不变

于 2012-10-18T12:44:10.990 回答