note 39894 deleted from function.mail by aidan
| From: | aidan@php.net | Date: | Sun, 08 Aug 2004 15:37:40 +0000 |
| Subject: | note 39894 deleted from function.mail by aidan | ||
| References: | 1 | Groups: | php.notes |
| Request: | Send a blank email to php-notes+get-74240@lists.php.net to get a copy of this message | ||
Note Submitter: eddy@hcv.ro
----
If you want to send emails through socket instead sendmail, you could use this function ( maybe
improved, but works well specially on Win98 / Apache / Php4.3.4 ). It sends nice HTML mails :)) and
support both methods $auth=0, try no authentification, and $auth=1 with user / pass. I figured out
an example to use :
Enjoy :))
This simple function is a simplified version of mail class, found on net, phpprojekt
<? php
//mail($catre, $subject, $message, $headers); //old fashion mail, using sendmail, useful on linux
sock_mail(1,$catre,$subject,$message,$headers,$from);//sock version, usable on Win32
//this is the sock mail function
function sock_mail($auth,$to, $subj, $body, $head, $from){
$lb="\r\n"; //linebreak
$body_lb="\r\n"; //body linebreak
$loc_host = "localhost"; //localhost
$smtp_acc = "your_mail_account"; //account
$smtp_pass="your_mail_password"; //password
$smtp_host="your_mail_server"; //server SMTP
$hdr = explode($lb,$head); //header
if($body) {$bdy = preg_replace("/^\./","..",explode($body_lb,$body));}
// build the array for the SMTP dialog. Line content is array(command, success code, additonal
error message)
if($auth == 1){// SMTP authentication methode AUTH LOGIN, use extended HELO "EHLO"
$smtp = array(
// call the server and tell the name of your local host
array("EHLO ".$loc_host.$lb,"220,250","HELO error: "),
// request to auth
array("AUTH LOGIN".$lb,"334","AUTH error:"),
// username
array(base64_encode($smtp_acc).$lb,"334","AUTHENTIFICATION error : "),
// password
array(base64_encode($smtp_pass).$lb,"235","AUTHENTIFICATION error : "));
}
else {// no authentication, use standard HELO
$smtp = array(
// call the server and tell the name of your local host
array("HELO ".$loc_host.$lb,"220,250","HELO error: "));
}
// envelop
$smtp[] = array("MAIL FROM: <".$from.">".$lb,"250","MAIL
FROM error: ");
$smtp[] = array("RCPT TO: <".$to.">".$lb,"250","RCPT TO
error: ");
// begin data
$smtp[] = array("DATA".$lb,"354","DATA error: ");
// header
$smtp[] = array("Subject: ".$subj.$lb,"","");
$smtp[] = array("To:".$to.$lb,"","");
foreach($hdr as $h) {$smtp[] = array($h.$lb,"","");}
// end header, begin the body
$smtp[] = array($lb,"","");
if($bdy) {foreach($bdy as $b) {$smtp[] = array($b.$body_lb,"","");}}
// end of message
$smtp[] = array(".".$lb,"250","DATA(end)error: ");
$smtp[] = array("QUIT".$lb,"221","QUIT error: ");
// open socket
$fp = @fsockopen($smtp_host, 25);
if (!$fp) echo "<b>Error:</b> Cannot conect to
".$smtp_host."<br>";
$banner = @fgets($fp, 1024);
// perform the SMTP dialog with all lines of the list
foreach($smtp as $req){
$r = $req[0];
// send request
@fputs($fp, $req[0]);
// get available server messages and stop on errors
if($req[1]){
while($result = @fgets($fp, 1024)){if(substr($result,3,1) == " ") { break; }};
if (!strstr($req[1],substr($result,0,3))) echo"$req[2].$result<br>";
}
}
$result = @fgets($fp, 1024);
// close socket
@fclose($fp);
return 1;
}
?>