php中通过curl smtp发送邮件

先google了一下,发现很多问相关问题的但没有相关的解答,在phpclasses里也没有找到相关的类于是自己边看stmp的相关协议边开始尝试curl 
SMTP协议 

这个在网上可以找到多相关的例子,可以自己实验一下使用telnet去连接mail服务器 


  1. $ telnet 邮箱SMTP服务地址 25   
  2. Trying 邮箱服务IP地址...   
  3. Connected to 邮箱SMTP服务地址.   
  4. Escape character is '^]'.   
  5. exchange邮箱服务器地址 Microsoft ESMTP MAIL Service ready at Sat, 2 Jun 2012 15:02:12 +0800   
  6. EHLO 127.0.0.1   
  7. -exchange邮箱服务器地址 Hello [邮箱服务IP地址]   
  8. -SIZE   
  9. -PIPELINING   
  10. -DSN   
  11. -ENHANCEDSTATUSCODES   
  12. -X-ANONYMOUSTLS   
  13. -AUTH NTLM LOGIN   
  14. -X-EXPS GSSAPI NTLM   
  15. -8BITMIME   
  16. -BINARYMIME   
  17. -CHUNKING   
  18. -XEXCH50   
  19. XRDST   
  20. AUTH LOGIN   
  21. VXNlcm5hbWU6   
  22. 用户名(base64_encode)   
  23. UGFzc3dvcmQ6   
  24. 密码(base64_encode)   
  25. 2.7.0 Authentication successful   
  26. MAIL FROM:发件箱地址   
  27. 2.1.0 Sender OK   
  28. RCPT TO:收件箱地址   
  29. 2.1.5 Recipient OK   
  30. DATA   
  31. Start mail input; end with <CRLF>.<CRLF>   
  32. 要发送的内容(这里的相关的规范有很多)   
  33. .   
  34. 2.6.0 <0b476f30-3b96-4e3d-84d2-395a96d34000@exchange邮箱服务器地址> Queued mail for delivery   
  35. QUIT   
  36. 2.0.0 Service closing transmission channel   
  37. Connection closed by foreign host.  

PHP代码


  1. <?php   
  2. //author http://www.lai18.com  
  3. header("content-type:text/html;charset=utf-8");   
  4. $smtp = array(   
  5. "url" => "邮箱SMTP服务器地址",   
  6. "port" => "邮箱SMTP服务器端口"// 一般为25   
  7. "username" => "用户名",   
  8. "password" => "密码",   
  9. "from" => "发件地址",   
  10. "to" => "收件地址",   
  11. "subject" => "测试一下标题",   
  12. "body" => "测试一下内容"   
  13. );   
  14. $CRLF = "\r\n";   
  15. $test = "";   
  16. $curl = curl_init();   
  17. curl_setopt($curl, CURLOPT_URL, $smtp['url']);   
  18. curl_setopt($curl, CURLOPT_PORT, $smtp['port']);   
  19. curl_setopt($curl, CURLOPT_TIMEOUT,10);   
  20. function inlineCode($str){   
  21. $str = trim($str);   
  22. return $str?'=?UTF-8?B?'.base64_encode($str).'?= ':'';   
  23. }   
  24. function buildHeader($headers){   
  25. $ret = '';   
  26. foreach($headers as $k=>$v){   
  27. $ret.=$k.': '.$v."\n";   
  28. }   
  29. return $ret;   
  30. }   
  31. //   
  32. $header = array(   
  33. 'Return-path'=>'<'.$smtp['from'].'>',   
  34. 'Date'=>date('r'),   
  35. 'From'=> '<'.$smtp['from'].'>',   
  36. 'MIME-Version'=>'1.0',   
  37. 'Subject'=>inlineCode($smtp['subject']),   
  38. 'To'=>$smtp['to'],   
  39. 'Content-Type'=>'text/html; charset=UTF-8; format=flowed',   
  40. 'Content-Transfer-Encoding'=>'base64'   
  41. );   
  42. $data = buildHeader($header).$CRLF.chunk_split(base64_encode($smtp['body']));   
  43. $content = "EHLO ".$smtp["url"].$CRLF// 先得hello一下   
  44. $content .= "AUTH LOGIN".$CRLF.base64_encode($smtp["username"]).$CRLF.base64_encode($smtp["password"]).$CRLF// 验证登陆   
  45. $content .= "MAIL FROM:".$smtp["from"].$CRLF// 发件地址   
  46. $content .= "RCPT TO:".$smtp["to"].$CRLF// 收件地址   
  47. $content .= "DATA".$CRLF.$data.$CRLF.".".$CRLF// 发送内容   
  48. $content .= "QUIT".$CRLF// 退出   
  49. curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); // curl接收返回数据   
  50. curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $content);   
  51. $test = curl_exec($curl);   
  52. var_dump($test);   
  53. echo "<br/>\r\n";   
  54. var_dump($content);   
  55. // 结束   
  56. curl_close($curl);  

《CURL技术知识教程》系列技术教程整理
http://blog.csdn.net/hello_katty/article/details/45557423

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值