当前位置:Gxlcms > PHP教程 > php中通过curlsmtp发送邮件_PHP教程

php中通过curlsmtp发送邮件_PHP教程

时间:2021-07-01 10:21:17 帮助过:54人阅读

先google了一下,发现很多问相关问题的但没有相关的解答,在phpclasses里也没有找到相关的类于是自己边看stmp的相关协议边开始尝试curl
SMTP协议
这个在网上可以找到多相关的例子,可以自己实验一下使用telnet去连接mail服务器
代码如下:
  1. <br>$ telnet 邮箱SMTP服务地址 25 <br>Trying 邮箱服务IP地址... <br>Connected to 邮箱SMTP服务地址. <br>Escape character is '^]'. <br>exchange邮箱服务器地址 Microsoft ESMTP MAIL Service ready at Sat, 2 Jun 2012 15:02:12 +0800 <br>EHLO 127.0.0.1 <br>-exchange邮箱服务器地址 Hello [邮箱服务IP地址] <br>-SIZE <br>-PIPELINING <br>-DSN <br>-ENHANCEDSTATUSCODES <br>-X-ANONYMOUSTLS <br>-AUTH NTLM LOGIN <br>-X-EXPS GSSAPI NTLM <br>-8BITMIME <br>-BINARYMIME <br>-CHUNKING <br>-XEXCH50 <br>XRDST <br>AUTH LOGIN <br>VXNlcm5hbWU6 <br>用户名(base64_encode) <br>UGFzc3dvcmQ6 <br>密码(base64_encode) <br>2.7.0 Authentication successful <br>MAIL FROM:发件箱地址 <br>2.1.0 Sender OK <br>RCPT TO:收件箱地址 <br>2.1.5 Recipient OK <br>DATA <br>Start mail input; end with <crlf>.<crlf> <br>要发送的内容(这里的相关的规范有很多) <br>. <br>2.6.0 <0b476f30-3b96-4e3d-84d2-395a96d34000@exchange邮箱服务器地址> Queued mail for delivery <br>QUIT <br>2.0.0 Service closing transmission channel <br>Connection closed by foreign host. <br> <br>php测试代码: <br><span style="CURSOR: pointer" onclick="doCopy('code24098')"><u></u></span> 代码如下:<pre class="brush:php;toolbar:false layui-box layui-code-view layui-code-notepad"><ol class="layui-code-ol"><li><br><!--?php <BR-->header("content-type:text/html;charset=utf-8"); <br>$smtp = array( <br>"url" => "邮箱SMTP服务器地址", <br>"port" => "邮箱SMTP服务器端口", // 一般为25 <br>"username" => "用户名", <br>"password" => "密码", <br>"from" => "发件地址", <br>"to" => "收件地址", <br>"subject" => "测试一下标题", <br>"body" => "测试一下内容" <br>); <br>$CRLF = "\r\n"; <br>$test = ""; <br>$curl = curl_init(); <br>curl_setopt($curl, CURLOPT_URL, $smtp['url']); <br>curl_setopt($curl, CURLOPT_PORT, $smtp['port']); <br>curl_setopt($curl, CURLOPT_TIMEOUT,10); <br>function inlineCode($str){ <br>$str = trim($str); <br>return $str?'=?UTF-8?B?'.base64_encode($str).'?= ':''; <br>} <br>function buildHeader($headers){ <br>$ret = ''; <br>foreach($headers as $k=>$v){ <br>$ret.=$k.': '.$v."\n"; <br>} <br>return $ret; <br>} <br>// <br>$header = array( <br>'Return-path'=>'<'.$smtp['from'].'>', <br>'Date'=>date('r'), <br>'From'=> '<'.$smtp['from'].'>', <br>'MIME-Version'=>'1.0', <br>'Subject'=>inlineCode($smtp['subject']), <br>'To'=>$smtp['to'], <br>'Content-Type'=>'text/html; charset=UTF-8; format=flowed', <br>'Content-Transfer-Encoding'=>'base64' <br>); <br>$data = buildHeader($header).$CRLF.chunk_split(base64_encode($smtp['body'])); <br>$content = "EHLO ".$smtp["url"].$CRLF; // 先得hello一下 <br>$content .= "AUTH LOGIN".$CRLF.base64_encode($smtp["username"]).$CRLF.base64_encode($smtp["password"]).$CRLF; // 验证登陆 <br>$content .= "MAIL FROM:".$smtp["from"].$CRLF; // 发件地址 <br>$content .= "RCPT TO:".$smtp["to"].$CRLF; // 收件地址 <br>$content .= "DATA".$CRLF.$data.$CRLF.".".$CRLF; // 发送内容 <br>$content .= "QUIT".$CRLF; // 退出 <br>curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); // curl接收返回数据 <br>curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $content); <br>$test = curl_exec($curl); <br>var_dump($test); <br>echo "<br>\r\n"; <br>var_dump($content); <br>// 结束 <br>curl_close($curl); <br> <br>以上只是测试的php <br>包测试+修改花了近6个小时让产品的代码兼容了fsockopen和curl <br>以后有空写个兼容fsockopen和curl简单发送邮件的smtp类</li><li><p></p></li><li><p align="left"><span id="url" itemprop="url">http://www.bkjia.com/PHPjc/325390.html</span><span id="indexUrl" itemprop="indexUrl">www.bkjia.com</span><span id="isOriginal" itemprop="isOriginal">true</span><span id="isBasedOnUrl" itemprop="isBasedOnUrl">http://www.bkjia.com/PHPjc/325390.html</span><span id="genre" itemprop="genre">TechArticle</span><span id="description" itemprop="description">先google了一下,发现很多问相关问题的但没有相关的解答,在phpclasses里也没有找到相关的类于是自己边看stmp的相关协议边开始尝试curl SMTP协议...</span></p></li><li> </li></ol></pre></crlf></crlf>

人气教程排行