How to configure XAMPP to send Mail from Localhost in PHP ?

145

How to Configure XAMPP to Send Mail from Localhost in PHP
Hello friends, today in this blog you’ll learn How to configure XAMPP to Send Mail from Localhost in PHP. If you don’t know, XAMPP is an abbreviation for cross-platform, Apache, MySQL, PHP, and Perl. Using XAMPP we can work on our local server and test our local copies or projects of websites using PHP code and MySQL databases.

As a part of the experiment, developers need to send emails and we all know that sending mail from localhost using PHP can be much more painful if we don’t know how to properly configure XAMPP for it.

Before starting this blog, if you want to send an email in node.js applications, then you can see this blog How to Send Email in Node.js using Nodemailer & Gmail.

To send mail from localhost using XAMPP, we’ve to configure XAMPP after installing it. To configure the XAMPP server to send mail from the local host, we have to make some changes in two files one is PHP and another one is Sendmail.

First, go to the XAMPP installation directory and open the XAMPP folder and follow the below steps same: I’ve installed XAMPP in the C directory.

1. Go to the (C:xampp\php) and open the PHP configuration setting file then find the [mail function] by scrolling down or simply press ctrl+f to search it directly then find the following lines and pass these values. Remember, there may be a semicolon ; at the start of each line, simply remove the semicolon from each line which is given below.

[mail function]
For Win32 only.
http://php.net/smtp
SMTP=smtp.gmail.com
http://php.net/smtp-port
smtp_port=587
sendmail_from = your_email_address_here
sendmail_path = "\"C:\xampp\sendmail\sendmail.exe\" -t"

That’s all for this file, press ctrl+s to save this file and then close it.

2. Now, go the (C:\xampp\sendmail) and open the sendmail configuration setting file then find sendmail by scrolling down or press ctrl+f to search it directly then find the following lines and pass these values. Remember, there may be a semicolon ; at the start of each line, simply remove the semicolon from each line which is given below.

smtp_server=smtp.gmail.com
smtp_port=587
error_logfile=error.log
debug_logfile=debug.log
auth_username=your_email_address_here
auth_password=your_password_here
force_sender=your_email_address_here (it's optional)

That’s all for this file, press ctrl+s to save this file and then close it. After all changes in the two files, don’t forget to restart your apache server.

Now, you’re done with the required changes in these files. To check the changes you’ve made are correct or not. First, create a PHP file with the .php extension and paste the following codes into your PHP file. After pasting the codes, put your details into the given variables – In the $receiver variable put the receiver email address, in the $subject variable put the email subject and do respectively.

<?php
$receiver = "receiver email address here";
$subject = "Email Test via PHP using Localhost";
$body = "Hi, there...This is a test email send from Localhost.";
$sender = "From:sender email address here";

if(mail($receiver, $subject, $body, $sender)){
    echo "Email sent successfully to $receiver";
}else{
    echo "Sorry, failed while sending mail!";
}
?>

After completing these steps, just open this PHP file on your browser. If your mail is sent successfully then there is appears a success message “Email sent successfully to …..” and in the case your mail not sent then there is appears “Sorry, failed while sending mail!”.

If mail is sent then check whether the receiver has got your email or not. If yes, then great you did all changes perfectly. If not, check all the changes that you have done earlier are correct or not.

Note: Google removed the “Less secure apps” feature on May 30, 2022. So you need to do some extra steps and make changes in the files to send mail from localhost using Gmail.

Instead of using your Google account password as auth_password in sendmail configuration file, you need to use an App password which is 16 characters long.

To create an app password, go to manage your google account > Click Security > Under “Signing in to Google,” select App passwords > Select App & Device, and then you’ll get a 16-character code and this is your password. For more details about creating App Passwords, read the Official Google Article.

Previous articleAnimated Sidebar Menu using only HTML & CSS | Side Navigation Menu
Next articleLogin & Signup Form with Email Verification using PHP and MySQL

145 COMMENTS

  1. i did solve the error u just need to use phpmailer instead of ()mail

    u need to install php mailer in your vs code
    first open your terminal in vs code and paste this composer require phpmailer/phpmailer
    then it will be success.
    second modify the controllerUserData.php “if user signup button” change the old to this

    // Include PHPMailer
    use PHPMailer\PHPMailer\PHPMailer;
    use PHPMailer\PHPMailer\Exception;

    require ‘C:\xampp\htdocs\Login\vendor\autoload.php’; // If using Composer
    // require ‘path/to/PHPMailer/src/Exception.php’;
    // require ‘path/to/PHPMailer/src/PHPMailer.php’;
    // require ‘path/to/PHPMailer/src/SMTP.php’; // If not using Composer

    //if user signup button
    if(isset($_POST[‘signup’])){
    $name = mysqli_real_escape_string($con, $_POST[‘name’]);
    $email = mysqli_real_escape_string($con, $_POST[’email’]);
    $password = mysqli_real_escape_string($con, $_POST[‘password’]);
    $cpassword = mysqli_real_escape_string($con, $_POST[‘cpassword’]);

    if($password !== $cpassword){
    $errors[‘password’] = “Confirm password not matched!”;
    }

    $email_check = “SELECT * FROM usertable WHERE email = ‘$email'”;
    $res = mysqli_query($con, $email_check);

    if(mysqli_num_rows($res) > 0){
    $errors[’email’] = “Email that you have entered is already exist!”;
    }

    if(count($errors) === 0){
    $encpass = password_hash($password, PASSWORD_BCRYPT);
    $code = rand(999999, 111111);
    $status = “notverified”;

    $insert_data = “INSERT INTO usertable (name, email, password, code, status)
    values(‘$name’, ‘$email’, ‘$encpass’, ‘$code’, ‘$status’)”;

    $data_check = mysqli_query($con, $insert_data);

    if($data_check){
    $mail = new PHPMailer(true);

    try {
    //Server settings
    $mail->isSMTP();
    $mail->Host = ‘smtp.gmail.com’; // Set the SMTP server to send through
    $mail->SMTPAuth = true;
    $mail->Username = ‘your_email_address’; // SMTP username
    $mail->Password = ‘your app password’; // SMTP password
    $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; // Enable TLS encryption
    $mail->Port = 587; // TCP port to connect to

    //Recipients
    $mail->setFrom(‘your_email_address’, ‘Mailer’);
    $mail->addAddress($email); // Add a recipient

    // Content
    $mail->isHTML(true);
    $mail->Subject = ‘Email Verification Code’;
    $mail->Body = “Your verification code is $code”;

    $mail->send();

    $info = “We’ve sent a verification code to your email – $email”;
    $_SESSION[‘info’] = $info;
    $_SESSION[’email’] = $email;
    $_SESSION[‘password’] = $password;
    header(‘location: user-otp.php’);
    exit();
    } catch (Exception $e) {
    $errors[‘otp-error’] = “Message could not be sent. Mailer Error: {$mail->ErrorInfo}”;
    }
    } else {
    $errors[‘db-error’] = “Failed while inserting data into database!”;
    }
    }
    }

    third rename this path to your path.
    require ‘C:\xampp\htdocs\Login\vendor\autoload.php’; // If using Composer

    fourth to get the app password you must go to google user accounts then find the security>on f2A authentication>search app password>create app>paste the password no space. $mail->Password = ‘your app password’; // SMTP password

    fifth do not use this link https://www.codingnepalweb.com/configure-xampp-to-send-mail-from-localhost/ because i tried to work on this and its showing error and the only solution is to use the phpmailer.

  2. Warning: 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 C:\xampp\htdocs\mail.php on line 7
    Sorry, failed while sending mail!

    WHAT IS THE ERR I CANT FIND I PUT PORT NO 587

    I WANT A CONTACT WAY OF YOU FOR FURTHR COMMUNICATION
    PLZ

  3. Sir please i need ur help how did you know php, i want to learn php but i can’t understand, i have no idea php is so hard for me to learn, please teach me php

  4. I found a solution! 🙂
    https://support.google.com/accounts/answer/185833

    1. Go to your google account
    2. Select Security
    3. Under Signing in to Google select App Passwords
    4. Select App > Mail
    5. Select Device > (I am using Windows Computer)
    6. Click Generate

    Use this generate code as the auth_password in the sendmail config textfile instead of your actual password and it should fix the problem!

    • No, you’ve to remove some semicolons for it. Read the blog or watch the video for it.

  5. thanks bro, you are a life saver, took me up to 3 hours watching and reading the article together before having a clear understanding. it works perfectly, i am very grateful

  6. Hi, thx for your tutorial, the last internet page says it worked, but I don’t get anything in my mailbox after 20 minutes, is it normal ?

    And, I’m actually learning programmation, and for my projet, in C# I would like to send mail, and we just work in localhost, so I guess what you have showed here should be useful to me.
    Cause I use XAMPP, but how can I use this php script now ? Do you have an Idea ? Or maybe I am totally wrong

    (Sry for my very bad english, I’m french and we are known to be the worst guys in world to learn other language ^^’)

    • Make sure you’ve entered an email that exists and you may have to wait a minute because it may take some time. You can also check your spam folder.

  7. Hi. What can i do when i got “Email sent successfully”, but i don’t get any mail on my mail inbox? i enabled that thing with “not secure sites” on my account, but i still don’t get any mail. Do you know how can i fix this? I’ve been struggling 4 days to resolve this. Help, please!!

    • It’s because you may have entered the wrong email and the email sent to someone else. Please try again.

    • But if i get the “Email sent successfully”, that means it should work, right? It can’t be a server error or something, right??? I’m really tired, i can’t give up, because i can’t finish my site without it. I worked over 20 hours to resolve this problem, :(( I’m gonna ask a friend if he can do that. Thanks for your help btw

  8. hi, sir please make the video for this process please sir soon I am waiting for your video. make as soon as possible.

  9. i watched your other tutorial and i have a question sir?
    should i enter the last part of the code PHP CODE: to my controllerUserData.php or separate file?

  10. I didn't recieve the email, and yes, I turn on the "less secure apps" on Google. The blog was great but I think you should update it, so that you can address the multiple problems we are all having.

  11. $receiver = "receiver email address here";
    $subject = "Email Test via PHP using Localhost";
    $body = "Hi, there…This is a test email send from Localhost.";
    $sender = "From:sender email address here";

    if(mail($receiver, $subject, $body, $sender)){
    echo "Email sent successfully to $receiver";
    }else{
    echo "Sorry, failed while sending mail!";
    }
    where want to paste this code. pls

  12. Thanks worked .. I was getting multiple issues ..as I open the .ini files in notepad… If you can update the comment .. the ini.. to be opened in PHP … most error will be sorted.

  13. I keep getting this error. Please help. I have configured properly as mentioned abovee

    Warning: mail(): Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set()

  14. Warning: mail(): Failed to connect to mailserver at "smtp.gmail.com" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in C:xampphtdocsSIScontact.php on line 41

    its been 2hrs since ive been trying to read the blog
    pleasseeee helpppp

  15. i already got it after 3h THANKK YOU.
    for errors , kindly restart your apache after encoding those codes.
    and some are in comment in php.ini so we should remove the " ; " to enable the lines
    after that dont forget to enable the less app in gmail settings

  16. Thanks for the tutorial. I got this error:
    21/01/20 11:13:23 : Username and Password not accepted. Learn more at https://support.google.com/mail/?p=BadCredentials f13sm1134675iog.18 – gsmtp

    To fix this problem, I had to login to my Gmail account, go to security, and then turn on "Less secure app access." This is "not recommended" according to Google, but it wouldn't work without this setting turned on.

  17. sorry to disturb admin. I have followed the instructions for creating your website and I entered the registration menu. I have filled in all the data then I press the register button. a text appears. FAILED WHEN ENTERING DATA TO DATABASE ??
    Please explain where I went wrong. Thank you

  18. sorry to disturb admin. I have followed the instructions for creating your website and I entered the registration menu. I have filled in all the data then I press the register button. a text appears. FAILED WHEN ENTERING DATA TO DATABASE ??
    Please explain where I went wrong. Thank you

  19. sorry to disturb admin. I have followed the instructions for creating your website and I entered the registration menu. I have filled in all the data then I press the register button. a text appears. FAILED WHEN ENTERING DATA TO DATABASE ??
    Please explain where I went wrong. Thank you

  20. Hi thanks for this tutorial and instructions but I got the error warning after I signed up.

    The data is already input on my data base. Name, email, password and the code also the verification

    But the email is not.
    Warning said is mail():SMTP server response 530 5.7.0 must issue a starTTLS command first.gjlsm12559445pjb.11 – gsmtp in "distinction folder" on line 33 where located this code–>> if(mail($email, $subject, $message, $sender)){ . . . . ..

  21. Notice: Undefined index: message in C:xampphtdocsmail.php on line 3

    Warning: mysqli::__construct(): (HY000/1049): Unknown database 'contact us' in C:xampphtdocsmail.php on line 6
    Connection Failed : Unknown database 'contact us'

  22. Notice: Undefined index: message in C:xampphtdocsmail.php on line 3

    Warning: mysqli::__construct(): (HY000/1049): Unknown database 'contact us' in C:xampphtdocsmail.php on line 6
    Connection Failed : Unknown database 'contact us'

  23. Warning: mail(): SMTP server response: 530 5.7.0 Must issue a STARTTLS command first. r17sm13504747pfr.153 – gsmtp in C:xampphtdocsmail.php on line 7
    Sorry, failed while sending mail!

    bro, create a telegram group so that we will share our queires there so that you can respond to all

  24. Warning: 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 C:wamp64wwwlogincontrollerUserData.php on line 118
    what was the mistake?

  25. Create a php file inside the HTDOCS folder with .php extension and paste the following codes in this file then put the receiver email and sender email address in the mentioned fields.

  26. <?php
    $receiver = "[email protected]";
    $subject = "Email Test via PHP using Localhost";
    $body = "Hi, there…This is a test email send from Localhost.";
    $sender = "From:[email protected]";

    if(mail($receiver, $subject, $body, $sender)){
    echo "Email sent successfully to $receiver";
    }else{
    echo "Sorry, failed while sending mail!";
    }

    This php file with what name we have to save and where it showing error

    Warning: mail(): SMTP server response: 530 5.7.0 Must issue a STARTTLS command first. 78sm5550625pfz.211 – gsmtp in C:xampphtdocsLogin and Signup Form with Email Verification – PHPcontrollerUserData.php on line 33 (Failed while sending code) I configure all xampp and sendmail settings.

  27. Warning: mail(): SMTP server response: 530 5.7.0 Must issue a STARTTLS command first. x5sm10407906pfr.83 – gsmtp in C:xampphtdocsLogin and Signup Form with Email Verification – PHPcontrollerUserData.php on line 33

  28. Warning: 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 C:xampphtdocsswdacontrollerUserData.php on line 33

    please help sir

  29. Warning: 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 C:xampphtdocsusertablecontrollerUserData.php on line 33

    I KEEP GETTING THIS

  30. Warning: 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 C:xampphtdocsusertablecontrollerUserData.php on line 33

    what does it mean

  31. I followed all the steps but an error message appeared to me saying
    Warning: 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 C: xampp htdocs p1 mail.php on line 7
    Sorry, failed while sending mail

  32. Hola buenas tardes, me manda el siguiente error:

    Advertencia:mail(): No se pudo conectar al servidor de correo en el puerto 25 "localhost", verifique su configuración "SMTP" y "smtp_port" en php.ini o utilice ini_set() en C:-xampp-htdocs-Verificacion de email-controllerUserData.php en la línea 33

  33. You've to create a PHP file with the extension .php and paste the last codes on that PHP file but before pasting the codes make sure you've configured the XAMPP and turn on less secure app on your google account. You can read this blog carefully.

LEAVE A REPLY

Please enter your comment!
Please enter your name here