Привет, у меня проблема с qmail. Я хочу отправить электронное письмо из моей программы. Я получил 111 код ошибки от qmail-inject. Но если я пытаюсь отправить ту же электронную почту из командной строки, это работает.
В моем коде:
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 для выполнения qmail-inject
выглядит хорошо, по крайней мере, из того, что вы нам показываете.
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 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
папка control / config файлаПроверка журналов на вашей стороне также может помочь.
Других решений пока нет …