20080511 - php send_mail()
2008-05-11 23:24
369 查看
写了一个网站,反馈页面要用到 php 发邮件,无奈网站空间的 php 没有配置可用的邮件服务器,发现 php 也可通过
socket 裸发邮件。配一个可用的帐号,下面函数就可用了。
1function 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: <".$from.">".$lb, "250", "MAIL FROM error: ");
23 $smtp[] = array("RCPT TO: <".$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 "<strong>Error:</strong> Cannot connect to ".$smtp_host."<br />";
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."<br />";
58 }
59 }
60 }
61 @fclose($fp);
62 return $result_str;
63}
64
65
socket 裸发邮件。配一个可用的帐号,下面函数就可用了。
1function 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: <".$from.">".$lb, "250", "MAIL FROM error: ");
23 $smtp[] = array("RCPT TO: <".$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 "<strong>Error:</strong> Cannot connect to ".$smtp_host."<br />";
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."<br />";
58 }
59 }
60 }
61 @fclose($fp);
62 return $result_str;
63}
64
65
相关文章推荐
- Send out html emails in php using the mail func...
- mail_send.php
- mail_send.php
- 黄聪:VPS服务器如何配置PHP.ini解决wordpress使用WP-Mail-SMTP插件发邮件出现Could not connect to SMTP host的解决办法
- 用Telnet 来用smtp发邮件。。 send mail by SMTP server
- erlang send mail
- linux/window配置php PEAR:Mail发送html邮件
- .net send Mail
- phpmailmonitor.sh
- 解决PHP Fatal error: Call to undefined function mail()
- Send JSON To PHP
- PHP PEAR MAIL发送TEXT/HTML格式邮件
- 生成图片E-mail地址[php]
- com.sun.mail.smtp.SMTPSendFailedException: 553 authentication is required,163 smtp9,DcCowACnMFm7ZwRZ
- 在PHP中使用X-SendFile头让文件下载更快
- Cannot send session cache limiter - headers already sent 的php错误怎么解决?
- 在2008 R2中set sp_send_dbmail attachment encoding
- send-mail: fatal: parameter inet_interfaces: no local interface found for ::1
- 解决php中Cannot send session cache limiter 的问题的方法
- ABAP:Convert Spool request to PDF and send as e-mail