Я уже 2 недели бился головой об эту проблему. Я пытаюсь передать псевдоним sendmail (общий для виртуального домена) php-скрипту. Однако я всегда получаю следующее сообщение об ошибке (Невозможно отправить почту программам напрямую):
7 октября 14:35:49 fut-02 sm-mta [14057]: o97LZlmh014057: <5minutes@dev2.domain.com> ... Невозможно отправлять почту напрямую программам 7 октября 14:35:49 fut-02 sm-mta [ 14057]: o97LZlmh014057: from =, size = 0, class = 0, nrcpts = 0, proto = ESMTP, daemon = MTA-v4, relay = mail-ww0-f46.google.com [74.125.82.46]
Я пробовал использовать следующие псевдонимы в моем файле виртуальных пользователей:
@domain.com "|php -q /home/myuser/myscript.php"
@domain.com "|/usr/bin/php5 -q /home/myuser/myscript.php"
@domain.com "|php5 /home/myuser/myscript.php"
@domain.com "|myscript.php"
@domain.com "|php5 myscript.php"
Я пробовал включить smrsh в файле sendmail.mc двумя разными способами:
FEATURE(`smrsh',`/usr/lib/sm.bin/smrsh')dnl
FEATURE(`smrsh')dnl
Затем я попытался связать / usr / bin / php, / usr / bin / php5 (фактический двоичный файл) и сам скрипт с / etc / mail / smrsh /. Я также пробовал полностью отключить smrsh. Каждый тест приводит к одной и той же ошибке. Чтобы убедиться, что smrsh работает, я могу успешно запустить:
/usr/lib/sm.bin/smrsh -c "/usr/bin/php5 -q /home/user/myscript.php"
Копия моего sendmail.mc находится внизу этого сообщения.
Я упускаю что-то очевидное? Возможно ли что-то еще в конфигурации sendmail Ubuntu / Debian, которое может блокировать рассылку писем скриптам?
FWIW, я пробовал эту настройку на Ubuntu 10.10 RC и Debian 5. Те же результаты на обоих, за исключением того, что Debians по умолчанию sendmail.mc отформатирован неправильно (имел ОСОБЕННОСТИ после директив MAILER).
divert(0)dnl
#
# Copyright (c) 1998-2005 Richard Nelson. All Rights Reserved.
#
# This file is used to configure Sendmail for use with Debian systems.
#
define(`_USE_ETC_MAIL_')dnl
include(`/usr/share/sendmail/cf/m4/cf.m4')dnl
VERSIONID(`$Id: sendmail.mc, v 8.14.3-9.2ubuntu1 2010-08-03 06:56:05 cowboy Exp $')
OSTYPE(`debian')dnl
DOMAIN(`debian-mta')dnl
dnl # Items controlled by /etc/mail/sendmail.conf - DO NOT TOUCH HERE
undefine(`confHOST_STATUS_DIRECTORY')dnl #DAEMON_HOSTSTATS=
dnl # Items controlled by /etc/mail/sendmail.conf - DO NOT TOUCH HERE
dnl #
dnl # General defines
dnl #
dnl # SAFE_FILE_ENV: [undefined] If set, sendmail will do a chroot()
dnl # into this directory before writing files.
dnl # If *all* your user accounts are under /home then use that
dnl # instead - it will prevent any writes outside of /home !
dnl # define(`confSAFE_FILE_ENV', `')dnl
dnl #
dnl # Daemon options - restrict to servicing LOCALHOST ONLY !!!
dnl # Remove `, Addr=' clauses to receive from any interface
dnl # If you want to support IPv6, switch the commented/uncommentd lines
dnl #
FEATURE(`no_default_msa')dnl
dnl DAEMON_OPTIONS(`Family=inet6, Name=MTA-v6, Port=smtp, Addr=::1')dnl
DAEMON_OPTIONS(`Family=inet, Name=MTA-v4, Port=smtp')dnl
dnl DAEMON_OPTIONS(`Family=inet6, Name=MSP-v6, Port=submission, M=Ea, Addr=::1')dnl
DAEMON_OPTIONS(`Family=inet, Name=MSP-v4, Port=submission, M=Ea')dnl
dnl #
dnl # Be somewhat anal in what we allow
dnl define(`confPRIVACY_FLAGS',dnl
dnl `needmailhelo,needexpnhelo,needvrfyhelo,restrictqrun,restrictexpand,nobodyreturn,authwarnings')dnl
dnl #
dnl # Define connection throttling and window length
define(`confCONNECTION_RATE_THROTTLE', `15')dnl
define(`confCONNECTION_RATE_WINDOW_SIZE',`10m')dnl
dnl #
dnl # Features
dnl #
dnl # use /etc/mail/local-host-names
FEATURE(`use_cw_file')dnl
dnl #
dnl # The access db is the basis for most of sendmail's checking
FEATURE(`access_db', , `skip')dnl
dnl #
dnl # The greet_pause feature stops some automail bots - but check the
dnl # provided access db for details on excluding localhosts...
FEATURE(`greet_pause', `1000')dnl 1 seconds
dnl #
dnl # Delay_checks allows sender<->recipient checking
FEATURE(`delay_checks', `friend', `n')dnl
dnl #
dnl # If we get too many bad recipients, slow things down...
define(`confBAD_RCPT_THROTTLE',`3')dnl
dnl #
dnl # Stop connections that overflow our concurrent and time connection rates
FEATURE(`conncontrol', `nodelay', `terminate')dnl
FEATURE(`ratecontrol', `nodelay', `terminate')dnl
dnl #
dnl # If you're on a dialup link, you should enable this - so sendmail
dnl # will not bring up the link (it will queue mail for later)
dnl define(`confCON_EXPENSIVE',`True')dnl
dnl #
dnl # Dialup/LAN connection overrides
dnl #
include(`/etc/mail/m4/dialup.m4')dnl
include(`/etc/mail/m4/provider.m4')dnl
dnl #
dnl # Default Mailer setup
FEATURE(`smrsh',`/usr/lib/sm.bin/smrsh')dnl
FEATURE(`virtusertable', `hash /etc/mail/virtusers')dnl
VIRTUSER_DOMAIN_FILE(`/etc/mail/virtdomains')dnl
MAILER_DEFINITIONS
MAILER(`local')dnl
MAILER(`smtp')dnl
AFAIK вам нужно будет указать пользователя или псевдоним в своем виртуальном файле, а не в канале. как только вы это сделаете, укажите канал в файле псевдонима.
Например, в / etc / mail / virtusers
@ example.com pipeuser
А потом в / etc / aliases
pipeuser: "| / usr / bin / php5 -q /home/myuser/myscript.php"
Вы должны изменить набор правил 0 (или набор правил 2), чтобы решить эту проблему:
LOCAL_RULE_0
R$* < @ virtualdomain.com. > $* $#prog $: $1 @ virtualdomain.com
Агент доставки прог обсуждается на странице 727 "летучей мыши" (4-е издание).
Вышеупомянутое не работает с smrsh. Предполагается, что $ # prog настроен на программу, которая решает, какие действия предпринимать на основе своего аргумента.
Вы даже можете определить своего собственного агента доставки, который будет делать именно то, что вы хотите, вместо того, чтобы пытаться приспособить то, что доступно для вашего случая.