qmail-inject returns 111

qmail-inject returns 111

本文关键字:returns qmail-inject      更新时间:2023-10-16

嗨,我在使用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);
    }
}

发送邮件是一个这样的脚本:

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

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

任何帮助将不胜感激。

你执行qmail-inject的 C 代码看起来不错,至少从你向我们展示的内容来看是这样。

man qmail-inject告诉我们退出代码 111 表示临时错误。

qmail-inject 的源代码(v1.03,在这里与netqmail 1.06看起来相同)显示以下内容:

void temp() { _exit(111); }
void die_nomem() {
 substdio_putsflush(subfderr,"qmail-inject: fatal: out of memoryn"); 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-queuen"); temp(); }
void die_chdir() {
 substdio_putsflush(subfderr,"qmail-inject: fatal: internal bugn"); temp(); }
void die_read() {
 if (errno == error_nomem) die_nomem();
 substdio_putsflush(subfderr,"qmail-inject: fatal: read errorn"); temp(); }

从后者(加上对qmail-inject.c的更多查找)可以得出以下可能的原因,导致qmail-inject退出111:

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

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