Я новичок в PHP. Я использую XAMPP на ПК с Windows 7. Я пытаюсь создать контактную форму электронной почты с помощью функции PHP mail (). Я не уверен, как конфигурация моих файлов sendmail.ini и php.ini влияет на мой код. Влияет ли конфигурация файлов только на то, как функция почты будет работать на моем локальном хосте? или это влияет на то, как будет работать код, когда я загружаю контент на свой веб-сервер?
Из моего php.ini:
[mail function]
; For Win32 only.
SMTP = smtp.gmail.com
smtp_port = 995
; For Win32 only.
sendmail_from = [email protected]
; For Unix only. You may supply arguments as well (default: "sendmail -t -i").
sendmail_path = "\"\xampp\sendmail\sendmail.exe\" -t"
; Force the addition of the specified parameters to be passed as extra parameters
; to the sendmail binary. These parameters will always replace the value of
; the 5th parameter to mail(), even in safe mode.
;mail.force_extra_parameters =
; Add X-PHP-Originating-Script: that will include uid of the script followed by the
filename
;mail.add_x_header = Off
; Log all mail() calls including the full path of the script, line #, to address and headers
;mail.log = "\xampp\php\logs\php_mail.log"
Из моего sendmail.ini:
smtp_server=smtp.gmail.com
; smtp port (normally 25)
smtp_port=995
; SMTPS (SSL) support
; auto = use SSL for port 465, otherwise try to use TLS
; ssl = alway use SSL
; tls = always use TLS
; none = never try to use SSL;smtp_ssl=auto
; the default domain for this server will be read from the registry
; this will be appended to email addresses when one isn't provided
; if you want to override the value in the registry, uncomment and modify;default_domain=mydomain.com; log smtp errors to error.log (defaults to same directory as sendmail.exe)
; uncomment to enable loggingerror_logfile=error.log; create debug log as debug.log (defaults to same directory as sendmail.exe)
; uncomment to enable debuggingdebug_logfile=debug.log
; if your smtp server requires authentication, modify the following two lines
[email protected]
auth_password=mypassword
; if your smtp server uses pop3 before smtp authentication, modify the
; following three lines. do not enable unless it is required.
;pop3_server=
;pop3_username=
;pop3_password=
; force the sender to always be the following email address
; this will only affect the "MAIL FROM" command, it won't modify
; the "From: " header of the message [email protected]
; force the sender to always be the following email address
; this will only affect the "RCTP TO" command, it won't modify
; the "To: " header of the message content;force_recipient=
Мой код выглядит так:
$name = $_POST['name1'];
$email = $_POST['email'];
$message = $_POST['body'];
$body = $message . '\n My email is ' . $email;$header1 = "From: $email \n";
mail("[email protected]", $_POST['subject'], $body, $header1);
header('location:Contact.php');
В любом случае я получаю две ошибки: одна из них — «истекло время ожидания соединения», а другая — что «соединение закрыто изящно». Я погуглил «соединение закрыто изящно» и обнаружил, что мне нужно запустить файл sendmail.exe от имени администратора, и, поскольку я использую gmail, мне пришлось устанавливать пароли для конкретных приложений.
В сообщении указывалось, что мне нужно запустить сервер (или IDE) в качестве администратора. Любой, кто знаком с XAMPP, кто знает, что / где находится сервер / IDE, пожалуйста, ответьте.
Убедиться в том, что php и sendmail запущены от имени администратора, кажется хорошей идеей, но это не решило мою проблему.
Решение в sendmail.ini
smtp_server = smtp.yourisp.com
; smtp port (normally 25)
smtp_port=25
; SMTPS (SSL) support
; auto = use SSL for port 465, otherwise try to use TLS
; ssl = alway use SSL
; tls = always use TLS
; none = never try to use SSL
smtp_ssl=none
не использовать smtp_ssl знак равно авто это было причиной моей ошибки, просто установите его в ssl tls или нет в соответствии со спецификацией вашего сервера
Попробуйте это, и я вернусь, когда у меня будет больше времени, чтобы обновить это:
1) Никогда не устанавливайте XAMPP в папку «Программы» в Windows. Это вызовет проблемы с привилегиями. Если у вас есть, то переустановите его в другом месте.
2) Все параметры в вашем sendmail.ini должны быть настроены в соответствии с настройками вашего Apache (Xampp). Предоставленная вами часть php.ini — это не полный файл или часть с этими настройками. Например, я не думаю, что ваш SMTP-порт действительно 995 (я могу ошибаться).
3) Посмотрите на этот пост: Как настроить XAMPP для отправки почты с локального хоста?
4) SMTP должен работать сейчас. Вы используете другой почтовый сервер (в данном случае Gmail) для отправки вашей почты. На самом деле вы можете использовать свой компьютер в качестве сервера, но это совершенно не проблема.