PHP sends mail through SMTP through a class SMTP The code to send the message is as follows:
- Require_once ' smtp.php ';
- ##########################################
- $smtpserver = "smtp.sina.com";//SMTP server
- $smtpserverport = 25;//SMTP Server port
- $smtpusermail = "god_chen@sina.com"; user mailbox for//SMTP server
- $smtpemailto = "45323333@qq.com";//Send To whom
- $smtpuser = "name"; user account for//SMTP server
- $smtppass = "123456"; user password for//SMTP server
- $mailsubject = "Chinese";//Message subject
- $mailbody = "
Chinese Can muddy the new year feeling under test ";//message content
- $mailtype = "HTML";//Message Format (html/txt), TXT as text mail
- ##########################################
- $SMTP = new SMTP ($smtpserver, $smtpserverport, True, $smtpuser, $smtppass);//A true in this indicates that authentication is used, otherwise no authentication is used.
- $SMTP->debug = false;//whether to display debug information sent
- $smtp->sendmail ($smtpemailto, $smtpusermail, $mailsubject, $mailbody, $mailtype)
Copy Code
The source code for the SMTP class is as follows:
- Class SMTP
- {
- /* Public Variables */
- var $smtp _port;
- var $time _out;
- var $host _name;
- var $log _file;
- var $relay _host;
- var $debug;
- 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 _headers = "")
- {
- $mail _from = $this->get_address ($this->strip_comment ($from));
- $body = Ereg_replace ("(^| ( \ \ \)] (\) "," \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");
- }
- 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 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 . [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 = Ereg_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 (!ereg ("^[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 (Ereg ($comment, $address))
- {
- $address = ereg_replace ($comment, "", $address);
- }
- return $address;
- }
- function Get_address ($address)
- {
- $address = Ereg_replace ("([\t\r\n]) +", "", $address);
- $address = Ereg_replace ("^.*< (. +) >.*$", "\1", $address);
- return $address;
- }
- function Smtp_debug ($message)
- {
- if ($this->debug)
- {
- Echo $message;
- }
- }
- }
Copy Code
|