2011-02-26 52 views
1

我有一个使用mail()发送邮件的php脚本。问题在于,它一直等待,直到收到来自邮件程序的确认信息,然后才继续...我想跳过此步骤。有没有办法将它默认设置为true或者是否不等,等等?以下是我所指的代码部分。谢谢。如何让邮件()等待确认(true)

 if (file_exists($attachment)) { 
     sendmail_attach_new($email, $subject, $msg_text, $msg, $attachment, $mailheaders, "$from_name <$from_email>"); 
    } elseif ($msg) { 
     if(ini_get('safe_mode')){ 
      mail($email, $subject, $msg, $mailheaders); 
     }else{ 
      mail($email, $subject, $msg, $mailheaders, "-f$from_email"); 
     } 
    } elseif ($msg_text) { 
     if(ini_get('safe_mode')){ 
      mail($email, $subject, $msg_text, $mailheaders); 
     }else{ 
      mail($email, $subject, $msg_text, $mailheaders, "-f$from_email"); 
     } 
    } 
    //update the mailing list for confirmation of sent mail 
    $sql = "update $tableMail set mid ='$mid' where id='$DATA[id]'"; 
    sql_query($sql); 
    $logbuffer .= "Mailed: $email<br>"; 
    $row++; 
} 

回答

0

简短的回答:第

顺便说一句,不要让你的脚本`safe_mode设置兼容。无论如何应该避免任何主机仍然使用这个弃用的错误功能。

1

你可以写堆栈,你必须发送邮件,而脚本由cron运行,可以把它

+0

这是显而易见的解决方案。 – awm 2011-02-27 01:39:09

0

你可以外部化您的邮件发送代码到一个单独的PHP脚本调用,使用脚本exec()函数,这样的事情在Unix平台上:

exec ("/usr/bin/php send-mail.php \"$from\" \"$to\" \"$subject\" \"$message\" >/dev/null &"); 

为了使这个后台进程的执行平台独立使用这样的代码:

function launchBackgroundProcess($commandLine) { 
    // Windows 
    if(PHP_OS == ‘WINNT’ || PHP_OS == ‘WIN32′) { 
     pclose(popen(’start /b ‘.$commandLine.”, ‘r’)); 
    } 
    // Some sort of UNIX 
    else { 
     pclose(popen($commandLine.‘ > /dev/null &’, ‘r’)); 
    } 
    return true; 
} 

请参阅这篇博文:http://w-shadow.com/blog/2007/10/16/how-to-run-a-php-script-in-the-background/

+0

由于OP希望代码使用安全模式,他不能使用exec。否则,这将是很好的解决方案。 – 2011-02-26 22:09:25

+0

我在问题中没有看到“安全模式”要求。据我所知,这个问题只是为了避免邮件()被阻塞。然而,示例脚本OP包含了在邮件功能中具有检查安全模式通过附加地址。 – anubhava 2011-02-26 23:15:45

+0

这不起作用,因为当父PHP脚本停止时,比PHP脚本变成僵尸 – azat 2011-02-27 08:03:52