欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

20080511

程序员文章站 2022-06-14 15:08:43
...
写了一个网站,反馈页面要用到 php 发邮件,无奈网站空间的 php 没有配置可用的邮件服务器,发现 php 也可通过
socket 裸发邮件。配一个可用的帐号,下面函数就可用了。

1 function send_mail( $to , $subject = ' 未标题 ' , $body ){
2 $loc_host = " smtp.126.com " ;
3 $smtp_acc = " youraccount " ;
4 $smtp_pass = " yourpassword " ;
5 $smtp_host = " smtp.126.com " ;
6 $from = " admin@126.com " ;
7
8 $headers = " Content-Type: text/plain; charset=\ " gb2312\ " \r\nContent-Transfer-Encoding:base64 " ;
9 $lb = " \r\n " ;
10 $hdr = explode ( $lb , $headers );
11 if ( $body ){
12 $bdy = preg_replace ( " /^\./ " , " .. " , explode ( $lb , $body ));
13 }
14
15 $smtp = array (
16 array ( " EHLO " . $loc_host . $lb , " 220, 250 " , " HELO error: " ) ,
17 array ( " AUTH LOGIN " . $lb , " 334 " , " AUTH error: " ) ,
18 array ( base64_encode ( $smtp_acc ) . $lb , " 334 " , " AUTHENTIFICATION error: " ) ,
19 array ( base64_encode ( $smtp_pass ) . $lb , " 235 " , " AUTHENTIFICATION error: " )
20 );
21
22 $smtp [] = array ( " MAIL FROM: " . $lb , " 250 " , " MAIL FROM error: " );
23 $smtp [] = array ( " RCPT TO: " . $lb , " 250 " , " RCPT TO error: " );
24 $smtp [] = array ( " DATA " . $lb , " 354 " , " DATA error: " );
25
26 $smtp [] = array ( " From: " . $from . $lb , "" , "" );
27 $smtp [] = array ( " To: " . $to . $lb , "" , "" );
28 $smtp [] = array ( " Subject: " . $subject . $lb , "" , "" );
29
30 foreach ( $hdr as $h ){
31 $smtp [] = array ( $h . $lb , "" , "" );
32 }
33
34 $smtp [] = array ( $lb , "" , "" );
35
36 if ( $bdy ){
37 foreach ( $bdy as $b ){
38 $smtp [] = array ( base64_encode ( $b . $lb ) . $lb , "" , "" );
39 }
40 }
41 $smtp [] = array ( " . " . $lb , " 250 " , " DATA(end) error: " );
42 $smtp [] = array ( " QUIT " . $lb , " 221 " , " QUIT error: " );
43
44 $fp = (@ fsockopen ( $smtp_host , 25 ));
45 if ( ! $fp ) echo " Error: Cannot connect to " . $smtp_host . "
" ;
46 while ( $result = @ fgets ( $fp , 1024 )){
47 if ( substr ( $result , 3 , 1 ) == " " ){ break ; }
48 }
49 $result_str = "" ;
50 foreach ( $smtp as $req ){
51 @ fputs ( $fp , $req [ 0 ]);
52 if ( $req [ 1 ]){
53 while ( $result = @ fgets ( $fp , 1024 )){
54 if ( substr ( $result , 3 , 1 ) == " " ){ break ; }
55 }
56 if ( ! strstr ( $req [ 1 ] , substr ( $result , 0 , 3 ))){
57 $result_str .= $reg [ 2 ] . $result . "
" ;
58 }
59 }
60 }
61 @ fclose ( $fp );
62 return $result_str ;
63 }
64
65

推荐阅读