title: How to configure xampp to send email
body: <p>I know this is elsewhere on the site but for some reason the answers I've found on here still haven't helped I still can't get it to work after trying different things all day. My goal was to have a confirmation code sent to the email that the user enters. I only know a small amount of PHP and followed a tutorial for the login/registration system but I'm fairly sure the php is working fine and the problem lies in my sendmail.ini and php.ini. Here is my sendmail.ini    </p>
  
  <pre><code>; 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=
  </code></pre>
  
  <p>And my the parts I've edited in my php.ini    </p>
  
  <pre><code>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 =
  </code></pre>
  
  <p>and my PHP code in case it's needed</p>
  
  <pre><code>&lt;?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) &gt; 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";
     }
    }
   }
  }
  ?&gt;
  </code></pre>
  
  <p>Like I said I've been working on this for a while and I can't seem to figure it out, I assume it's something really simple but since I'm still learning I didn't see it. Thanks for all the help!</p>