- function send_mail($to, $subject, $body) {
- /////////////Smtp 信息, 可以修改成你的,//////////
- $loc_host = "longbill"; // 发信计算机名, 可随意
- $smtp_acc = "longbill.mail"; //Smtp 认证的用户名,
- $smtp_pass = "longbill"; //Smtp 认证的密码,
- $smtp_host = "smtp.163.com"; //SMTP 服务器地址,
- $from = "longbill.mail@163.com"; // 要与 smtp 信息对应 , 否则会失败
- /////////////Smtp 信息完 //////////////////////////////////
- $headers = "Content-Type: text/plain; charset=\"gb2312\"\r\nContent-Transfer-Encoding: base64";
- $lb = "\r\n"; //linebreak
- $hdr = explode($lb, $headers); // 解析后的 hdr
- if ($body) {
- $bdy = preg_replace("/^\./", "..", explode($lb, $body));
- } // 解析后的 Body
- $smtp = array(
- //1EHLO, 期待返回 220 或者 250
- array("EHLO".$loc_host.$lb, "220,250", "HELO error:"),
- //2 发送 Auth Login, 期待返回 334
- array("AUTH LOGIN".$lb, "334", "AUTH error:"),
- //3 发送经过 Base64 编码的用户名, 期待返回 334
- array(base64_encode($smtp_acc).$lb, "334", "AUTHENTIFICATION error :"),
- //4 发送经过 Base64 编码的密码, 期待返回 235
- array(base64_encode($smtp_pass).$lb, "235", "AUTHENTIFICATION error :"));
- //5 发送 Mail From, 期待返回 250
- $smtp[] = array("MAIL FROM: <".$from.">".$lb, "250", "MAIL FROM error:");
- //6 发送 Rcpt To 期待返回 250
- $smtp[] = array("RCPT TO: <".$to.">".$lb, "250", "RCPT TO error:");
- //7 发送 DATA, 期待返回 354
- $smtp[] = array("DATA".$lb, "354", "DATA error:");
- //8.0 发送 From
- $smtp[] = array("From:".$from.$lb, "", "");
- //8.2 发送 To
- $smtp[] = array("To:".$to.$lb, "", "");
- //8.1 发送标题
- $smtp[] = array("Subject:".$subject.$lb, "", "");
- //8.3 发送其他 Header 内容
- foreach($hdr as $h) {
- $smtp[] = array($h.$lb, "", "");
- }
- //8.4 发送一个空行, 结束 Header 发送
- $smtp[] = array($lb, "", "");
- //8.5 发送信件主体
- if ($bdy) {
- foreach($bdy as $b) {
- $smtp[] = array(base64_encode($b.$lb).$lb, "", "");
- }
- }
- //9 发送. 表示信件结束, 期待返回 250
- $smtp[] = array(".".$lb, "250", "DATA(end)error:");
- //10 发送 Quit, 退出, 期待返回 221
- $smtp[] = array("QUIT".$lb, "221", "QUIT error:");
- // 打开 smtp 服务器端口
- $fp = @fsockopen($smtp_host, 25);
- if (!$fp) echo "Error: Cannot conect to".$smtp_host."
- ";
- while ($result = @fgets($fp, 1024)) {
- if (substr($result, 3, 1) == " ") {
- break;
- }
- }
- $result_str = "";
- // 发送 smtp 数组中的命令 / 数据
- foreach($smtp as $req) {
- // 发送信息
- @fputs($fp, $req[0]);
- // 如果需要接收服务器返回信息, 则
- if ($req[1]) {
- // 接收信息
- while ($result = @fgets($fp, 1024)) {
- if (substr($result, 3, 1) == " ") {
- break;
- }
- }
- if (!strstr($req[1], substr($result, 0, 3))) {
- $result_str. = $req[2].$result."";
- }
- }
- }
- // 关闭连接
- @fclose($fp);
- if ($result_str == "") {
- return " 发送成功!!";
- } else {
- return $result_str;
- }
- }
来源: https://www.php1.cn/detail/php-9714a5ca84.html