qmail-inject返回111

时间:2012-11-16 13:18:34

标签: c++ c linux qmail

你好qmail有问题。我想从我的程序发送一封电子邮件,我从qmail-inject获得了111错误代码。但如果我尝试从命令行发送相同的电子邮件,它的工作原理。

在我的代码中:

if ((pid = fork()) < 0) {
        logger.error("error creating on new process");
}

else if (pid == 0) {
      logger.info("qmail-inject is calling now for Dlp Notify");
      if (execl("/opt/program/bin/sendmail","sendmail", notifySender, tempMail,(char*)   0) == -1)  {
        logger.error("notify operation failed: %s", strerror(errno));
        exit(1);
    }
}

sendmail就是这样的脚本:

/bin/cat $2 | /opt/smtp/bin/qmail-inject -f   $1

当我在命令行上运行此脚本时运行良好。但是从我的程序不起作用。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

执行qmail-inject的C代码看起来不错,至少从您向我们展示的内容开始。

man qmail-inject tells us exit code 111 indicates a temporary error

qmail-inject的来源(v1.03,netqmail 1.06的内容相同)显示如下:

void temp() { _exit(111); }
void die_nomem() {
 substdio_putsflush(subfderr,"qmail-inject: fatal: out of memory\n"); temp(); }
void die_invalid(sa) stralloc *sa; {
 substdio_putsflush(subfderr,"qmail-inject: fatal: invalid header field: ");
 substdio_putflush(subfderr,sa->s,sa->len); perm(); }
void die_qqt() {
 substdio_putsflush(subfderr,"qmail-inject: fatal: unable to run qmail-queue\n"); temp(); }
void die_chdir() {
 substdio_putsflush(subfderr,"qmail-inject: fatal: internal bug\n"); temp(); }
void die_read() {
 if (errno == error_nomem) die_nomem();
 substdio_putsflush(subfderr,"qmail-inject: fatal: read error\n"); temp(); }

从后者(连同一些更多的查找到qmail-inject.c)可以得出qmail-inject以111退出的以下可能原因:

  • 内存不足
  • 无效的标题字段(传递给-f或从配置/控制文件中读取)
  • 无法运行qmail-queue(可能由于其不存在或缺少搜索路径)
  • 无法chdirqmail的控件/配置文件夹
  • 无法读取qmail的配置/控制文件

检查您身边的日志也可能有所帮助。