функция php mail () на локальном хосте - PullRequest
14 голосов
/ 17 марта 2011

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

Я получаю эту ошибку Warning: mail() [function.mail]: Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in F:\wamp\www\product\ajax.php on line 64

Я использую WAMP-сервер, и если кто-то знает решение, пожалуйста, помогите мне.

Ответы [ 4 ]

14 голосов
/ 17 марта 2011

Вам необходимо настроить почтовый сервер на вашем компьютере для работы функции почты. Если вы работаете в Windows (я предполагаю, что вы используете WAMP), вы можете настроить почтовый сервер Pegasus .

Другие варианты включают использование класса-оболочки, такого как SwiftMailer или PHPMailer , и их использование для подключения к другому SMTP-серверу, такому как ваша учетная запись GMail. Даже если вы используете почтовый сервер Pegasus по своему собственному локальному маршруту, я все равно рекомендую использовать один из двух упомянутых выше классов. Они дают вам гораздо больше гибкости и безопаснее.

Подключение к SMTP-серверу вашего интернет-провайдера или к GMail или какому-либо простому маршруту из этого.

7 голосов
/ 25 октября 2015

Потратив 2 дня на эту проблему с php mail, я понял это и помог бы вам сделать то же самое. Это потратило достаточно времени, Давайте начнем ...

PHP имеет встроенную функцию php mail, которую можно использовать для отправки почты из скрипта, но эта функция каким-то образом ограничена, поскольку не может подключить вас к серверу простого протокола передачи почты (SMTP). Я предполагаю, что вы используете WAML / XAMPP, на самом деле не пробовали XAMPP, но вы можете понять это следующим образом:

Сначала нам нужно найти способ подключения нашего веб-сервера (wamp) к внешнему SMTP. В этом случае мы будем использовать Gmail, но перед этим нам нужно загрузить / установить инструмент, который будет извлекать нашу электронную почту из сценария php и отправлять ее в SMTP Gmail.

  1. Сначала перейдите на http://glob.com.au/sendmail/ и нажмите на загрузку sendmail.zip для загрузки.
  2. После загрузки извлеките в C:\wamp\ извлеките его как папку, что означает, что его содержимое должно находиться в папке с именем sendmail и может находиться в C:\wamp\sendmail.
  3. Теперь в папке отправки почты щелкните правой кнопкой мыши на sendmail.ini и откройте как администратор, так как мы собираемся изменить его содержимое.
  4. изменить следующие строки

    [sendmail]
    smtp_server=smtp.gmail.com
    smtp_port= 465
    smtp_ssl=ssl
    default_domain=localhost
    error_logfile=error.log
    debug_logfile=debug.log
    auth_username= enter your gmail account here        
    auth_password= enter the password for that account here
    ;pop3_server=
    ;pop3_username=
    ;pop3_password=
    ;force_sender=
    ;force_recipient=
    hostname= localhost 
    

    Пожалуйста, будьте осторожны и делайте, как вы видите выше. Я удалил большую часть нежелательного содержимого из моего sendmail.ini файла, чтобы его было легче читать.

  5. Сохранить файл

  6. Перейдите в папку wamp и перейдите к bin\apache\apache[version here]\bin\php.ini и измените php-файл от имени администратора следующим образом:

    Если вы используете блокнот, вы можете использовать поиск на вкладке редактирования или ctrl + F и набрать "mail function" для быстрой навигации в почтовую часть файла php.ini.

    [mail function]
    ;For Win32 only.
    ;http://php.net/smtp
    ;SMTP = localhost
    ;http://php.net/smtp-port
    ;smtp_port = 25
    
    ;For Win32 only.
    ;http://php.net/sendmail-from
    ;sendmail_from = 
    
    ;For Unix only.  You may supply arguments as well (default: "sendmail -t -i").
    ;http://php.net/sendmail-path
    sendmail_path = "C:\wamp\sendmail\sendmail.exe -t -i" ----> this is the changed part. 
    

    Примечание: только sendmail_path вы должны изменить на вышеуказанное. Оставьте другие настройки такими, какими вы их видите. Ваш путь может отличаться в зависимости от того, куда вы распаковали папку sendmail.

  7. Сохранить этот php.ini файл

  8. Вернитесь к C:\wamp\bin и выберите php\php[version here]\php.ini и отредактируйте путь sendmail, как вы делали выше, и сохраните файл как администратор / или перед открытием откройте как администратор, щелкнув правой кнопкой мыши

  9. Запустите wampserver от имени администратора и, когда он станет зеленым, включите следующее:

    Щелкните левой кнопкой мыши по зеленому значку и перейдите к php -> php extensions -> php_sockets (нажмите, чтобы включить черный флажок)

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

    Если значок становится зеленым, то пора включить apache ssl_module, перейдя в apache icom, когда вы нажмете на зеленый значок сервера вампиров. Вы можете найти это в модулях Apache.

    Когда вы закончите с тремя шагами выше, выйдите и снова запустите wampserver как администратор, чтобы внести изменения.

  10. Вернитесь в извлеченную папку sendmail и щелкните правой кнопкой мыши на sendmail.exe
    Перейдите в его свойства -> Совместимость -> Изменить настройки для всех пользователей -> Режим совместимости [смените на Windows XP (пакет обновления 3)] -> Запустите эту программу от имени администратора [отметьте эту опцию].

    Сохранить и применить.
    Мы должны были сделать так, чтобы каждый раз, когда мы вызывали приложение sendmail, оно запускалось от имени администратора.

  11. Теперь нам нужно настроить нашу учетную запись gmail для работы с этим приложением sendmail. Войдите в учетную запись Gmail и в правом верхнем углу нажмите на шестерню, чтобы выбрать настройки. В настройках перейдите на вкладку «Пересылка» и «POP / IMAP» и включите IMAP. Сохранить изменения

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

    Нажмите на вкладку «Вход и безопасность» и прокрутите вниз до нижней части страницы. Вы найдете Разрешить менее безопасные приложения: и включите его. В основном это было бы выключено.

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

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

Это хорошо известная проблема с использованием mail() в Windows, где у вас обычно нет локальной службы SMTP. Как говорится в вашем сообщении об ошибке, вам нужно определить настройки SMTP в php.ini для связи с почтовым сервером, через который вам разрешено отправлять исходящие сообщения с аутентификацией или без нее. См. Mail () документы.

0 голосов
/ 20 октября 2014

Попробуйте настроить почтовый сервер для localhost.В противном случае он не будет работать в localhost.

...