Когда я использую терминал для отправки электронной почты, все работает правильно. Я использую следующую команду:
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.ini PHPs?
Все, что я настроил:
открыть php.ini:
nano /etc/php5/apache2/php.ini
раскомментировать sendmail_path и написать:
sendmail_path = /usr/sbin/sendmail
uncomment sendmail_from и написать:
sendmail_from = me@domain.com
перезапустить apache:
/etc/init.d/apache2 restart
Что может быть? Чтобы сделать это более ясным: я хочу, чтобы PHP мог писать по электронной почте!
РЕДАКТИРОВАТЬ:
/usr/sbin/sendmail
в /usr/lib/sendmail
(или наоборот) не имеет никакого значения /usr/sbin/sendmail
в /usr/lib/sendmail
(или наоборот) не похоже ни на какие различия: Логфайлы 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
При чтении сообщения со стандартного ввода не обрабатывайте строку только с помощью. символ как конец ввода.
источник
Надеюсь, я смогу помочь тем из вас, которые столкнулись с подобными проблемами.
Что может быть? Чтобы сделать это более ясным: я хочу, чтобы PHP мог писать по электронной почте!
Случай или лучше причина в вашем случае заключается в том, что функция mail () и sendmail – это две разные пары обуви. Они не связаны друг с другом per se.
Поэтому только потому, что вы можете отправлять электронные письма с помощью программы sendmail, это не означает, что функция php mail () также отправит электронные письма.
Перед вами стоит проблема конфигурации вашей установки php. PHP очень хорош в отправке писем по умолчанию, но PHP не может знать все настройки, поэтому в случае неудачи mail () вам нужно проверить, есть ли у вас правильная настройка PHP для отправки электронной почты.
Хорошее начало узнать больше о том, что нужно настроить, получить тонны заметок и уведомлений, а также соответствующую информацию – это руководство PHP: функция mail () .
Первая проверка здравомыслия, как уже прокомментировали другие, – это проверить возвращаемое значение функции mail (). Если это неверно, тогда PHP знает, что отправка почты не удалась.
Если это правда, и вы по-прежнему не получаете адрес электронной почты (out), то другой компонент не помогает при транспортировке электронной почты. Вам нужно проверить всю цепочку транспорта и – просто сделать ее полужирным – вы можете иметь несколько ошибок в своей общей конфигурации, что мешает вам отправлять электронные письма через PHP, даже если вы можете отправить их из оболочки.
Если это слишком сложно для вас, я предлагаю вам связаться с системным администратором, который поможет вам в решении вашей проблемы.
BTW вы можете написать свою собственную оболочку и отправить электронные письма с помощью команды оболочки: shell_exec , позаботьтесь.
Вы можете начать с проверки файла журнала почты. Это зависит от вашей системы, но ее можно найти в /var/log/mail.log
на стандартной установке Ubuntu. Вы должны попробовать запустить свой PHP-код, а затем проверить, не зарегистрировано ли что-либо.