как узнать, работают ли PHP и sendmail вместе? - PullRequest
6 голосов
/ 20 марта 2011

Когда я использую терминал для отправки электронной почты, все работает правильно.Я использую следующую команду:

echo "Subject: test" | /usr/lib/sendmail -v you@domain.com

Но когда я пытаюсь это сделать в PHP:

PHP ДОКУМЕНТАЦИЯ:

<?php bool mail ( string $to , string $subject , string $message [, string $additional_headers [, string $additional_parameters ]] ) ?>

МОЕ РЕАЛИЗАЦИЯ:

<?php mail("you@domain.com", "my topic", "my message contents", "From: me@domain.com"); ?>

, тогда это не работает.Это почему?Я предполагаю, что это связано с PHP-файлом php.ini?

Все, что я настроил:

  • открытый php.ini:

    nano /etc/php5/apache2/php.ini

  • раскомментировать sendmail_path и написать:

    sendmail_path = /usr/sbin/sendmail

  • раскомментировать sendmail_from и написать:

    sendmail_from = me@domain.com

  • перезапустите apache:

    /etc/init.d/apache2 restart

В чем может быть дело?Чтобы сделать это более ясным: я хочу, чтобы PHP мог отправлять электронную почту!

РЕДАКТИРОВАТЬ:

  • Функция PHP mail () возвращает FALSE.
  • для php.ini: изменение /usr/sbin/sendmail на /usr/lib/sendmail (или наоборот), кажется, не имеет никакого значения
  • для команды терминала: изменение /usr/sbin/sendmail на /usr/lib/sendmail (или наоборот), похоже, ничего не меняет
  • Я отправлял сообщения как на свой собственный домен, так и на gmail, оба без сообщений в папке спама.

Лог-файлы Sendmail:

root@machine:/var/log# cat mail.warn

root@machine:/var/log# cat mail.err

root@machine:/var/log# cat mail.log
Mar 20 10:17:09 machine sendmail[12249]: p2K9H2R9012249: from=root, size=0, class=0, nrcpts=1, relay=root@localhost
Mar 20 10:17:20 machine sendmail[12253]: p2K9HImw012253: from=root, size=0, class=0, nrcpts=0, relay=root@localhost
Mar 20 10:17:25 machine sendmail[12255]: p2K9HOAC012255: from=root, size=0, class=0, nrcpts=1, relay=root@localhost
Mar 20 10:20:00 machine sendmail[12277]: p2K9K09k012277: from=root, size=14, class=0, nrcpts=3, msgid=<201103200920.p2K9K09k012277@machine.domain.com>, relay=root@localhost
Mar 20 10:20:00 machine sm-mta[12279]: p2K9K0Ge012279: <-r@machine.domain.com>... User unknown
Mar 20 10:20:00 machine sendmail[12277]: p2K9K09k012277: to=-r, ctladdr=root (0/0), delay=00:00:00, xdelay=00:00:00, mailer=relay, pri=90014, relay=[127.0.0.1] [127.0.0.1], dsn=5.1.1, stat=User unknown
Mar 20 10:20:00 machine sm-mta[12279]: p2K9K0Ge012279: from=<root@machine.domain.com>, size=290, class=0, nrcpts=2, msgid=<201103200920.p2K9K09k012277@machine.domain.com>, proto=ESMTP, daemon=MTA-v4, relay=localhost [127.0.0.1]
Mar 20 10:20:00 machine sm-mta[12279]: STARTTLS=client, relay=gmail-smtp-in.l.google.com., version=TLSv1/SSLv3, verify=FAIL, cipher=RC4-SHA, bits=128/128
Mar 20 10:20:02 machine sm-mta[12279]: p2K9K0Ge012279: to=<you@domain.com>, ctladdr=<root@machine.domain.com> (0/0), delay=00:00:02, xdelay=00:00:02, mailer=esmtp, pri=60290, relay=gmail-smtp-in.l.google.com. [74.125.77.27], dsn=2.0.0, stat=Sent (OK 1300612802 w59si3196382eeh.92)
Mar 20 10:20:02 machine sm-mta[12279]: STARTTLS=client, relay=aspmx.l.google.com., version=TLSv1/SSLv3, verify=FAIL, cipher=RC4-SHA, bits=128/128
Mar 20 10:20:04 machine sm-mta[12279]: p2K9K0Ge012279: to=<you2@domain.com>, ctladdr=<root@machine.domain.com> (0/0), delay=00:00:04, xdelay=00:00:02, mailer=esmtp, pri=60290, relay=aspmx.l.google.com. [74.125.79.27], dsn=2.0.0, stat=Sent (OK 1300612804 p50si3196335eei.44)
Mar 20 10:20:04 machine sendmail[12277]: p2K9K09k012277: to=you2@domain.com,you@domain.com, ctladdr=root (0/0), delay=00:00:04, xdelay=00:00:04, mailer=relay, pri=90014, relay=[127.0.0.1] [127.0.0.1], dsn=2.0.0, stat=Sent (p2K9K0Ge012279 Message accepted for delivery)
Mar 20 10:20:04 machine sendmail[12277]: p2K9K09k012277: p2K9K09l012277: DSN: User unknown
Mar 20 10:20:04 machine sm-mta[12279]: p2K9K0Gg012279: from=<>, size=1921, class=0, nrcpts=1, msgid=<201103200920.p2K9K09l012277@machine.domain.com>, proto=ESMTP, daemon=MTA-v4, relay=localhost [127.0.0.1]
Mar 20 10:20:05 machine sm-mta[12279]: p2K9K0Gg012279: to=<root@machine.domain.com>, delay=00:00:01, xdelay=00:00:01, mailer=local, pri=31921, dsn=2.0.0, stat=Sent
Mar 20 10:20:05 machine sendmail[12277]: p2K9K09l012277: to=root, delay=00:00:01, xdelay=00:00:01, mailer=relay, pri=31038, relay=[127.0.0.1] [127.0.0.1], dsn=2.0.0, stat=Sent (p2K9K0Gg012279 Message accepted for delivery)
Mar 20 10:25:11 machine sendmail[12321]: p2K9PBC3012321: from=root, size=14, class=0, nrcpts=1, msgid=<201103200925.p2K9PBC3012321@machine.domain.com>, relay=root@localhost
Mar 20 10:25:11 machine sm-mta[12323]: p2K9PBLe012323: from=<root@machine.domain.com>, size=318, class=0, nrcpts=1, msgid=<201103200925.p2K9PBC3012321@machine.domain.com>, proto=ESMTP, daemon=MTA-v4, relay=localhost [127.0.0.1]
Mar 20 10:25:11 machine sm-mta[12323]: STARTTLS=client, relay=gmail-smtp-in.l.google.com., version=TLSv1/SSLv3, verify=FAIL, cipher=RC4-SHA, bits=128/128
Mar 20 10:25:12 machine sm-mta[12323]: p2K9PBLe012323: to=<you@domain.com>, ctladdr=<root@machine.domain.com> (0/0), delay=00:00:01, xdelay=00:00:01, mailer=esmtp, pri=30318, relay=gmail-smtp-in.l.google.com. [74.125.77.27], dsn=2.0.0, stat=Sent (OK 1300613112 u12si3204796eeh.99)
Mar 20 10:25:12 machine sendmail[12321]: p2K9PBC3012321: to=you@domain.com, ctladdr=root (0/0), delay=00:00:01, xdelay=00:00:01, mailer=relay, pri=30014, relay=[127.0.0.1] [127.0.0.1], dsn=2.0.0, stat=Sent (p2K9PBLe012323 Message accepted for delivery)
Mar 20 11:00:17 machine sendmail[12567]: p2KA0HX9012567: from=root, size=20, class=0, nrcpts=1, msgid=<201103201000.p2KA0HX9012567@machine.domain.com>, relay=root@localhost
Mar 20 11:00:17 machine sm-mta[12568]: p2KA0HNn012568: from=<root@machine.domain.com>, size=324, class=0, nrcpts=1, msgid=<201103201000.p2KA0HX9012567@machine.domain.com>, proto=ESMTP, daemon=MTA-v4, relay=localhost [127.0.0.1]
Mar 20 11:00:17 machine sm-mta[12568]: STARTTLS=client, relay=gmail-smtp-in.l.google.com., version=TLSv1/SSLv3, verify=FAIL, cipher=RC4-SHA, bits=128/128
Mar 20 11:00:18 machine sm-mta[12568]: p2KA0HNn012568: to=<you@domain.com>, ctladdr=<root@machine.domain.com> (0/0), delay=00:00:01, xdelay=00:00:01, mailer=esmtp, pri=30324, relay=gmail-smtp-in.l.google.com. [74.125.77.27], dsn=2.0.0, stat=Sent (OK 1300615218 w59si3268114eeh.65)
Mar 20 11:00:18 machine sendmail[12567]: p2KA0HX9012567: to=you@domain.com, ctladdr=root (0/0), delay=00:00:01, xdelay=00:00:01, mailer=relay, pri=30020, relay=[127.0.0.1] [127.0.0.1], dsn=2.0.0, stat=Sent (p2KA0HNn012568 Message accepted for delivery)
Mar 20 11:16:23 machine sendmail[12675]: p2KAGNg8012675: from=www-data, size=188, class=0, nrcpts=0, msgid=<201103201016.p2KAGNg8012675@machine.domain.com>, relay=www-data@localhost
root@machine:/var/log# 

EDIT2:

Я нашел решение!

Это был конфиг в php.ini,как я и предполагал.

В php.ini:

sendmail_path = /usr/sbin/sendmail **-t -i**

Теперь, давайте также попробуем понять, почему, я нашел -t на этом сайте а затем я нашел -i в самом файле php.ini.Что означают -t и -i ??

-t Извлечение получателей из заголовков сообщений.Они добавляются всем получателям, указанным в командной строке.В версиях Postfix до 2.1 эта опция требует, чтобы в командной строке не указывались адреса получателей.

-i При чтении сообщения из стандартного ввода не обрабатывайте строку только с a.символ в конце ввода.

source

Надеюсь, я смогу помочь тем из вас, кто столкнулся с подобными проблемами.

Ответы [ 2 ]

1 голос
/ 20 марта 2011

В чем может быть дело? Чтобы сделать это более ясным: я хочу, чтобы PHP мог писать по электронной почте!

Дело или, скорее, причина в том, что функция mail () и sendmail - это две разные пары ботинок. Они не связаны друг с другом как таковые.

Таким образом, только потому, что вы можете отправлять электронные письма с помощью программы sendmail, это не означает, что функция php mail () будет также отправлять электронные письма.

То, с чем вы сталкиваетесь, является проблемой конфигурации вашей установки php. PHP довольно хорош для отправки электронной почты по умолчанию, но PHP не может знать все настройки, поэтому в случае сбоя mail () вам нужно проверить, правильно ли настроен PHP для отправки электронной почты.

Хорошим началом, чтобы узнать больше о том, что настраивать, получить тонны заметок и уведомлений, а также связанную информацию, является руководство по PHP: mail () function .

Первая проверка работоспособности - как уже прокомментировали другие - это проверка возвращаемого значения функции mail (). Если это ложь, то PHP знает, что отправка почты не удалась.

Если это правда, и вы до сих пор не получили электронное письмо, то какой-то другой компонент не поможет в дальнейшей передаче электронной почты. Вам необходимо проверить всю цепочку транспорта и - просто для того, чтобы выделить ее жирным шрифтом, - в вашей общей конфигурации может быть несколько ошибок, которые не позволяют отправлять электронные письма через PHP, даже если вы можете отправлять некоторые сообщения из оболочки.

Если это слишком сложно для вас, я предлагаю вам связаться с системным администратором, который может помочь вам в решении вашей проблемы.

Кстати, вы можете написать свою собственную оболочку и отправлять электронные письма с помощью команды оболочки: shell_exec , будьте осторожны.

0 голосов
/ 20 марта 2011

Вы можете начать с проверки файла журнала почты. Его местоположение зависит от вашей системы, но его можно найти в /var/log/mail.log при стандартной установке Ubuntu. Вы должны попробовать запустить свой PHP-код, а затем проверить, не зарегистрировано ли что-нибудь.

...