PX : code

SMTP mailer by Hamish Milne
Download this code


<?php
/*****************************
SMTP send mail function v1.0
string smtp ( string $to , string $subject , string $body , string $from , string $smtp [, string $user [, string $password [, array $headers ]]] )
By Hamish Milne
Sends mail via SMTP
With the $settings argument you can specify any extra settings you need by defining variables in string form.
    $host The host to identify yourself as, can be domain or IP, defaults to localhost
    $port The port to connect to, default 25
    $headers Headers to use, defaults to show To and From
    $auth The authentication method. Login and plain are supported. Default is login.
    $talk Set to TRUE to return the server's replies, FALSE returns boolean. Defaults to FALSE.
example:
    smtp('my_mates_email@mail.com','Hi there','Hi mate wanna hang out','my_email@mail.com,'smtp.mail.com','my_name','secret','$host='12.34.56.78;$port=26;$auth=plain;');
Requires PHP5 and fsockopen()
Tip: you can email directly to the recipient's inbox. Just change $smtp to the recipient's SMTP server.

Here is my secret:
Data sent to server

HELO [HOST]
AUTH LOGIN
[BASE64 USER]
[BASE64 PASS]
MAIL FROM: <[FROM]>
RCPT TO: <[TO]>
DATA
[HEADERS]


[BODY]
.
QUIT
*****************************/

function smtp($to,$subject,$body,$from='',$smtp,$user='',$pass='',$settings=''){
    
$host='localhost';
    
$port=25;
    
$headers='';
    
$auth='login';
    
$talk='';
    eval(
$settings);
    if(!
$headers){
        
$headers="To: <$to>\r\nFrom: <$from>\r\nSubject: $subject\r\n";
    }
    if(
$sock=@fsockopen($smtp,$port)){
        
fputs($sock,"HELO ".$host."\r\n");
        
$ret.=fgets($sock,256);
        if(
$user){
            if(
$auth='login'){
                
fputs($sock,'auth login'."\r\n");
                
$ret.=fgets($sock,256);
                
fputs($sock,base64_encode($user)."\r\n");
                list(
$uc,$us)=explode(' ',fgets($sock,256));
                
$ret.=$uc.' '.base64_decode($us)."\r\n";
                
fputs($sock,base64_encode($pass)."\r\n");
                list(
$pc,$ps)=explode(' ',fgets($sock,256));
                
$ret.=$pc.' '.base64_decode($ps)."\r\n";
            }else
            if(
$auth='plain'){
                
fputs($sock,'auth plain'."\r\n");
                
$ret.=fgets($sock,256);
                
fputs($sockbase64_encode('^@'.$user.'^@'.$pass));
                
$ret.=fgets($sock,256);
            }
        }
        
fputs($sock,'MAIL FROM: <'.$from.'>'."\r\n");
        
$ret.=fgets($sock,256);
        
fputs($sock,'RCPT TO: <'.$to.'>'."\r\n");
        
$ret.=fgets($sock,256);
        
fputs($sock,'DATA'."\r\n");
        
$ret.=fgets($sock,256);
        
fputs($sock,$headers."\r\n".$body."\r\n.\r\n");
        
$r.=fgets($sock,256);
        
$ret.=$r;
        
fputs($sock"QUIT\r\n");
        
$ret.=fgets($sock,256);
        
fclose($sock);
        if(
$talk){
            return 
$ret;
        }else{
            
$ra=explode(' ',$r);
            
$raa=str_split($ra[0]);
            if(
$raa[0]='2'){
                return 
TRUE;
            }else{
                return 
FALSE;
            }
        }
    }else{
        if(
$talk){
            return 
'Could not connect to host';
        }else{
            return 
FALSE;
        }
    }
}
?>

Comments or questions?
PX is running PHP 5.2.17
Thanks to Miranda Productions for hosting and bandwidth.
Use of any code from PX is at your own risk.