Я знаю, что это где-то в другом месте на сайте, но почему-то ответы, которые я нашел здесь, до сих пор не помогли, я все еще не могу заставить его работать после того, как пробовали разные вещи весь день. Моя цель состояла в том, чтобы код подтверждения был отправлен в электронное письмо, которое вводит пользователь. Я знаю только небольшое количество PHP и следил за учебником для системы регистрации / регистрации, но я уверен, что php работает нормально, и проблема заключается в моих sendmail.ini и php.ini. Вот мой sendmail.ini
; configuration for fake sendmail ; if this file doesn't exist, sendmail.exe will look for the settings in ; the registry, under HKLM\Software\Sendmail [sendmail] ; you must change mail.mydomain.com to your smtp server, ; or to IIS's "pickup" directory. (generally C:\Inetpub\mailroot\Pickup) ; emails delivered via IIS's pickup directory cause sendmail to ; run quicker, but you won't get error messages back to the calling ; application. smtp_server=smtp.gmail.com ; smtp port (normally 25) smtp_port=587 ; 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 logging error_logfile=error.log ; create debug log as debug.log (defaults to same directory as sendmail.exe) ; uncomment to enable debugging debug_logfile=debug.log ; if your smtp server requires authentication, modify the following two lines auth_username= myemail@gmail.com auth_password= mygmailpass ; 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 content force_sender=myemail@gmail.com ; 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= ; sendmail will use your hostname and your default_domain in the ehlo/helo ; smtp greeting. you can manually set the ehlo/helo name if required hostname=
И мои части, которые я редактировал в моем php.ini
extension=php_openssl.dll [mail function] ; XAMPP: Comment out this if you want to work with an SMTP Server like Mercury SMTP =smtp.gmail.com smtp_port =587 ; For Win32 only. ; http://php.net/sendmail-from sendmail_from = myemail@gmail.com sendmail_path = "\"C:\xampp\sendmail\sendmail.exe\" -t" ;sendmail_path="C:\xampp\mailtodisk\mailtodisk.exe" ; 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 =
и мой PHP-код в случае необходимости
<?php session_start(); include('configdb.php'); if(isset($_POST['submit'])) { //whether the username is blank if($_POST['username'] == '') { $_SESSION['error']['username'] = "User Name is required."; } //whether the email is blank if($_POST['email'] == '') { $_SESSION['error']['email'] = "E-mail is required."; } else { //whether the email format is correct if(preg_match("/^([a-zA-Z0-9])+([a-zA-Z0-9._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9._-]+)+$/", $_POST['email'])) { //if it has the correct format whether the email has already exist $email= $_POST['email']; $sql1 = "SELECT * FROM user WHERE email = '$email'"; $result1 = mysqli_query($mysqli,$sql1) or die(mysqli_error()); if (mysqli_num_rows($result1) > 0) { $_SESSION['error']['email'] = "This Email is already used."; } } else { //this error will set if the email format is not correct $_SESSION['error']['email'] = "Your email is not valid."; } } //whether the password is blank if($_POST['password'] == '') { $_SESSION['error']['password'] = "Password is required."; } //if the error exist, we will go to registration form if(isset($_SESSION['error'])) { header("Location: index.php"); exit; } else { $username = $_POST['username']; $email = $_POST['email']; $password = $_POST['password']; $com_code = md5(uniqid(rand())); $sql2 = "INSERT INTO user (username, email, password, com_code) VALUES ('$username', '$email', '$password', '$com_code')"; $result2 = mysqli_query($mysqli,$sql2) or die(mysqli_error()); if($result2) { $to = $email; $subject = "Confirmation for $username"; $header = "Confirmation from"; $message = "Please click the link below to verify and activate your account. rn"; $message .= "http://www.yourname.com/confirm.php?passkey=$com_code"; $sentmail = mail($to,$subject,$message,$header); if($sentmail) { echo "Your confirmation link has been sent to your e-mail address."; } else { echo "Error while sending confirmation link to your e-mail address"; } } } } ?>
в<?php session_start(); include('configdb.php'); if(isset($_POST['submit'])) { //whether the username is blank if($_POST['username'] == '') { $_SESSION['error']['username'] = "User Name is required."; } //whether the email is blank if($_POST['email'] == '') { $_SESSION['error']['email'] = "E-mail is required."; } else { //whether the email format is correct if(preg_match("/^([a-zA-Z0-9])+([a-zA-Z0-9._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9._-]+)+$/", $_POST['email'])) { //if it has the correct format whether the email has already exist $email= $_POST['email']; $sql1 = "SELECT * FROM user WHERE email = '$email'"; $result1 = mysqli_query($mysqli,$sql1) or die(mysqli_error()); if (mysqli_num_rows($result1) > 0) { $_SESSION['error']['email'] = "This Email is already used."; } } else { //this error will set if the email format is not correct $_SESSION['error']['email'] = "Your email is not valid."; } } //whether the password is blank if($_POST['password'] == '') { $_SESSION['error']['password'] = "Password is required."; } //if the error exist, we will go to registration form if(isset($_SESSION['error'])) { header("Location: index.php"); exit; } else { $username = $_POST['username']; $email = $_POST['email']; $password = $_POST['password']; $com_code = md5(uniqid(rand())); $sql2 = "INSERT INTO user (username, email, password, com_code) VALUES ('$username', '$email', '$password', '$com_code')"; $result2 = mysqli_query($mysqli,$sql2) or die(mysqli_error()); if($result2) { $to = $email; $subject = "Confirmation for $username"; $header = "Confirmation from"; $message = "Please click the link below to verify and activate your account. rn"; $message .= "http://www.yourname.com/confirm.php?passkey=$com_code"; $sentmail = mail($to,$subject,$message,$header); if($sentmail) { echo "Your confirmation link has been sent to your e-mail address."; } else { echo "Error while sending confirmation link to your e-mail address"; } } } } ?>
Как я уже сказал, я работал над этим некоторое время, и я не могу понять это, я полагаю, что это действительно просто, но поскольку я все еще участвую, я этого не видел. Спасибо за помощь!
если вы отправляете почту через локальный сервер, вам необходимо настроить
c:\xampp\sendmail\sendmail.ini
(отправка по Gmail) и C:\xampp\php\php.ini
.
в php.ini
find extension=php_openssl.dll
и удалите точку с запятой с начала этой строки. Таким образом, это позволяет отправлять почту с localhost.
а затем найти mail function
и изменить настройки ниже
SMTP=smtp.gmail.com smtp_port=587 sendmail_from = my-gmail-id@gmail.com sendmail_path = "\"C:\xampp\sendmail\sendmail.exe\" -t"
в sendmail.ini (путь – C:\xampp\sendmail\sendmail.ini
)
Изменить это
[sendmail] smtp_server=smtp.gmail.com smtp_port=587 error_logfile=error.log debug_logfile=debug.log auth_username=GMail ID@gmail.com//your gmail ID auth_password=GMail PASSWORD // Your gmail password force_sender=GMail ID@gmail.com //your gmail ID
Измените GMail ID@gmail.com , GMail PASSWORD , GMail ID@gmail.com в приведенном выше коде.
в заключение
прокомментируйте следующую строку, если в файле php.ini есть еще один sendmail_path: sendmail_path="C:\xampp\mailtodisk\mailtodisk.exe"
.
Вы можете просто настроить C: \ xampp \ php \ php.ini и c: \ xampp \ sendmail \ sendmail.ini для отправки почты в gmail.
В файле php.ini найдите функцию [mail function] и измените следующую
SMTP=smtp.gmail.com smtp_port=587 sendmail_from = your-gmail-id@gmail.com sendmail_path = "\"C:\xampp\sendmail\sendmail.exe\" -t"