嗨,我对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
(可能由于其不存在或缺少其搜索路径)无法
chdir
到qmail
的控制/配置文件夹无法读取qmail的配置/控制文件
检查您身边的日志也可能会有所帮助。