Назад | Перейти на главную страницу

Как я могу переслать электронную почту на Perl-скрипт в Linux?

Я хочу, чтобы вся почта, отправляемая на конкретный псевдоним на машине Linux, обрабатывалась сценарием perl, но sendmail выдает мне ошибку «Служба недоступна», и я не понимаю, что мне не хватает.

Я создал свой скрипт handle_email.pl (сейчас он просто печатает свои параметры в /tmp/email.txt) и добавил на него символическую ссылку в /etc/smrsh.

Затем я добавил это в /etc/aliases:

mailtest: |handle_email.pl

и побежал newaliases потом. Обратите внимание, что я также пробовал mailtest: |/etc/smrsh/handle_email.pl который дал те же результаты. Я также пробовал скопировать настоящий скрипт в /etc/smrsh вместо ссылки, снова те же результаты.

Когда я отправляю почту на псевдоним mailtest, файл в /tmp никогда не создается, и я получаю это в / var / log / maillog:

Nov  1 14:43:59 localhost sendmail[24839]: qA1IhwHm024839: from=<xxx@xxx>, size=284, class=0, nrcpts=1, msgid=<201211011843.qA1IhwHm024839@localhost.localdomain>, proto=ESMTP, daemon=MTA, relay=[10.7.160.180]
Nov  1 14:43:59 localhost smrsh: uid 8: attempt to use "handle_email.pl"
Nov  1 14:43:59 localhost sendmail[24850]: qA1IhwHm024839: to=|handle_email.pl, ctladdr=<mailtest@xxx> (8/0), delay=00:00:00, xdelay=00:00:00, mailer=prog, pri=30570, dsn=5.0.0, stat=Service unavailable
Nov  1 14:43:59 localhost sendmail[24850]: qA1IhwHm024839: qA1IhxHm024850: DSN: Service unavailable
Nov  1 14:44:00 localhost sendmail[24850]: qA1IhxHm024850: to=<xxx@xxx>, delay=00:00:01, xdelay=00:00:01, mailer=esmtp, pri=31594, relay=sy-int-mx.xxx. [<IP addr>], dsn=2.0.0, stat=Sent (qA1Ii4127508 Message accepted for delivery)

Я получаю электронное письмо с описанием сбоя, в котором говорится:

The original message was received at Thu, 1 Nov 2012 14:58:16 -0400
from [<ip address>]

   ----- The following addresses had permanent fatal errors -----
|/etc/smrsh/handle_email.pl
    (reason: Service unavailable)
    (expanded from: <mailtest@xxx>)

   ----- Transcript of session follows -----
smrsh: "handle_email.pl" not available for sendmail programs
554 5.0.0 Service unavailable

Почему smrsh не выполняет мой скрипт?

Обновить: Отвечая на вопросы в комментариях.

Я скопировал сценарий в /etc/smrsh и удалил ссылку. Права доступа к файлу - 0700 (также пробовал 0755), а первая строка - #!/usr/local/bin/perl что правильно. Есть только один файл в /etc/smrsh. Вывод ls -l:

[main:g:64] xxx:/etc/smrsh# ls -l
total 4
-rwx------. 1 root root 281 Nov  1 16:35 handle_email.pl

Попробуйте изменить разрешение /etc/smrsh/handle_email.pl на 755, и я думаю, у вас будет больше успеха. Вы можете перезапустить sendmail, чтобы убедиться, что все правильно инициализировано и настроено.

smrsh может быть привередливым. В вашем примере скрипт принадлежит пользователю root. Попробуйте сменить владельца на почту.

Вам нужно добавить handle_email.pl в / etc / smrsh, а также каждую программу, которая выполняется из handle_email.pl. Поэтому, если вы используете echo для записи /tmp/email.txt, вам также необходимо сделать:

ln -s /bin/echo /etc/smrsh/echo

Изменить: Итак, в вашем случае вам нужно связать / usr / bin / perl