读书人

mutt发送邮件失败解决办法

发布时间: 2013-06-26 14:29:32 作者: rapoo

mutt发送邮件失败
我的程序是一个服务器状态监控,当有告警信息产生时会发送告警邮件,发送邮件的方式是通过fork产生一个子进程,然后调用脚本,用mutt去发送邮件,部分程序如下:

                memset(Fdesc,0,sizeof(Fdesc));
snprintf(Fdesc,256,"/sbin/jump_mailalarm 1 \"服务器%s 进程%s已停止\"",inet_ntoa(IpAddr),ProcessName);
if((childpid = fork()) == 0)
{
int i = -1;
i = system(Fdesc);
printf("system finish,Fdesc is %s,i is %d,errno is %s\n",Fdesc,i,strerror(errno));
exit(0);
}
if (0 > childpid)
{
fprintf(fd,"fork error,errno is %s\n",strerror(errno));
}
MONITOR_PRINTF("note Process +++++++++++=%s\n",Fdesc);

然后调用的脚本jump_mailalar中用mutt发送邮件,其中脚本最后的地方是:
if [ -n "$desc" ]; then
echo "$content" |/usr/bin/mutt -s "服务器监控-$alarmtype" $mail>/dev/null
echo "$content"
fi
我通过打印信息发现,echo“$content”的值已经打印出来了,说明已经调用了mutt,但是最后却收不到邮件,只要我重新启动一下我的程序,就可以收到邮件了。只要关闭邮件,然后等一会再打开就又收不到邮件了,除非重新启动程序。fork调用应该成功了,因为已经走到调用脚本的地方了。请教各位大师有可能什么地方出错了呢? linux?mutt?fork
[解决办法]
。。。system本来就是创建子进程,你还fork个毛。

为什么不用fork+exec或者直接system。

system finish,Fdesc这一句没打印说明脚本没跑完卡在那里了。

读书人网 >C语言

热点推荐