设为首页 收藏本站
查看: 815|回复: 0

[经验分享] php发邮件程序怪现象,求解释

[复制链接]

尚未签到

发表于 2017-4-8 08:52:02 | 显示全部楼层 |阅读模式
手上有一段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么?求解释……

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-361731-1-1.html 上篇帖子: [转] flash socket与php socket通信的例子 下篇帖子: PHP中include路径的解决方法汇总
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表