`
dongbao100
  • 浏览: 34488 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

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

    博客分类:
  • 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:$mailport  MAIL 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:$mailport  RCPT 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', "($mail[server]mail[port]) 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么?求解释……
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics