This article mainly and you introduce the PHP SMTP implementation of the sending mail function, with a certain reference value, interested in the small partners can refer to, hope to learn how to use the SMTP implementation of PHP to send mail.
<?phpheader ("content-type:text/html; Charset=utf-8 "); Class smtp{/* Public Variables */var $smtp _port, var $time _out, var $host _name, var $log _file, var $relay _host, var $deb Ug var $auth; var $user; var $pass; /* Private Variables */var $sock; /* Constractor */function smtp ($relay _host = "", $smtp _port = +, $auth = False, $user, $pass) {$this->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 = "", $additional _h Eaders = "") {$mail _from = $this->get_address ($this->strip_comment ($from)); $body = Preg_replace ("/(^| ( \ 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-mai l have 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"); } return $sent; }/* Private Functions */function Smtp_send ($helo, $from, $to, $header, $body = "") {if (! $this->smtp_putcmd ("Helo" , $helo)) {return $this->smtp_error ("Sending HELO command"); } #auth if ($this->auth) {if (! $this->smtp_putcmd ("Auth LOGIN", Base64_encode ($this->user)) {return $this->smtp_error ("Sending HELO command"); } if (! $this->smtp_putcmd ("", Base64_encode ($this->pass)) {return $this->smtp_error ("Sending HELO comma nd "); }} 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><LF> [EOM]") ; } if (! $this->smtp_putcmd ("Quit")) {return $this->smtp_error ("Sending quit Command"); } return TRUE; } function Smtp_sockopen ($address) {if ($this->relay_host = = "") {return $this->smtp_sockopen_mx ($address); } else {return $this->smtp_sockopen_relay (); }} 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;; } 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; } 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; } 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; } 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 (); } 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; } 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; } function Smtp_debug ($message) {if ($this->debug) {echo $message; }}}?>
Call
<?phpheader ("content-type:text/html; Charset=utf-8 "); Introduce the sending message class require ("smtp.php");//Use 163 mailbox Server $smtpserver = "smtp.163.com";//163 Mailbox Server Port $smtpserverport = 25;// Your 163 server mailbox Account $smtpusermail = "xxx@163.com";//Recipient Mailbox $smtpemailto = "Xxx@qq.com"; Your e-mail account (remove @163.com) $smtpuser = "xxx";//Your 163 mailbox Remove the back 163.com//your mailbox password $smtppass = "xxx"; Your 163 mailbox SMTP authorization code, do not fill in the password!!! Message subject $mailsubject = "Test mail send";//message content $mailbody = "Php+mysql";//Message Format (html/txt), txt as text mail $mailtype = "txt";// A true in this case is that authentication is used, otherwise it is not used. $SMTP = new SMTP ($smtpserver, $smtpserverport, True, $smtpuser, $smtppass);// Whether to display debug information sent $smtp->debug = true;//Send mail $smtp->sendmail ($smtpemailto, $smtpusermail, $mailsubject, $mailbody, $ Mailtype);?>
Code Link:
SendMail