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

 我来答
明智还平静灬布丁J
2017-02-11 · 知道合伙人互联网行家
明智还平静灬布丁J
知道合伙人互联网行家
采纳数:570 获赞数:4299
长江传媒2013年优秀员工 长江数字核心产品经理 国家一等奖学金获得者

向TA提问 私信TA
展开全部

由于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服务器建立一个连接,然后发送文本的命令给服务器

<?php
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());
}
?>
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Zoho Mail
2024-11-18 广告
作为卓迈(北京)技术有限公司的工作人员,我们推荐使用Gmail、Outlook等国际知名的电子邮箱服务来在国外收发邮件。这些邮箱服务拥有广泛的国际覆盖和稳定的性能,能确保您与全球各地的合作伙伴和客户保持顺畅的沟通。同时,它们也具备强大的垃圾... 点击进入详情页
本回答由Zoho Mail提供
山东文汇
2017-01-07 · 我们年轻我们有活力、我们执着我们有耐心。
山东文汇
专业的软件开发服务商,网站开发、APP开发、微信小程序、商城小程序、知识付费产品。
向TA提问
展开全部
  1. 其实用smtp协议发送邮件很简单,用框架或者原生都可以,我们需要用到class.phpmailer.php 和class.smtp.php,可以去网上下载。

  2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"  
                "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
         <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">  
         <head>  
             <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">  
            <title>Document</title>  
         </head>  
        <body>  
         <form action="mail_send.php" method="post">  
            <p>收件人:<input type="text" name="address" /></p>  
           <p>标  题:<input type="text" name="title" /></p>  
           <p>内  容:<textarea name="content" cols="50" rows="5"></textarea></p>  
         <p>发件人:<input type="text" name="user" /></p>  
            <p><input type="submit" value="发送"  /></p>  
         </form>  
       </body>  
        </html>  

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

    <?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 "发送失败".'<br>';  
                    echo Mail::$error;  
               }  
        ?>  
    3、这里是我们封装好了一个类(Mail.class.php)上面引入的类

  4.  <?php  
        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;  
                            }  
                     }  
             }  
       ?>  


已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jake3425311
2016-11-19 · TA获得超过417个赞
知道小有建树答主
回答量:476
采纳率:25%
帮助的人:91.9万
展开全部
phpmail有这个类
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式