代码无法高亮,请自行复制到PHP代码编辑器查看echo send_mail('此处为收件人邮箱', '发信测试', '测试测试测试测试测试测试');
function send_mail($to, $subject = 'No subject', $body)
{
$loc_host = 'test';
//发信计算机名,可随意
$smtp_acc = 'test@hichina.com';
//Smtp认证的用户名,类似fuweng@im286.com,或者fuweng
$smtp_pass = 'test';
//Smtp认证的密码,一般等同pop3密码
$smtp_host = 'mx.hichina.com';
//SMTP服务器地址,类似 smtp.tom.com
$from = 'test@hichina.com';
//发信人Email地址,你的发信信箱地址
$headers = 'Content-Type: text/plain; charset="gb2312"
Content-Transfer-Encoding: base64';
$lb = '
';
//linebreak
$hdr = explode($lb, $headers);
//解析后的hdr
if ($body) {
$bdy = preg_replace('/^\\./', '..', explode($lb, $body));
}
//解析后的Body
$smtp = array(array('EHLO ' . $loc_host . $lb, '220,250', 'HELO error: '), array('AUTH LOGIN' . $lb, '334', 'AUTH error:'), array(base64_encode($smtp_acc) . $lb, '334', 'AUTHENTIFICATION error : '), 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);
return $result_str;
}
阅读全文
收起全文