- $helohost = $HTTP_HOST;
- } else { // For some reason, HTTP_HOST is not set - revert to old behavior
- $helohost = $domain;
- }
-
- /* Lets introduce ourselves */
- fputs($stream, "EHLO $helohost\r\n");
- $tmp = fgets($stream,1024);
- if ($this->errorCheck($tmp,$stream)) {
- return(0);
- }
-
- if (( $smtp_auth_mech == 'cram-md5') or ( $smtp_auth_mech == 'digest-md5' )) {
- // Doing some form of non-plain auth
- if ($smtp_auth_mech == 'cram-md5') {
- fputs($stream, "AUTH CRAM-MD5\r\n");
- } elseif ($smtp_auth_mech == 'digest-md5') {
- fputs($stream, "AUTH DIGEST-MD5\r\n");
- }
-
- $tmp = fgets($stream,1024);
-
- if ($this->errorCheck($tmp,$stream)) {
- return(0);
- }
-
- // At this point, $tmp should hold "334 <challenge string>"
- $chall = substr($tmp,4);
- // Depending on mechanism, generate response string
- if ($smtp_auth_mech == 'cram-md5') {
- $response = cram_md5_response($user,$pass,$chall);
- } elseif ($smtp_auth_mech == 'digest-md5') {
- $response = digest_md5_response($user,$pass,$chall,'smtp',$host);
- }
- fputs($stream, $response);
-
- // Let's see what the server had to say about that
- $tmp = fgets($stream,1024);
- if ($this->errorCheck($tmp,$stream)) {
- return(0);
- }
-
- // CRAM-MD5 is done at this point. If DIGEST-MD5, there's a bit more to go
- if ($smtp_auth_mech == 'digest-md5')
- {
- // $tmp contains rspauth, but I don't store that yet. (No need yet)
- fputs($stream,"\r\n");
- $tmp = fgets($stream,1024);
-
- if ($this->errorCheck($tmp,$stream)) {
- return(0);
- }
- }
- // CRAM-MD5 and DIGEST-MD5 code ends here
- } elseif ($smtp_auth_mech == 'none') {
- // No auth at all, just send helo and then send the mail
- // We already said hi earlier, nothing more is needed.
- } elseif ($smtp_auth_mech == 'login') {
- // The LOGIN method
- fputs($stream, "AUTH LOGIN\r\n");
- $tmp = fgets($stream, 1024);
-
- if ($this->errorCheck($tmp, $stream)) {
- return(0);
- }
- fputs($stream, base64_encode ($user) . "\r\n");
- $tmp = fgets($stream, 1024);
- if ($this->errorCheck($tmp, $stream)) {
- return(0);
- }
-
- fputs($stream, base64_encode($pass) . "\r\n");
- $tmp = fgets($stream, 1024);
- if ($this->errorCheck($tmp, $stream)) {
- return(0);
- }
- } elseif ($smtp_auth_mech == "plain") {
- /* SASL Plain */
- $auth = base64_encode("$user\0$user\0$pass");
-
- $query = "AUTH PLAIN\r\n";
- fputs($stream, $query);
- $read=fgets($stream, 1024);