Need to use PHP to send mail, do not want to phpmailer so complex, looking for to find, finally found a good, share out, PHP mail send class, a total of two files. The code is as follows:
sent_mail.php
<?php
require_once (' email.class.php ');
##########################################
$smtpserver = "smtp.163.com";//smtp server
$smtpserverport = 25;/ /SMTP Server port
$smtpusermail = "*********@163.com";//smtp server's user mailbox
$smtpemailto = "********* @qq. com";/Send to WHO
$smtpuser = "*********@163.com"; the user account of the//SMTP server
$smtppass = "********";//smtp the user password for the server
$mailsubject = " PHP test mail system "//Mail subject
$mailbody ="
email.class.php
<?php class SMTP {/* Public Variables/public $smtp _port;
Public $time _out;
Public $host _name;
Public $log _file;
Public $relay _host;
Public $debug;
Public $auth;
Public $user;
Public $pass;
* Private Variables * * Private $sock; /* Constractor/function smtp ($relay _host = "", $smtp _port =, $auth = False, $user, $pass) {$this-&G
T;debug = FALSE;
$this->smtp_port = $smtp _port;
$this->relay_host = $relay _host; $this->time_out = 30;
is used in Fsockopen () # $this->auth = $auth;//auth $this->user = $user;
$this->pass = $pass; # $this->host_name = "localhost";
is used in HELO command $this->log_file = "";
$this->sock = FALSE; }/* Main function/function SendMail ($to, $from, $subject = "", $body = "", $mailtype, $cc = "", $BCC = "", $a Dditional_headers = "") {$Mail_from = $this->get_address ($this->strip_comment ($from)); $body = Preg_replace ("/(^|) ( \ r \ n)) (\ \.)
/"," \\1.\\3 ", $body);
$header = "mime-version:1.0\r\n";
if ($mailtype = = "HTML") {$header. = "content-type:text/html\r\n"; $header. = "To:". $to.
"\ r \ n"; if ($cc!= "") {$header. = "CC:". $CC.
"\ r \ n"; $header. = "From: $from <". $from.
">\r\n"; $header. = "Subject:". $subject.
"\ r \ n";
$header. = $additional _headers; $header. = "Date:". Date ("R").
"\ r \ n"; $header. = "X-mailer:by Redhat" (php/). Phpversion ().
") \ r \ n";
List ($msec, $sec) = Explode ("", Microtime ()); $header. = "Message-id: <". Date ("Ymdhis", $sec). "." . ($MSEC * 1000000). "." . $mail _from.
">\r\n";
$TO = Explode (",", $this->strip_comment ($to)); if ($cc!= "") {$TO = Array_merge ($TO, Explode (",", $this->strip_commeNT ($CC)));
} if ($bcc!= "") {$TO = Array_merge ($TO, Explode (",", $this->strip_comment ($BCC)));
} $sent = TRUE;
foreach ($TO as $rcpt _to) {$rcpt _to = $this->get_address ($rcpt _to); if (! $this->smtp_sockopen ($rcpt _to)) {$this->log_write ("Error:cannot send email to".) $RCPT _to.
"\ n");
$sent = FALSE;
Continue } if ($this->smtp_send ($this->host_name, $mail _from, $rcpt _to, $header, $body)) {$this- >log_write ("e-mail has been sent to <". $rcpt _to.
">\n"); else {$this->log_write ("Error:cannot Send email to <". $rcpt _to.
">\n");
$sent = FALSE;
} fclose ($this->sock);
$this->log_write ("Disconnected from remote host\n");
echo "<br>";
Echo $header; return $sent;
}/* Private functions/function Smtp_send ($helo, $from, $to, $header, $body = "") {if (! $th
Is->smtp_putcmd ("HELO", $helo)) {return $this->smtp_error ("Sending HELO command"); #auth if ($this->auth) {if (! $this->smtp_putcmd ("Auth LOGIN", Base64_encode ($this-&G
T;user)) {return $this->smtp_error ("Sending HELO command"); } if (! $this->smtp_putcmd ("", Base64_encode ($this->pass)) {return $this->smtp_error
("Sending HELO command"); } # if (! $this->smtp_putcmd ("MAIL", "from:<". $from.
">") {return $this->smtp_error ("Sending MAIL from command"); if (! $this->smtp_putcmd ("RCPT", "to:<"). $to.
">") {return $this->smtp_error ("Sending RCPT to command"); } if (! $this->smtp_putcmd ("DATA")) {RetuRN $this->smtp_error ("Sending DATA command");
} if (! $this->smtp_message ($header, $body)) {return $this->smtp_error ("Sending message"); } if (! $this->smtp_eom ()) {return $this->smtp_error ("Sending <cr><lf>.<cr&
gt;<lf> [EOM] ");
} if (! $this->smtp_putcmd ("QUIT")) {return $this->smtp_error ("Sending QUIT command");
return TRUE; The function Smtp_sockopen ($address) {if ($this->relay_host = = "") {return $this->smtp_
SOCKOPEN_MX ($address);
else {return $this->smtp_sockopen_relay (); The function Smtp_sockopen_relay () {$this->log_write ("trying to"). $this->relay_host. ":" . $this->smtp_port.
"\ n");
$this->sock = @fsockopen ($this->relay_host, $this->smtp_port, $errno, $errstr, $this->time_out); if (!) ( $this->sock&& $this->smtp_ok ()) {$this->log_write ("Error:cannot connenct to relay host"). $this->relay_host.
"\ n"); $this->log_write ("Error:"). $errstr. " (" . $errno.
") \ n");
return FALSE; $this->log_write ("Connected to relay Host"). $this->relay_host.
"\ n");
return TRUE;
The function smtp_sockopen_mx ($address) {$domain = Preg_replace ("/^.+@ ([^@]+) $/", "\\1", $address); if (! @getmxrr ($domain, $MXHOSTS)) {$this->log_write ("error:cannot resolve MX \"). $domain.
"\ n");
return FALSE; The foreach ($MXHOSTS as $host) {$this->log_write ("trying to"). $host. ":" . $this->smtp_port.
"\ n");
$this->sock = @fsockopen ($host, $this->smtp_port, $errno, $errstr, $this->time_out); if (!) ( $this->sock && $this->smtp_ok ()) {$this->log_write ("Warning:cannot COnnect to MX host ". $host.
"\ n"); $this->log_write ("Error:"). $errstr. " (" . $errno.
") \ n");
Continue $this->log_write ("Connected to MX host"). $host.
"\ n");
return TRUE; } $this->log_write ("Error:cannot connect to any MX hosts." Implode (",", $MXHOSTS). ")
\ n ");
return FALSE; The function smtp_message ($header, $body) {fputs ($this->sock, $header. "\ r \ n".
$body); $this->smtp_debug (">"). Str_replace ("\ r \ n", "\ n"). ">", $header. " \n> ". $body.
"\n>"));
return TRUE;
function Smtp_eom () {fputs ($this->sock, "\r\n.\r\n"); $this->smtp_debug (".
[eom]\n ");
return $this->SMTP_OK ();
function Smtp_ok () {$response = Str_replace ("\ r \ n", "", Fgets ($this->sock, 512)); $this->smtp_debug ($response.
"\ n"); if (!preg_match ("/^[23]/"), $response)) {fputs ($this->sock, "quit\r\n");
Fgets ($this->sock, 512); $this->log_write ("Error:remote host returned \"). $response.
"\ n");
return FALSE;
return TRUE;
The function smtp_putcmd ($cmd, $arg = "") {if ($arg!= "") {if ($cmd = = "") $cmd = $arg; else $cmd = $cmd. " " .
$arg; Fputs ($this->sock, $cmd.
"\ r \ n"); $this->smtp_debug (">"). $cmd.
"\ n");
return $this->SMTP_OK (); The function Smtp_error ($string) {$this->log_write ("Error:error occurred while"). $string.
". \ n");
return FALSE;
function Log_write ($message) {$this->smtp_debug ($message);
if ($this->log_file = = "") {return TRUE; $message = Date ("M D h:i:s"). Get_current_user (). "[" . Getmypid (). "]: " .
$message; if (! @file_exists ($this-≫log_file) | | ! ($fp = @fopen ($this->log_file, "a")) {$this->smtp_debug ("warning:cannot open log file \" ".) $this->log_file.
"\ n");
return FALSE;
Flock ($FP, LOCK_EX);
Fputs ($fp, $message);
Fclose ($FP);
return TRUE;
The function strip_comment ($address) {$comment = "/\\ ([^ ()]*\\)/";
while (Preg_match ($comment, $address)) {$address = Preg_replace ($comment, "", $address);
return $address;
function Get_address ($address) {$address = Preg_replace ("/([\t\r\n]) +/", "", $address);
$address = Preg_replace ("/^.*< (. +) >.*$/", "\\1", $address);
return $address; The function Smtp_debug ($message) {if ($this->debug) {echo $message.
"<br>";
} function Get_attach_type ($image _tag) {//$filedata = Array (); $img _file_con = fopen ($image _tAG, "R");
unset ($image _data);
while ($tem _buffer = addslashes (fread ($img _file_con, FileSize ($image _tag))) $image _data = $tem _buffer;
Fclose ($img _file_con);
$filedata [' context '] = $image _data;
$filedata [' filename '] = basename ($image _tag);
$extension = substr ($image _tag, Strrpos ($image _tag, "."), strlen ($image _tag)-Strrpos ($image _tag, "."));
Switch ($extension) {case ". gif": $filedata [' type '] = "image/gif";
Break
Case ". Gz": $filedata [' type '] = "application/x-gzip";
Break
Case ". htm": $filedata [' type '] = "text/html";
Break
Case ". html": $filedata [' type '] = "text/html";
Break
Case ". jpg": $filedata [' type '] = "image/jpeg";
Break Case ". Tar": $filedata [' type '] = ' ApplicaTion/x-tar ";
Break
Case ". txt": $filedata [' type '] = "text/plain";
Break
Case ". zip": $filedata [' type '] = "application/zip";
Break
Default: $filedata [' type '] = "application/octet-stream";
Break
return $filedata; }//End Class?>