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

[经验分享] 在LAMP环境下pear::Mail发送邮件错误sendmail returned error code 78 的解决

[复制链接]

尚未签到

发表于 2015-11-25 11:52:42 | 显示全部楼层 |阅读模式
  我在LAMP环境下在安装statusnet的时候遇到最大的一个问题就是在用户注册时,输入用户的电子邮件地址,注册后就会显示如下的错误:
  Database error
  An important error occured, probably related to email setup. Check logfiles for more info..
  对于这个问题我一直无法解决。
  随着我对statusnet的深入剖析和学习,随着一步一步的深入代码我终于找到了这个问题的根本原因所在。在statusnet根目录/class/User.php中
  if ($email && !$user->email) {
            mail_confirm_address($user, $confirm->code, $profile->nickname, $email);
  这段调用了statusnet根目录/lib/mail.php中的函数,最终调用这个函数
  function mail_send($recipients, $headers, $body)
{
    // XXX: use Mail_Queue... maybe
    $backend = mail_backend();
    if (!isset($headers['Content-Type'])) {
        $headers['Content-Type'] = 'text/plain; charset=UTF-8';
    }
    assert($backend); // throws an error if it's bad
    $sent = $backend->send($recipients, $headers, $body);
    if (PEAR::isError($sent)) {
        common_log(LOG_ERR, 'Email error: ' . $sent->getMessage());
        return false;
    }
    return true;
}
  在这里你要在config.php中配置下你的邮件选项,如果你使用的是linux下默认的sendmail就可以如下配置
  $config['mail']['notifyfrom'] = 'blog@xiaofei.zgch.gov.cn';//寄送确认信件的发送邮件地址
$config['mail']['domain'] = 'xiaofei.zgch.gov.cn';//所在的主机和域名的全称(这里主机名xiaofei,域名zgch.gov.cn)
$config['mail']['backend'] = 'sendmail';//你所用的发送邮件的服务(我用的是linux下默认的sendmail)
$config['mail']['params'] = array('sendmail_path' => '/usr/sbin/sendmail','sendmail_args' => '-oi -t');//我用的是fedora12,默认sendmail路径
  注意sendmail_args的参数
  Two useful flags to pass sendmail are -oi and -t. The -oi flag tells sendmail not to
think a single dot (.) on a line is the end of the message. The -t flag makes sendmail
parse the file for To: and other header lines.
  这样配置你就会遇到文章开始处的错误。你会看到apache的错误和statusnet本身的错误都指向了mail的配置。只好来看看sendmail本身的log,在这里/var/log/maillog,你会看到这样的错误
  Mar 23 15:51:11 xiaofei sendmail[3773]: NOQUEUE: SYSERR(apache): can not chdir(/var/spool/clientmqueue/): Permission denied
  这个好像是说apache没有这个目录的权限,网上有的解决方案是如下改变该目录的权限
  chmod 777 /var/spool/clientmqueue
  但是这样是无济于事的。你应该这样干
  /usr/sbin/setsebool -P httpd_can_sendmail=on
  原因是apache默认并不运行sendmail。你必须手动开启。这里手的比较详尽:
  By default, Apache is not allowed to run Sendmail. This is a security feature.
To enable it, go to a root prompt and do:
/usr/sbin/setsebool -P httpd_can_sendmail=on
I have tried changing permissions but I get no where.
It's not a "file permissions" problem, as such -- you should put them back to how they're supposed to be.
  这样改完了你的邮件设置才正确,才能正确的从statusnet发送确认信件到用户输入的邮箱。
  还有一点值得注意:你最好把你误用chmod 777 /var/spool/clientmqueue改的目录权限改过来,不然/var/log/maillog会提示你
  Mar 23 16:07:40 xiaofei sendmail[3840]: dangerous permissions=40777 on queue directory /var/spool/clientmqueue/
  这是“很危险的”!!!

运维网声明 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-143378-1-1.html 上篇帖子: 【转】Centos系统sendmail发送邮件很慢的解决方法 下篇帖子: linux 定时执行shell脚本 【并发送信息到指定邮件centos6需要yum install sendmail】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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