先google了一下,发现很多问相关问题的但没有相关的解答,在phpclasses里也没有找到相关的类于是自己边看stmp的相关协议边开始尝试curl
smtp协议
这个在网上可以找到多相关的例子,可以自己实验一下使用telnet去连接mail服务器
$ telnet 邮箱smtp服务地址 25
trying 邮箱服务ip地址...
connected to 邮箱smtp服务地址.
escape character is '^]'.
220 exchange邮箱服务器地址 microsoft esmtp mail service ready at sat, 2 jun 2012 15:02:12 +0800
ehlo 127.0.0.1
250-exchange邮箱服务器地址 hello [邮箱服务ip地址]
250-size
250-pipelining
250-dsn
250-enhancedstatuscodes
250-x-anonymoustls
250-auth ntlm login
250-x-exps gssapi ntlm
250-8bitmime
250-binarymime
250-chunking
250-xexch50
250 xrdst
auth login
334 vxnlcm5hbwu6
用户名(base64_encode)
334 ugfzc3dvcmq6
密码(base64_encode)
235 2.7.0 authentication successful
mail from:发件箱地址
250 2.1.0 sender ok
rcpt to:收件箱地址
250 2.1.5 recipient ok
data
354 start mail input; end with .
要发送的内容(这里的相关的规范有很多)
.
250 2.6.0 queued mail for delivery
quit
221 2.0.0 service closing transmission channel
connection closed by foreign host.
php测试代码:
1 邮箱smtp服务器地址,
5 port => 邮箱smtp服务器端口, // 一般为25
6 username => 用户名,
7 password => 密码,
8 from => 发件地址,
9 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'=>'',
38 'date'=>date('r'),
39 '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
\r\n;
61 var_dump($content);
62
63 // 结束
64 curl_close($curl);
以上只是测试的php
包测试+修改花了近6个小时让产品的代码兼容了fsockopen和curl
以后有空写个兼容fsockopen和curl简单发送邮件的smtp类
think in coding
摘自 bluefrog
http://www.bkjia.com/phpjc/478174.htmlwww.bkjia.comtruehttp://www.bkjia.com/phpjc/478174.htmltecharticle公司的云平台把fsockopen关掉了,如果要使用smtp外网的邮箱来发送邮件的话 只能试试使用curl来进行了 先google了一下,发现很多问相关问题的但...
