20080511 - php send_mail()
写了一个网站,反馈页面要用到 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: <".$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
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: <".$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

浙公网安备 33010602011771号