本帖最后由 茄子 于 2009-3-5 11:08 编辑
可以尝试如下操作:
首先请恢复标准程序和模版,本帖不受理自己修改程序和模版导致的不能发送错误
1)请参考https://discuz.dismall.com/viewthread.php?tid=1045451设置邮件
下帖列出了一些主要邮箱的设置方法。
https://discuz.dismall.com/viewthread.php?tid=1223128
2)登陆数据库,检查mailcron和mailqueue数据表,看看字段email字段是否存在一些错误的邮件地址,如果存在就删除这些错误的邮件地址。经检查发现部分用户安装了某些插件往这2个表里面塞入了非法格式的邮件地址也可能导致无法发送邮件。
3)经检查,部分用户由于发送邮件的时候mysql经常丢失链接,导致数据库中堆积了大量不成功的邮件,从而新的邮件无法发送造成。自查方法,可以看看mailcron和mailqueue表是否存在大量数据,如果存在,建议你可以如此修改下:
打开do_sendmail.php
找到
//开始发送
include_once(S_ROOT.'./source/function_sendmail.php');
foreach ($list as $cid => $value) {
$mlist = $sublist[$cid];
if($value['email'] && $mlist) {
$subject = getstr($mlist[0]['subject'], 80, 0, 0, 0, 0, -1);
$message = '';
foreach ($mlist as $subvalue) {
if($subvalue['message']) {
$message .= "<br><strong>$subvalue[subject]</strong><br>$subvalue[message]<br>";
} else {
$message .= $subvalue['subject'].'<br>';
}
}
if(!sendmail($value['email'], $subject, $message)) {
runlog('sendmail', "$value[email] sendmail failed.");
}
}
}
//更新用户最后发送时间
if($touids) {
$_SGLOBAL['db']->query("UPDATE ".tname('space')." SET lastsend='$_SGLOBAL[timestamp]' WHERE uid IN (".simplode($touids).")");
}
//删除邮件
$_SGLOBAL['db']->query("DELETE FROM ".tname('mailcron')." WHERE cid IN (".simplode($cids).")");
$_SGLOBAL['db']->query("DELETE FROM ".tname('mailqueue')." WHERE cid IN (".simplode($cids).")");
调整下顺序,修改为:
//更新用户最后发送时间
if($touids) {
$_SGLOBAL['db']->query("UPDATE ".tname('space')." SET lastsend='$_SGLOBAL[timestamp]' WHERE uid IN (".simplode($touids).")");
}
//删除邮件
$_SGLOBAL['db']->query("DELETE FROM ".tname('mailcron')." WHERE cid IN (".simplode($cids).")");
$_SGLOBAL['db']->query("DELETE FROM ".tname('mailqueue')." WHERE cid IN (".simplode($cids).")");
//开始发送
include_once(S_ROOT.'./source/function_sendmail.php');
foreach ($list as $cid => $value) {
$mlist = $sublist[$cid];
if($value['email'] && $mlist) {
$subject = getstr($mlist[0]['subject'], 80, 0, 0, 0, 0, -1);
$message = '';
foreach ($mlist as $subvalue) {
if($subvalue['message']) {
$message .= "<br><strong>$subvalue[subject]</strong><br>$subvalue[message]<br>";
} else {
$message .= $subvalue['subject'].'<br>';
}
}
if(!sendmail($value['email'], $subject, $message)) {
runlog('sendmail', "$value[email] sendmail failed.");
}
}
}
4)经检查,部分不能发送的用户是修改了模版,footer模版中去掉了以下代码导致,如果你修改了模版也可自查
查找footer.htm查看是否有下列代码 没有的话加入
<!--{if !isset($_SCOOKIE['sendmail'])}-->
<scriptlanguage="javascript" type="text/javascript"src="do.php?ac=sendmail&rand=$_SGLOBAL[timestamp]"></script>
<!--{/if}-->
这样应该发送就没有问题了,只要有人访问站点页面,邮件5分钟发送一次。
如果你按照以上设置论坛发送邮件成功,uch仍旧无法发送,可以到uch安装使用区提出。
将testmail.php访问url地址贴出来,并把你的data/log目录下的以下2个log文件贴出,类似这样的文件名:
200812_sendmail.php
200812_smtp.php
*****************************************
常见log错误整理:
1,(smtp.qq.com:25) CONNECT - Unable to connect to the SMTP server
表示的是你的uch文件所在服务器无法连接到邮件服务器
可能原因一般都是服务器没有开启25端口或者防火墙拦截导致
自测服务器是否能够连接邮件服务器的方法:
将下列代码保存为testmail.php,上传到uch程序根目录,运行,根据自己的情况修改其中的邮件服务器smtp地址,默认为foxmail
- <?php
- if(!function_exists('fsockopen')) {
- echo '系统不支持fsockopen函数,请联系空间商';
- }
- $fp = fsockopen('smtp.foxmail.com', 25, $errno, $errstr, 60);
- if(!$fp) {
- echo "联接失败了";
- } else {
- echo "联接成功哦";
- }
- ?>
复制代码 如果提示连接失败,那么就是你的空间无法连接邮件服务器,找空间商协助解决吧。
如果提示Warning: fsockopen(): unable to connect to smtp.foxmail.com:25 in \wwwroot\testmail.php on line 2那么说明你的空间不支持fsockopen()函数,联系空间商吧。
2,smtp.foxmail.com:25) PASSWORD - 535 Error: authentication failed
这是SMTP身份验证出错了。现在大多数的邮箱提供的发送邮件服务器都需要身份验证。
要求身份驗證 选择是
發信人郵件地址 和下面的账户信息必须正确
邮件服务端必须开启smtp
3,553 this mail is rejected by antispam system
你发的邮件内容被认为是垃圾邮件了
可以考虑更换下其他的邮件系统吧
4,503 Error: need EHLO and AUTH first !
可能之一服务器要求身份验证没有打勾 原因之二就是你的密码较验错误,看一下是否密码不正确
——————————————————————————————————
网友推荐方法:
1)重新更改邮件账户密码https://discuz.dismall.com/thread-1157269-1-4.html |