嗨,我有一个关于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当我在命令行上运行这个脚本时,它工作得很好。但在我的程序中,这是不起作用的。
任何帮助都将不胜感激。
发布于 2012-11-16 22:23:02
您用来执行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的可能原因:
memory
-f或从配置/控制files)
qmail-queue )的qmail
chdir到qmail的控制/配置文件夹H120无法读取qmail的配置/控制文件H221F222
检查你这边的日志可能也会有帮助。
https://stackoverflow.com/questions/13417419
复制相似问题