Discuz! 官方站

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

[经验] 不能正常发送邮件的用户注意:(更新20090305)

[复制链接]
茄子 发表于 2008-12-17 15:27:47 | 显示全部楼层 |阅读模式
本帖最后由 茄子 于 2009-3-5 11:08 编辑

可以尝试如下操作:

首先请恢复标准程序和模版,本帖不受理自己修改程序和模版导致的不能发送错误


1)请参考http://www.discuz.net/viewthread.php?tid=1045451设置邮件
下帖列出了一些主要邮箱的设置方法。
http://www.discuz.net/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

  1. <?php
  2. if(!function_exists('fsockopen')) {
  3.     echo '系统不支持fsockopen函数,请联系空间商';
  4. }
  5. $fp = fsockopen('smtp.foxmail.com', 25, $errno, $errstr, 60);
  6. if(!$fp) {
  7.     echo "联接失败了";
  8. } else {
  9.     echo "联接成功哦";
  10. }
  11. ?>

复制代码
如果提示连接失败,那么就是你的空间无法连接邮件服务器,找空间商协助解决吧。
如果提示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)重新更改邮件账户密码http://www.discuz.net/thread-1157269-1-4.html
2007eve 发表于 2008-12-17 15:42:38 | 显示全部楼层
沙发@@@@
回复

使用道具 举报

abcnic1 发表于 2008-12-17 15:48:54 | 显示全部楼层
嗯 好的 :)
回复

使用道具 举报

abcnic1 发表于 2008-12-17 16:00:22 | 显示全部楼层
工作人员挺辛苦的 为用户
支持你们
回复

使用道具 举报

失落的女孩 发表于 2008-12-17 16:09:54 | 显示全部楼层
大家特别要注意买咖啡这款杀毒软件....它默认是关掉了25的端口的!
回复

使用道具 举报

vicred 发表于 2008-12-17 16:18:33 | 显示全部楼层
支持楼主
回复

使用道具 举报

疯青蛙 发表于 2008-12-17 17:09:31 | 显示全部楼层
茄MM,你上面的代码少了两个空格
回复

使用道具 举报

kongdehua 发表于 2008-12-17 18:59:32 | 显示全部楼层
(smtp.foxmail.com:25) PASSWORD - 535 Error: authentication failed

我的uch 日志里面提示这个错误   可是设置是和论坛一样的  论坛的就可以正常发送邮件
回复

使用道具 举报

windcui 发表于 2008-12-17 19:15:01 | 显示全部楼层
顶了急需此帮助
回复

使用道具 举报

chinashiwei 发表于 2008-12-17 20:32:57 | 显示全部楼层
<?PHP exit;?>        2008-12-17 00:17:50                58.46.45.177        2        /do.php?ac=sendmail&rand=1229444269        (smtp.dns.gzisp.net:25) END - 554 failed MAIL FROM verification with the FROM field in message header.
<?PHP exit;?>        2008-12-17 00:18:19                58.46.45.177        2        /do.php?ac=sendmail&rand=1229444299        (smtp.dns.gzisp.net:25) END - 554 failed MAIL FROM verification with the FROM field in message header.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2022-8-12 01:43 , Processed in 0.057910 second(s), 16 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2022, Tencent Cloud.

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