PHP SMTP Implementation send mail function instance code

Source: Internet
Author: User
Tags explode mail account
The SMTP (Simple Mail Transfer Protocol) is simply the message Transfer Protocol, which is a set of rules for sending mail from the source address to the destination, and it controls the way the letters are relayed. The SMTP protocol is a TCP/IP protocol cluster that helps each computer find its next destination when sending or relaying letters. Through the server specified by the SMTP protocol, e-Mail can be sent to the recipient's server, the whole process only a few minutes. An SMTP server is a sending mail server that follows the SMTP protocol and is used to send or relay e-mail messages.

It uses a reliable data transfer service provided by TCP to transfer mail messages from the sender's mail server to the recipient's mail server. As with most application layer protocols, SMTP also has two ports: clients executed on the sender's mail server and server side executed on the recipient's mail server. The client and server side of SMTP are running on each mail server at the same time. When a mail server sends a mail message to another mail server, it is running as an SMTP client.

There are many similarities between the SMTP protocol and the etiquette that people use to interact with each other. First, the SMTP client running on the sending-side mail server host initiates a TCP connection to the SMTP server port number 25 running on the receiving mail server host. If the receiving mail server is not currently working, the SMTP customer waits for a period of time before attempting to establish the connection. The SMTP client and server perform some application-level handshake operations first. Just as people tend to introduce themselves before they turn things around, SMTP clients and servers also introduce themselves before transmitting information. During this SMTP handshake phase, the SMTP client indicates to the server the e-mail address of the sender and recipient respectively. After we have introduced ourselves, the customer sends out an email message.

This article example for everyone to share the PHP SMTP send mail features specific code, the details are as follows

<?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-&GT;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-&GT;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-&GT;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);?>

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.