嗨,我对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


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

任何帮助,将不胜感激。

最佳答案

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

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的配置/控制文件


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

09-04 21:39