• function邮件php smtp邮件发送代码


    最近研究function邮件,稍微总结一下,以后继续补充:

        <?php

        error_reporting(E_ALL ^ E_NOTICE);

        ##########服务器参数设置################

        $smtpserver   =   "smtp.163.com";//SMTP服务器

        $smtpserverport   = 25;//SMTP服务器端口

        $smtpusermail   =   "改成你的163邮箱帐号例如:zhangkai0guang@163.com";//SMTP服务器的用户邮箱

        $smtpemailto ="改成你发送的目标QQ邮箱帐号例如:帐号2447768552@qq.com"; //收件人

        $smtpuser   =   "zhangkai0guang@163.com";//SMTP服务器的用户帐号

        $smtppass   =   "改成你163邮箱的密码";//SMTP服务器的用户密码

        $mailtype   =   "TXT";//邮件格式(HTML/TXT),TXT为文本邮件

        $mailsubject   =   "我是测试的";//邮件主题

        $mailbody         =   "哈哈哈!!!";               //邮件内容

        ##########################################

        $smtp   =   new   smtp($smtpserver,$smtpserverport,true,$smtpuser,$smtppass);//这里面的一个true是表现应用身份验证,否则不应用身份验证.

        $smtp->debug   =   TRUE;//是否显示发送的调试信息

        $smtp->sendmail($smtpemailto,   $smtpusermail,   $mailsubject,   $mailbody,   $mailtype);

        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   =   25,$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("(^|(\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");

                                    }

                                    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   <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   =   @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;

                                    }

                    }

        }

        ?>

    文章结束给大家分享下程序员的一些笑话语录: 这年头的互联网真是娱乐了中国,网民们从各种各样的“门”里钻来钻去,又有好多“哥”好多“帝”,值得大家品味不已……网络经典语录,关于IT与互联网,经典与您分享!

    --------------------------------- 原创文章 By
    function和邮件
    ---------------------------------

  • 相关阅读:
    Java之IO(一)InputStream和OutputStream
    bitset库
    assert
    C++ 与 Python 混合编程
    C++多线程
    C++11新特性
    C++性能优化指南
    C++随机数
    C++中struct与class的区别
    C++杂记
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3109106.html
Copyright © 2020-2023  润新知