如何使用php通过smtp发送邮件步骤

2024年12月01日 11:48
有3个网友回答
网友(1):

由于php没有提供现成的smtp函数,却提供了一个功能不甚灵活的mail()函数,这个函数需要服务器配置上的支持,并且不支持smtp验证,在很多场合无法正常的工作,因此不建议使用。

  • 首先是使用telnet来连接本地的25端口,稍微熟悉点网络的人都知道smtp协议使用25端口,这也就是说,现在在连接本地的smtp服务器。




    这些东西是系统输出信息,说明已经连接上了,而且这个smtp服务器是postfix做的。

“MAIL FROM: teste@dominio.com.br”这个命令指明了发件地址是teste@dominio.com.br,“250 Ok”说明这条命令被服务器接受并正确执行,这类似http协议的200、404、500等状态代码。接下来的“RCPT TO: teste@dominio.com.br”指明了收件地址是teste@dominio.com.br。

这一段是输入邮件正文,输入“DATA”以后系统提示使用“<回车>.<回车>”来结束输入,正文内容是“teste”。 
最后使用“QUIT”退出。

  • 以上就是最简单的一次发送mail的过程,从这个例子我们可以看出,发送mail其实是很简单的事情,实质上也就是建立一个对smtp服务器的连接,然后发送一些简单的命令给它,一封内容简单的邮件就发送出去了,至于更加复杂内容的邮件或者操作,其实也就是在此基础上稍加扩展而已。

  • 把这个过程用php来实现,其实就是利用php的Socket functions、Network Functions等等操作socket的函数来和smtp服务器建立一个连接,然后发送文本的命令给服务器

require_once 'Mail.php';
  
$conf['mail'] = array(
        'host'     => 'xx.xx.xx.xx',                //smtp服务器地址,可以用ip地址或者域名
        'auth'     => true,                         //true表示smtp服务器需要验证,false代码不需要
        'username' => 'tester',                     //用户名
        'password' => 'retset'                      //密码
);
  
/***
* 使用$headers数组,可以定义邮件头的内容,比如使用$headers['Reply-To']可以定义回复地址
* 通过这种方式,可以很方便的定制待发送邮件的邮件头
***/
$headers['From']    = 'tester@domain.com';              //发信地址
$headers['To']      = 'tester@domain.com';              //收信地址
$headers['Subject'] = 'test mail send by php';          //邮件标题
$mail_object = &Mail::factory('smtp', $conf['mail']);   
  
$body = <<< MSG                                         //邮件正文
hello world!!!
MSG;
  
$mail_res = $mail_object->send($headers['To'], $headers, $body);        //发送
  
if( Mail::isError($mail_res) ){                         //检测错误
    die($mail_res->getMessage());
}
?>

网友(2):

  1. 其实用smtp协议发送邮件很简单,用框架或者原生都可以,我们需要用到class.phpmailer.php 和class.smtp.php,可以去网上下载。

  2.             "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
           
           
               
            Document  
           
         
         

     
           

    收件人:

     
           

    标  题:

     
           

    内  容:

     
         

    发件人:

     
           

     
         
     
         
         

  3. 写了一个mail_send.php然后引入一个封装的类

         // 接收值  
         isset($_POST['address'])?$address=$_POST['address']:$address='';  
         isset($_POST['titles'])?$titles=$_POST['titles']:$titles='';  
         isset($_POST['content'])?$content=$_POST['content']:$content='';  
         isset($_POST['user'])?$user=$_POST['user']:$user='';  
           
         //引入类  
          require 'Mail.class.php';  
                if( Mail::send($titles,$contents,$user,$address)){  
                echo "发送成功";  
                 }else{  
                     echo "发送失败".'
    ';  
                    echo Mail::$error;  
               }  
        ?>  
    3、这里是我们封装好了一个类(Mail.class.php)上面引入的类

  4.      header("content-type:text/html;charset=utf-8");  
              //引入原来的类文件  
            require 'class.phpmailer.php';  
            class Mail {  
                   static public $error = '';  
                   static public function send($title,$content,$user,$address){  
                            $mail= new PHPMailer();  
                           /*服务器相关信息*/  
                          $mail->IsSMTP();                 //设置使用SMTP服务器发送  
                            $mail->SMTPAuth  = true;               //开启SMTP认证  
                            $mail->Host     = 'smtp.163.com';        //设置 SMTP 服务器,自己注册邮箱服务器地址 QQ则是ssl://smtp.qq.com  
                           $mail->Username   = 'zzy9i7';  //发信人的邮箱名称,本人网易邮箱 zzy9i7@163.com 这里就写  
                           $mail->Password   = '******';    //发信人的邮箱密码  
                            /*内容信息*/  
                           $mail->IsHTML(true);               //指定邮件格式为:html *不加true默认为以text的方式进行解析  
                            $mail->CharSet    ="UTF-8";               //编码  
                            $mail->From       = 'zzy9i7@163.com';             //发件人完整的邮箱名称  
                            $mail->FromName   = $user;            //发信人署名  
                          $mail->Subject    = $title;               //信的标题  
                           $mail->MsgHTML($content);                 //发信主体内容  
                            //$mail->AddAttachment("15.jpg");         //附件  
                          /*发送邮件*/  
                             $mail->AddAddress($address);              //收件人地址  
                            //使用send函数进行发送  
                            if($mail->Send()) {  
                              return true;  
                             } else {  
                                  self::$error=$mail->ErrorInfo;  
                                 return   false;  
                            }  
                     }  
             }  
       ?>  


网友(3):

phpmail有这个类