2011-02-26 105 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