php用curl smtp发送邮件
PHP #发邮件 #curl #smtp2012-06-04 14:19
SMTP协议
这个在网上可以找到多相关的例子,可以自己实验一下使用telnet去连接mail服务器
01 | $ telnet 邮箱SMTP服务地址 25 |
02 | Trying 邮箱服务IP地址... |
03 | Connected to 邮箱SMTP服务地址. |
04 | Escape character is '^]' . |
05 | exchange邮箱服务器地址 Microsoft ESMTP MAIL Service ready at Sat, 2 Jun 2012 15:02:12 +0800 |
06 | EHLO 127.0.0.1 |
07 | -exchange邮箱服务器地址 Hello [邮箱服务IP地址] |
08 | -SIZE |
09 | -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. |
01 | <?php |
02 | header( "content-type:text/html;charset=utf-8" ); |
03 | $smtp = array ( |
04 | "url" => "邮箱SMTP服务器地址" , |
05 | "port" => "邮箱SMTP服务器端口" , // 一般为25 |
06 | "username" => "用户名" , |
07 | "password" => "密码" , |
08 | "from" => "发件地址" , |
09 | "to" => "收件地址" , |
10 | "subject" => "测试一下标题" , |
11 | "body" => "测试一下内容" |
12 | ); |
13 | |
14 | $CRLF = "\r\n" ; |
15 | $test = "" ; |
16 | $curl = curl_init(); |
17 | |
18 | curl_setopt( $curl , CURLOPT_URL, $smtp [ 'url' ]); |
19 | curl_setopt( $curl , CURLOPT_PORT, $smtp [ 'port' ]); |
20 | curl_setopt( $curl , CURLOPT_TIMEOUT,10); |
21 | |
22 | function inlineCode( $str ){ |
23 | $str = trim( $str ); |
24 | return $str ? '=?UTF-8?B?' . base64_encode ( $str ). '?= ' : '' ; |
25 | } |
26 | |
27 | function buildHeader( $headers ){ |
28 | $ret = '' ; |
29 | foreach ( $headers as $k => $v ){ |
30 | $ret .= $k . ': ' . $v . "\n" ; |
31 | } |
32 | return $ret ; |
33 | } |
34 | |
35 | // |
36 | $header = array ( |
37 | 'Return-path' => '<' . $smtp [ 'from' ]. '>' , |
38 | 'Date' => date ( 'r' ), |
39 | 'From' => '<' . $smtp [ 'from' ]. '>' , |
40 | 'MIME-Version' => '1.0' , |
41 | 'Subject' =>inlineCode( $smtp [ 'subject' ]), |
42 | 'To' => $smtp [ 'to' ], |
43 | 'Content-Type' => 'text/html; charset=UTF-8; format=flowed' , |
44 | 'Content-Transfer-Encoding' => 'base64' |
45 | ); |
46 | $data = buildHeader( $header ). $CRLF . chunk_split ( base64_encode ( $smtp [ 'body' ])); |
47 | |
48 | |
49 | $content = "EHLO " . $smtp [ "url" ]. $CRLF ; // 先得hello一下 |
50 | $content .= "AUTH LOGIN" . $CRLF . base64_encode ( $smtp [ "username" ]). $CRLF . base64_encode ( $smtp [ "password" ]). $CRLF ; // 验证登陆 |
51 | $content .= "MAIL FROM:" . $smtp [ "from" ]. $CRLF ; // 发件地址 |
52 | $content .= "RCPT TO:" . $smtp [ "to" ]. $CRLF ; // 收件地址 |
53 | $content .= "DATA" . $CRLF . $data . $CRLF . "." . $CRLF ; // 发送内容 |
54 | $content .= "QUIT" . $CRLF ; // 退出 |
55 | |
56 | curl_setopt( $curl , CURLOPT_RETURNTRANSFER, true); // curl接收返回数据 |
57 | curl_setopt( $curl , CURLOPT_CUSTOMREQUEST, $content ); |
58 | $test = curl_exec( $curl ); |
59 | var_dump( $test ); |
60 | echo "<br/>\r\n" ; |
61 | var_dump( $content ); |
62 | |
63 | // 结束 |
64 | curl_close( $curl ); |
相关文章
- php隐藏图片真实地址的代码 2012/06/04
- 在windows下定时执行PHP的方法 2012/06/04
- PHP实现京东API的授权HASH算法 2012/06/03
- PHP正则验证邮箱的函数 2012/06/03
- PHP清空新浪微博的代码 2012/06/03
- PHP去除BOM头的代码 2012/06/02
- PHP把xml转换成数组的方法 2012/06/02
- PHP函数parse_ini_file()的用法 2012/05/31
- PHP新手必须注意的问题 2012/05/31
- PHP分页的思路及在ZF中的使用 2012/05/31