diff options
author | Christian Schneider | 2007-01-04 17:54:22 +0000 |
---|---|---|
committer | Christian Schneider | 2007-01-04 17:54:22 +0000 |
commit | ce579f09143160e84aba768bc38054d09a11063f (patch) | |
tree | c47da11fce2c1574af2353870d35f12fef939fcf | |
parent | 5b29e1817f32454d79c3efa9d2a7688d00a85fbd (diff) | |
download | itools-ce579f09143160e84aba768bc38054d09a11063f.tar.gz itools-ce579f09143160e84aba768bc38054d09a11063f.tar.bz2 itools-ce579f09143160e84aba768bc38054d09a11063f.zip |
Fix email_check for servers using greylisting
-rw-r--r-- | mail.class | 13 |
1 files changed, 8 insertions, 5 deletions
@@ -327,23 +327,26 @@ function fullname_escape($string) * @param $fp Connection to SMTP server opened using fsockopen * @param $command Command to send, e.g. HELO gna.ch * @param $anwer String containing full answer from SMTP server - * @return True if SMTP result code is 2XX + * @param timeoutok Whether a timeout is considered ok + * @param $failcode Lowest SMTP result code which is considered a failure (default 300) + * @return True if SMTP result code is lower than $failcode * */ -function send_smtp_cmd($fp, $cmd, &$answer, $timeoutok = false) +function send_smtp_cmd($fp, $cmd, &$answer, $timeoutok = false, $failcode = 300) { $result = false; $answer = ''; if (!$cmd || (!feof($fp) && fwrite($fp, "$cmd\r\n"))) { - while (!feof($fp) && ereg('^(.)..(.?)(.*)$', fgets($fp, 1024), $regs)) + while (!feof($fp) && ereg('^(...)(.?)(.*)$', fgets($fp, 1024), $regs)) { $answer .= $regs[0]; + $resultcode = intval($regs[1]); if ($regs[2] != '-') /* Multi line response? */ { - if ($regs[1] == 2) + if (($resultcode >= 100) && ($resultcode < $failcode)) $result = true; break; @@ -442,7 +445,7 @@ function check_email($email, $checkmailbox = true) $timeout($fp, 2); $timeoutok = ($domain != 'bluewin.ch'); - if (it_mail::send_smtp_cmd($fp, "RCPT TO: <$email>", $answer, $timeoutok)) + if (it_mail::send_smtp_cmd($fp, "RCPT TO: <$email>", $answer, $timeoutok, 500)) # 450 is often used for Greylisting $result = IT_MAIL_CHECKEMAIL_OK; else if (eregi('quota|full|exceeded storage', $answer)) $result = IT_MAIL_CHECKEMAIL_MAILBOXFULL; |