PHP SMTP发送邮件函数
程序员文章站
2022-04-13 20:57:28
...
php代码
$bfconfig = Array ( 'sitename' => '网站名称', ); $mail = Array ( 'state' => 1, 'server' => 'smtp.abc.com', 'port' => 25, 'auth' => 1, 'username' => 'admin@abc.com', 'password' => '123456', 'charset' => 'gbk', 'mailfrom' => 'admin@abc.com' ); function sendmail($mail_to, $mail_subject, $mail_message) { global $mail, $bfconfig; date_default_timezone_set('PRC'); $mail_subject = '=?'.$mail['charset'].'?B?'.base64_encode($mail_subject).'?='; $mail_message = chunk_split(base64_encode(preg_replace("/(^|(\r\n))(\.)/", "\1.\3", $mail_message))); $headers .= ""; $headers .= "MIME-Version:1.0\r\n"; $headers .= "Content-type:text/html\r\n"; $headers .= "Content-Transfer-Encoding: base64\r\n"; $headers .= "From: ".$bfconfig['sitename']."<".$mail['mailfrom'].">\r\n"; $headers .= "Date: ".date("r")."\r\n"; list($msec, $sec) = explode(" ", microtime()); $headers .= "Message-ID: <".date("YmdHis", $sec).".".($msec * 1000000).".".$mail['mailfrom'].">\r\n"; if(!$fp = fsockopen($mail['server'], $mail['port'], $errno, $errstr, 30)) { exit("CONNECT - Unable to connect to the SMTP server"); } stream_set_blocking($fp, true); $lastmessage = fgets($fp, 512); if(substr($lastmessage, 0, 3) != '220') { exit("CONNECT - ".$lastmessage); } fputs($fp, ($mail['auth'] ? 'EHLO' : 'HELO')." befen\r\n"); $lastmessage = fgets($fp, 512); if(substr($lastmessage, 0, 3) != 220 && substr($lastmessage, 0, 3) != 250) { exit("HELO/EHLO - ".$lastmessage); } while(1) { if(substr($lastmessage, 3, 1) != '-' || empty($lastmessage)) { break; } $lastmessage = fgets($fp, 512); } if($mail['auth']) { fputs($fp, "AUTH LOGIN\r\n"); $lastmessage = fgets($fp, 512); if(substr($lastmessage, 0, 3) != 334) { exit($lastmessage); } fputs($fp, base64_encode($mail['username'])."\r\n"); $lastmessage = fgets($fp, 512); if(substr($lastmessage, 0, 3) != 334) { exit("AUTH LOGIN - ".$lastmessage); } fputs($fp, base64_encode($mail['password'])."\r\n"); $lastmessage = fgets($fp, 512); if(substr($lastmessage, 0, 3) != 235) { exit("AUTH LOGIN - ".$lastmessage); } $email_from = $mail['mailfrom']; } fputs($fp, "MAIL FROM: <".preg_replace("/.*\<(.+?)\>.*/", "\\1", $email_from).">\r\n"); $lastmessage = fgets($fp, 512); if(substr($lastmessage, 0, 3) != 250) { fputs($fp, "MAIL FROM: <".preg_replace("/.*\<(.+?)\>.*/", "\\1", $email_from).">\r\n"); $lastmessage = fgets($fp, 512); if(substr($lastmessage, 0, 3) != 250) { exit("MAIL FROM - ".$lastmessage); } } foreach(explode(',', $mail_to) as $touser) { $touser = trim($touser); if($touser) { fputs($fp, "RCPT TO: <".preg_replace("/.*\<(.+?)\>.*/", "\\1", $touser).">\r\n"); $lastmessage = fgets($fp, 512); if(substr($lastmessage, 0, 3) != 250) { fputs($fp, "RCPT TO: <".preg_replace("/.*\<(.+?)\>.*/", "\\1", $touser).">\r\n"); $lastmessage = fgets($fp, 512); exit("RCPT TO - ".$lastmessage); } } } fputs($fp, "DATA\r\n"); $lastmessage = fgets($fp, 512); if(substr($lastmessage, 0, 3) != 354) { exit("DATA - ".$lastmessage); } fputs($fp, $headers); fputs($fp, "To: ".$mail_to."\r\n"); fputs($fp, "Subject: $mail_subject\r\n"); fputs($fp, "\r\n\r\n"); fputs($fp, "$mail_message\r\n.\r\n"); $lastmessage = fgets($fp, 512); if(substr($lastmessage, 0, 3) != 250) { exit("END - ".$lastmessage); } fputs($fp, "QUIT\r\n"); }
上一篇: 关于PHP5.3作废函数的处理方法
下一篇: PHP中文竖排转换实现方法