qq70191 发表于 2017-4-8 08:52:02

php发邮件程序怪现象,求解释

手上有一段php发邮件的程序,由两个文件组成:sendmail.php和sendmail.inc.php
sendmail.php文件中的代码如下:

<?php
$maildefault = 'dongbao100@sina.com';
$mailsend = 2;////此变量写死,保证sendmail.inc.php文件中进入if($mailsend == 2)分支
$mailserver = 'smtp.sina.com';
$mailport = 25;
$mailauth = 1;
$mailfrom = 'dongbao100@sina.com';
$mailauth_username = 'dongbao100@sina.com';//////我用的发送邮件测试邮箱
$mailauth_password = '*******';//////我的发送邮件测试邮箱密码
$maildelimiter = '0';
$mailusername = '1';
$sendmail_silent = '1';
$email_to = '286392357@qq.com';//////我的接收邮件测试邮箱
//$email_message = "邮件发送";
$email_subject = '邮件题目 ';
////$email_message = '邮件内容';
$email_message = '邮件内容'.'.undis{display:none}';////如果邮件内容中包括字符串:.undis{display:none},发送邮件就不成功(提示成功但时间收不到邮件),如果不包含该字符串,则发送成功并能收到收到邮件。
include 'sendmail.inc.php';////包含发邮件程序
?>


文件sendmail.inc.php的内容如下:

<?php
//发送邮件
//屏蔽错误提示
$charset = 'UTF-8';
if($sendmail_silent) {
error_reporting(0);
}
//分隔符
$maildelimiter = !empty($maildelimiter) ? "\r\n" : "\n";
//收件人地址中是否包含用户名
$mailusername = isset($mailusername) ? $mailusername : 1;
$email_subject = '=?'.$charset.'?B?'.base64_encode(str_replace("\r", '', str_replace("\n", '', $email_subject))).'?=';
$mailsite = strstr($email_to,'@');
$email_message = str_replace("\r\n.", " \r\n..", str_replace("\n", "\r\n", str_replace("\r", "\n", str_replace("\r\n", "\n", str_replace("\n\r", "\r", $email_message)))));
if (!in_array($mailsite,array('@gmail.com',))) {
$email_message = chunk_split(base64_encode($email_message));////base64编码
}
foreach(explode(',', $email_to) as $touser) {
$tousers[] = $touser;
}
$email_to = implode(',', $tousers);
$headers = "From: $mailfrom{$maildelimiter}MIME-Version: 1.0{$maildelimiter}Content-type: text/plain; charset=$charset{$maildelimiter}Content-Transfer-Encoding: base64{$maildelimiter}";
//exit($mailsend);
if($mailsend == 1 && function_exists('mail')) {
@mail($email_to, $email_subject, $email_message, $headers);
} elseif($mailsend == 2) {////程序写死固定进入此if
if(!$fp = fsockopen($mailserver, $mailport, $errno, $errstr, 30)) {
die ("SMTP($mailserver:$mailport CONNECT - Unable to connect to the SMTP server");
}
stream_set_blocking($fp, true);
$lastmessage = fgets($fp, 512);
if(substr($lastmessage, 0, 3) != '220') {
die ("SMTP($mailserver:$mailport CONNECT - $lastmessage");
}
fputs($fp, ($mailcfg['auth'] ? 'EHLO' : 'HELO')." SupeSite\r\n");
$lastmessage = fgets($fp, 512);
if(substr($lastmessage, 0, 3) != 220 && substr($lastmessage, 0, 3) != 250) {
die ("SMTP($mailserver:$mailport HELO/EHLO - $lastmessage");
}
while(1) {
if(substr($lastmessage, 3, 1) != '-' || empty($lastmessage)) {
break;
}
$lastmessage = fgets($fp, 512);
}
if($mailauth) {
fputs($fp, "AUTH LOGIN\r\n");
$lastmessage = fgets($fp, 512);
if(substr($lastmessage, 0, 3) != 334) {
die ("SMTP($mailserver:$mailport AUTH LOGIN - $lastmessage");
}
fputs($fp, base64_encode($mailauth_username)."\r\n");
$lastmessage = fgets($fp, 512);
if(substr($lastmessage, 0, 3) != 334) {
die ("SMTP($mailserver:$mailport USERNAME - $lastmessage");
}
fputs($fp, base64_encode($mailauth_password)."\r\n");
$lastmessage = fgets($fp, 512);
if(substr($lastmessage, 0, 3) != 235) {
die ("SMTP($mailserver:$mailport PASSWORD - $lastmessage");
}
$mailfrom = $mailfrom;
}
fputs($fp, "MAIL FROM: <".preg_replace("/.*\<(.+?)\>.*/", "\\1", $mailfrom).">\r\n");
$lastmessage = fgets($fp, 512);
if(substr($lastmessage, 0, 3) != 250) {
fputs($fp, "MAIL FROM: <".preg_replace("/.*\<(.+?)\>.*/", "\\1", $mailfrom).">\r\n");
$lastmessage = fgets($fp, 512);
if(substr($lastmessage, 0, 3) != 250) {
die ("SMTP($mailserver:$mailportMAIL FROM - $lastmessage");
}
}
foreach(explode(',', $email_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);
die ("SMTP($mailserver:$mailportRCPT TO - $lastmessage");
}
}
}
fputs($fp, "DATA\r\n");
$lastmessage = fgets($fp, 512);
if(substr($lastmessage, 0, 3) != 354) {
die ("SMTP($mailserver:$mailport DATA - $lastmessage");
}
$headers .= 'Message-ID: <'.gmdate('YmdHs').'.'.substr(md5($email_message.microtime()), 0, 6).rand(100000, 999999).'@'.$_SERVER['HTTP_HOST'].">{$maildelimiter}X-Priority: 3{$maildelimiter}X-Mailer: Discuz! Mailer{$maildelimiter}";
fputs($fp, "Date: ".gmdate('r')."\r\n");
fputs($fp, "To: ".$email_to."\r\n");
fputs($fp, "Subject: ".$email_subject."\r\n");
fputs($fp, $headers."\r\n");
fputs($fp, "\r\n\r\n");
fputs($fp, "$email_message\r\n.\r\n");
$lastmessage = fgets($fp, 512);
if(substr($lastmessage, 0, 3) != 250) {
$errorlog('SMTP', "($mailmail) DATA - $lastmessage", 0);
}
fputs($fp, "QUIT\r\n");
//exit("aac");
} elseif($mailsend == 3) {
ini_set('SMTP', $mailserver);
ini_set('smtp_port', $mailport);
ini_set('sendmail_from', $mailauth_username);
@mail($email_to, $email_subject, $email_message, $headers);
}
?>


谁能帮帮忙解释解释,为什么邮件内容中包含字符串“.undis{display:none}”邮件就收不到呢,没有这个字符串就正常能收到邮件?我这也是在测试邮件的时候发现的怪现象,是程序中有什么bug么?求解释……
页: [1]
查看完整版本: php发邮件程序怪现象,求解释