您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

[php]php curl smtp发送邮件_PHP教程

2025/4/29 5:18:37发布19次查看
公司的云平台把fsockopen关掉了,如果要使用smtp外网的邮箱来发送邮件的话 只能试试使用curl来进行了
先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了一下,发现很多问相关问题的但...
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product