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

[经验分享] uchome发送邮件失败,需要修改sendmail设置

[复制链接]

尚未签到

发表于 2015-9-15 05:00:39 | 显示全部楼层 |阅读模式
  装了个UCHOME,设置一些参数的时候发现了个问题,怎么弄也不能发送邮件,比较郁闷,去discuz查了N多资料,也还是不行,按照上面设置的步骤来,还是不可以,比较头疼,大致原因好像是这样
  环境:
Windows操作系统,IIS6.0做为php解释引擎
  可能为windows原因,服务器又没有安装邮件系统,所以默认的发送方法不可行,也就是"通过 PHP 函数的 sendmail 发送(推荐此方式)",实验了N多次,不可以.
  没有办法,只好自己看代码修改了,通过第二种方式,也就是"通过 SOCKET 连接 SMTP 服务器发送(支持 ESMTP 验证)",但是实验了几个邮箱,QQ的没有发送成功,gmail没有发送成功,但是foxmail发送成功了.这个时候有点知道了,按理说应该是服务器设置原因,gmail必须要安全验证,也就是ssl发送才可以,看了下UCHOME的邮件发送代码,发现挺简单,加一句话就可以了.
打开source/function_sendmail.php,查找fsockopen,然后修改这句为:
  fsockopen("ssl://".$mail['server'], $mail['port'], $errno, $errstr, 30)
  这样的话,就可以了,但是需要服务器支持OpenSSL,这个可以通过查看PHPINFO来确定是否支持,嘿嘿,本来偶的也不支持,但是联系了下陈哥,帮忙解决了.如何开启OpenSSL和mcrypt
  到此为止,OK了,Discuz论坛上一堆人文这个问题,但是没几个说怎么解决的,翻来覆去都是那么几个帖子,拜托,就那么几个选项还能不知道怎么填么,问题是根本没把问题描述清楚.- -#
  PS:而且sendmail.php这个文件在官方的程序里面貌似还没有?至少我这个版本里面没有,不知道大C他们搞什么呢.下面是这个文件的代码,放到/source/cron/文件夹下面就可以了.
  <?php
/*
        [UCenter Home] (C) 2007-2008 Comsenz Inc.
        $Id: sendmail.php 8302 2008-08-01 02:10:28Z liguode $
*/
if(!defined('IN_UCHOME')) {
        exit('Access Denied');
}
//防止超时
set_time_limit(0);
//一次发送邮件个数
$pernum = 5;
include_once(S_ROOT.'./source/function_sendmail.php');
//获取发送队列
$emails = $touids = array();
$query = $_SGLOBAL['db']->query("SELECT touid, email FROM ".tname('mailcron')." WHERE sendtime<='$_SGLOBAL[timestamp]' ORDER BY sendtime LIMIT 0,$pernum");
while ($value = $_SGLOBAL['db']->fetch_array($query)) {
        if($value['email']) {
                $emails[$value['email']] = $value['email'];
        } elseif ($value['touid']) {
                $touids[$value['touid']] = $value['touid'];
        }
}
//获取用户邮件
$useremails = $deluids = array();
if($touids) {
        $query = $_SGLOBAL['db']->query("SELECT sf.emailcheck, sf.email, s.uid, s.lastsend, s.updatetime
                        FROM ".tname('space')." s
                        LEFT JOIN ".tname('spacefield')." sf ON sf.uid=s.uid
                        WHERE s.uid IN (".simplode($touids).")");
        while ($value = $_SGLOBAL['db']->fetch_array($query)) {
                if($_SCONFIG['sendmailday'] && $value['emailcheck'] && $value['email'] && ($_SGLOBAL['timestamp'] - $value['lastlogin'] > $_SCONFIG['sendmailday']*86400)) {
                        $useremails[$value['uid']] = $value['email'];
                } else {
                        $deluids[$value['uid']] = $value['uid'];
                        unset($touids[$value['uid']]);
                }
        }
}

//删除无效的用户邮件
if($deluids) {
        $_SGLOBAL['db']->query("DELETE FROM ".tname('mailcron')." WHERE touid IN (".simplode($deluids).")");
        $_SGLOBAL['db']->query("DELETE FROM ".tname('mailqueue')." WHERE touid IN (".simplode($deluids).")");
}
//获取邮件队列
$wherearr = $sends = $sendmails = array();
if($emails) {
        $wherearr[] = 'email IN ('.simplode($emails).')';
}
if($touids) {
        $wherearr[] = 'touid IN ('.simplode($touids).')';
}
if($wherearr) {
        $query = $_SGLOBAL['db']->query("SELECT * FROM ".tname('mailqueue')." WHERE ".implode(' OR ', $wherearr));
        while ($value = $_SGLOBAL['db']->fetch_array($query)) {
                if($value['touid']) {
                        $value['email'] = $useremails[$value['touid']];
                }
                $sendmails[$value['email']] = $value['email'];
                $sends[$value['email']]['subject'][] = $value['subject'];
                $sends[$value['email']]['message'][] = $value['message'];
                $sends[$value['email']]['dateline'][] = $value['dateline'];
        }
        //删除当前已执行的队列
        $_SGLOBAL['db']->query("DELETE FROM ".tname('mailcron')." WHERE ".implode(' OR ', $wherearr));
        $_SGLOBAL['db']->query("DELETE FROM ".tname('mailqueue')." WHERE ".implode(' OR ', $wherearr));
        //更新用户最后发送时间
        if($touids) {
                $_SGLOBAL['db']->query("UPDATE ".tname('space')." SET lastsend='$_SGLOBAL[timestamp]' WHERE uid IN (".simplode($touids).")");
        }
}
//开始发送邮件
foreach ($sendmails as $email) {
        $thesend = $sends[$email];
        $subject = $thesend['subject'][0];
        $message = '';
        foreach ($thesend['subject'] as $key => $value) {
                $gmdateline = sgmdate('m-d H:i', $thesend['dateline'][$key]);
                if($thesend['message'][$key]) {
                        $message .= "<strong>$value</strong> (".$gmdateline.")
\n".$thesend['message'][$key]."
\n";
                } else {
                        $message .= "$value (".$gmdateline.")
\n";
                }
        }
        sendmail(array($email), $subject, $message);
}
?>

运维网声明 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-113627-1-1.html 上篇帖子: World writable directory 解决方法[sendmail, ubuntu, sendmail重启失败] 下篇帖子: ubuntu sendmail安装和使用具体实现[转]
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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