Discuz!官方免费开源建站系统

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

不能正常发送邮件的用户注意:

[复制链接]
茄子 发表于 2008-10-23 15:14:34 | 显示全部楼层 |阅读模式
本帖最后由 茄子 于 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')." SETlastsend='$_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')." SETlastsend='$_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)重新更改邮件账户密码https://discuz.dismall.com/thread-1157269-1-4.html

评分

1

查看全部评分

fishleong 发表于 2008-10-23 15:29:01 | 显示全部楼层
谢谢茄子MM~
回复

使用道具 举报

xuez 发表于 2008-10-23 15:44:13 | 显示全部楼层
马上去试试,谢谢茄子
回复

使用道具 举报

wheelyu 发表于 2008-10-23 15:47:22 | 显示全部楼层
占个坑。。。俺的邮件似乎没有问题,呵呵~

不太清楚,5分钟发一次是啥意思~~~
回复

使用道具 举报

zdszf 发表于 2008-10-23 16:08:41 | 显示全部楼层
成功了,我测试QQ、163邮箱都可以发送。
回复

使用道具 举报

gyjing 发表于 2008-10-23 16:19:59 | 显示全部楼层
本帖最后由 gyjing 于 2008-10-23 16:53 编辑

现在验证邮件能发出来了,不错,可以用其它邮箱了。
回复

使用道具 举报

gyjing 发表于 2008-10-23 16:22:57 | 显示全部楼层
本帖最后由 gyjing 于 2008-10-23 16:25 编辑

经过这样修改,如果设置了多少天不上线,发邮件通知,这个能用了不?
回复

使用道具 举报

open.style 发表于 2008-10-23 16:50:19 | 显示全部楼层
邮件通知能用?
回复

使用道具 举报

regsvr32 发表于 2008-10-23 17:06:33 | 显示全部楼层
我的还是不行
回复

使用道具 举报

djdoudou 发表于 2008-10-23 17:12:13 | 显示全部楼层
第二页了?
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-23 05:21 , Processed in 0.032311 second(s), 6 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

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