У меня проблема с функцией php mail()
на сервере localhost. Я не могу проверить приложение электронной почты на localhost, когда я пытаюсь отправить электронные письма с помощью функции php function 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, и если кто-нибудь знает решение, пожалуйста, помогите мне.
Вам необходимо настроить почтовый сервер на вашем компьютере для работы почты. Если вы находитесь в Windows (что я предполагаю, что вы используете WAMP), вы можете настроить почтовый сервер Pegasus .
Другие варианты включают использование класса оболочки, такого как SwiftMailer или PHPMailer, и использование их для подключения к другому SMTP-серверу, например, к вашей учетной записи GMail. Даже если вы отправляете почтовый сервер Pegasus на свой собственный маршрут localhost, я бы порекомендовал использовать один из двух классов, упомянутых выше. Они дают вам гораздо большую гибкость и безопаснее.
Подключение к вашему SMP-серверу вашего интернет-провайдера или GMail или тому, что является самым простым путем из этого.
Проведя 2 дня на этой проблеме с функцией php mail, я понял это и помог вам сделать то же самое. Это потратило достаточно времени, давайте начнем …
PHP имеет встроенную функцию php mail, которая может использоваться для отправки почты из сценария, но эта функция ограничена, поскольку она не может подключить вас к серверу протокола SMTP. Я предполагаю, что вы используете WAML / XAMPP, на самом деле не пробовали XAMPP, но вы могли бы понять следующее:
Сначала нам нужно найти способ подключения нашего веб-сервера (wamp) к внешнему SMTP. В этом случае мы будем использовать Gmail, но до этого нам нужно загрузить / установить инструмент, который будет захватывать нашу электронную почту из сценария php и перенаправлять ее на SMTP Gmail.
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 минимальными параметрами и посмотреть. Надеюсь это поможет. Проголосуйте, если это поможет, поэтому я могу потратить время на публикацию более интересных решений.
Это хорошо известная проблема с использованием mail()
в Windows, где обычно нет локальной службы SMTP. Как говорится в сообщении об ошибке, вам необходимо определить параметры SMTP в вашем php.ini
чтобы поговорить с почтовым сервером, через который вы можете отправлять исходящие сообщения с аутентификацией или без нее. См. Документы mail ().
Попробуйте настроить почтовый сервер для localhost. В противном случае он не будет работать в localhost.