Отправка писем с помощью PHP, LAMPP и PostFix

9

Я пытался целых два дня, и я просто не могу заставить самую простую вещь работать.

Проблема: отправка писем из PHP на мой адрес электронной почты не работает

Я работал с Windows и Sendmail (Sendmail был в пакете XAMPP) раньше, и все было в порядке. XAMPP-пакет (1.7.7) для Linux не имеет встроенного Sendmail. Поэтому, немного погуглив, я обнаружил, что Postfix лучше вписывается в LAMPP-среду.


Что я уже пробовал:

Я установил Postfix и хотел настроить его так, чтобы он использовал smtp-сервер моего частного провайдера электронной почты (как это было в Windows). Итак, я записал свой php.ini так:

[mail function]
; For Win32 only.
;SMTP = localhost
;smtp_port = 25

; For Win32 only.
;sendmail_from = me@example.com

sendmail_path = /etc/postfix
mail.add_x_header = On

Обратите внимание, что я закомментировал материал "только для Win32". /Etc/postfix/main.cf выглядит следующим образом :

smtp_sasl_auth_enable = yes
smtp_sasl_security_options = noanonymous
smtp_sasl_password_maps = hash:/etc/postfix/sasl_password
myhostname = ubuntu
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
sender_canonical_maps = hash:/etc/postfix/sender_canonical
mydestination = ubuntu, localhost.localdomain, localhost
relayhost = mail.gmx.net
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = loopback-only

/ etc / aliases не изменяется:

# Required aliases
postmaster: root
MAILER-DAEMON:  postmaster

# Common aliases
abuse:      postmaster
spam:       postmaster

/ etc / postfix / sasl_password :

my.providers.smtp my_login:my_password

/ И т.д. / postfic / sender_canonical:

postmaster my.email@ddress.com

Что просходит:

Поэтому, когда я делаю

> sudo /etc/init.d/postfix start

кажется, все работает нормально, и /var/log/mail.log говорит: «Ubuntu postfix / master [9720]: демон запущен - версия 2.8.5, конфигурация / etc / postfix»

Но когда я запускаю свой PHP-скрипт (который отлично работал с Windows и Sendmail), он просто запускается и ничего не происходит, даже не регистрируется ошибка.


Чего я на самом деле хочу достичь:

Я работаю локально на сайте электронной коммерции. Он отлично работает на выделенном веб-сервере, но я также хочу, чтобы он работал локально по понятным причинам. В некоторых случаях он отправляет электронные письма, и я просто хочу иметь возможность получать их с помощью Thunderbird или любым другим способом. Используете ли здесь Postfix overkill? Мне не нужно получать электронные письма - я просто хочу, чтобы отправленные письма были как-то видны. Похоже, я не смог найти полезных пошаговых руководств по этой проблеме (ни в отношении Senmail, ни в Postfix - но, если честно, я очень новичок в Linux).

Quasdunk
источник

Ответы:

13

В вашем php.ini это:

sendmail_path = /etc/postfix

Должен быть путь к бинарному файлу sendmail (или совместимому).
Вы установили его в каталог конфигурации postfix, что неправильно.

По историческим причинам обычно /usr/bin/sendmailподдерживается как ссылка на совместимость.
sendmailбыл примерно первым (я думаю), и почти все предполагает, что это в установленном MTA. Поэтому, когда это не так, замена создает символическую ссылку, чтобы ничего не сломалось.

цезий
источник
Большое спасибо! Хотя я не совсем понимаю, почему и каким образом Sendmail и Postfix работают вместе - это работает сейчас! Не могу вспомнить, где я читал о настройке постфикса, но в моем случае это правильная настройка:sendmail_path = "/usr/sbin/sendmail -t -i"
Quasdunk
Добавили немного больше информации - в основном они не работают вместе как таковые, у вас нет sendmail, но postfix притворяется, потому что так много всего ожидает, что он там будет :) Вы могли бы также установить sendmail_path так, чтобы он указывал на постфиксный бинарный файл
Цезий
1
Я помню! У sendmail была ошибка после ошибки за ошибкой после ошибки в течение многих лет подряд. В какой-то момент вы можете включить в свой ~ / .forward команду только для пользователя root, отправить себе письмо и делать что угодно в системе Unix / Linux. Был массовый Исход, и новые почтовые серверы включали в себя программу, похожую на sendmail, разработанную так, чтобы вести себя как sendmail, так что все другие программы, построенные на основе sendmail, по-прежнему работали без дополнительных усилий.
Большое спасибо за дополнительную информацию! Теперь все это имеет больше смысла;) Я бы дал вам еще +1, если бы мог, но я надеюсь, что кто-то еще, кто считает это столь же полезным, сделает это для меня :-D
Quasdunk
1

Для отправки почты с локального хоста (WAMP, XAMP или LAMP) вы можете использовать пакет PHPMailer

Это будет та же инструкция, что и в файле readme.

WAMP (окна):

Сначала вам нужно отредактировать "php.ini". Чтобы найти этот файл, отобразите phpinfo, используя следующий код с сервера WAMP. Создайте один файл php [setting.php] внутри C: / wamp / www / и добавьте следующее содержимое в этот файл.

<?php
     echo phpinfo();
?>

Введите localhost / setting.php в браузере. Там ищите «Загруженный файл конфигурации» Это будет путь к вашему php.ini .

В файле php.ini удалите; (точку с запятой), заданную для `extension = php_openssl.dll. Теперь настройка сервера завершена ...

  • После загрузки папки PHPMailer с github,
  • Извлечь-> Скопировать полную папку в папку вашего проекта, например, C: / wamp / www /
  • Найдите файл index.php.
  • Измените параметр как вам нужно.
  • Затем в браузере введите localhost / PHPMailer / index.php .
  • Тогда он покажет успешное сообщение, если письмо отправлено, иначе он выдаст сообщение об ошибке.

ЛАМПА (Linux):

  • В случае Linux нет необходимости редактировать файл php.ini, как я объяснил в первом пункте в разделе WAMP.

  • Еще одно изменение - проект или корневая папка документа отличаются.

  • В Linux корневой папкой по умолчанию для документа будет / var / www
  • Вы можете легко изменить корневую папку документа. Для этого посетите https://stackoverflow.com/a/17612396/1925943
  • Скопируйте PhpMailer в корневую папку этого документа и отредактируйте файл index.php, как вам нужно.
  • Затем введите localhost / PhpMailer / index.php в браузере.
шашидхара
источник