我看到有很多方法可以在iOS设备中在后台(没有UI)发送电子邮件,而不使用MFMailComposeViewController类。最受欢迎的例子是填写在线表格并按下提交按钮。这是我在stackoverflow中看到的最流行的方法..
(1)使用您自己的SMTP客户端。这种方法对我有用,但在我的私人网络中却没有在公司网络中工作,因为在公司网络中,我不允许使用gmail(公共电子邮件),也没有公司邮件服务器的SMTP详细信息。我对这种方法感到震惊。
(2)使用CTCoreMessage& Three20 Framework(开源)。但是在这里我无法找到除git之外的其他框架,我的pc VLAN不允许使用GIT。有人可以帮我找出Three20 Framework的可下载位置并分享一个示例代码。
(3)使用HTTP Post:将您的电子邮件正文发送到服务器并将发送的电子邮件委托给HTTP Server。如果这很简单,那么有人可以帮助我如何设置自己的HTTP服务器来发送电子邮件。
任何人都可以帮助找到任何有效的示例代码。我在项目交付结束时。发布这个很久了。到目前为止还没有答复。请有人帮帮我..
答案 0 :(得分:2)
我会考虑使用Mailgun,这样可以更轻松地发送电子邮件,每月免费处理10k。如果您没有自己的子域,它们允许您使用它们的子域,但可以轻松地设置自己的子域以与它们一起工作。
就像安装一个cocoapod并添加5行代码一样简单。
答案 1 :(得分:0)
我可以使用 HTTP Post 为第三个选项提供一些帮助,因为我在项目中实现了一次。
首先,我使用this nice and simple iOS class来照顾我的帖子。 然后,以下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
功能相比,您可以发送的电子邮件数量有限,且选项更佳。您可以找到有关此here的更多信息。
[稍后编辑] 似乎作者删除了SimplePost类。然而,同一作者提出了一个应该有所帮助的替代方案,称为SimpleHTTPRequest。其余的应该保持不变