Функция php mail() на localhost

У меня проблема с функцией php mail() на сервере localhost. Я не могу проверить приложение электронной почты на 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, и если кто-нибудь знает решение, пожалуйста, помогите мне.

Ответ 1

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

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

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

Ответ 2

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

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

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

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

    [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, чтобы сделать чтение немного проще.

  • Сохраните файл

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

    Если вы используете блокнот, вы можете использовать поиск на вкладке редактирования или ctrl + F и ввести "почтовую функцию", чтобы быстро перейти к функции почты в файле 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.

  • Сохраните этот php.ini файл

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

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

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

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

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

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

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

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

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

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

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

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

Ответ 3

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

Ответ 4

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