19

I'm trying to configure Sendmail through XAMPP to send email. In my sendmail.ini I have these settings:

# Set default values for all following accounts.

logfile "C:\xampp\sendmail\sendmail.log
account Gmail
tls on
port 587
tls_certcheck off
host smtp.gmail.com
from myemail@gmail.com
auth on
user myemail06@gmail.com
password mypassword

account default : Gmail

I've created a test script like this:

$to = "testemail@btinternet.com";
$subject = "Hi!";
$body = "Hi,\n\nHow are you?";
$headers = "From: myemail06@gmail.com" . "\r\n";
if (mail($to, $subject, $body, $headers)) {
    echo ("Message successfully sent!");
} else {
    echo ("Message delivery failed...");
}

I get a message to say that the email was sent but it never arrives and in the logs I get:

sendmail: Error during delivery: Must issue a STARTTLS command first.

Does anybody know what the issue could be here?

Thanks in advance!

Gaz

AnFi
  • 10,493
  • 3
  • 23
  • 47
Gaz
  • 353
  • 2
  • 3
  • 11
  • Am I the only one to notice, that OP is asking about **original `sendmail`** -- world's most famous mail transfer agent ([info at Wiki](http://en.wikipedia.org/wiki/Sendmail)), started in 1979, while most of the answers are about **fake `sendmail`** ([homepage](http://glob.com.au/sendmail/)) -- a fake program used in development server packs, like XAMPP, started 2004. Can't you people see, that configuration file example given by OP is so different from the configuration examples you give back in your answers? Strange. – trejder Apr 24 '14 at 07:39

12 Answers12

35

This is what worked for me Hopefully no one else will burn oil to figure this out like i did.

Here is my sendmail.ini

[sendmail]

smtp_server=smtp.gmail.com
smtp_port=25
error_logfile=error.log
debug_logfile=debug.log
auth_username=myemail@gmail.com
auth_password=yourgmailpassword
force_sender=myemail@gmail.com

php/php.ini ----basically comment everything out except sendmail_path & mail.add_x_header

[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 = postmaster@localhost

; For Unix only.  You may supply arguments as well (default: "sendmail -t -i").
; http://php.net/sendmail-path
sendmail_path = "\"C:\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 = "C:\xampp\apache\logs\php_mail.log"

This worked for me after i updated the sendmail files (the old ones dont support smtp)

  • go to http://glob.com.au/sendmail/ and grab the latest sendmail zip file
  • unzip to desktop and copy the files into your \xampp\sendmail folder replacing everything that was there.EVERYTHING!
  • Now open up sendmail.ini and copy paste what i showed above.(remove everything in that file first or just comment everything out!)
  • NOTE: you dont need Mercury servers started for this.

I was making a password recovery php on localhost when i encountered this problem. I needed to send users their password. - your php looks okey

braviato
  • 351
  • 2
  • 4
  • 1
    This worked brilliantly for me. Just to add a time saving note: Remember to restart Apache after altering the config files. – KalenGi Dec 19 '11 at 10:42
  • You said "the old ones dont support smtp," but I think you meant "the old ones don't support TLS." – D0SBoots Mar 09 '13 at 20:29
  • 1
    I have 2 more notes: 1) I had to enable less secure applications to access my Gmail account (go to Gmail > Account > Security); 2) I had to use port 587 instead of 25. – FlavioEscobar May 28 '15 at 14:24
  • NOTE: this works on AMPPS too, you just have to replace the `sendmail_path` with the one of your AMPPS installation. – benomatis Oct 31 '16 at 12:58
13

Okay, today, the best answer did not work for me. But, this did:

in sendmail.ini:

[sendmail]
smtp_server=smtp.gmail.com
smtp_port=587
error_logfile=error.log
debug_logfile=debug.log
auth_username=****@gmail.com
auth_password=*******
force_sender=****@gmail.com

in php.ini:

[mail function]
sendmail_path = "\"C:\xampp\sendmail\sendmail.exe\" -t"

Based on port @: http://support.google.com/mail/bin/answer.py?hl=en&answer=13287

aubreypwd
  • 21,507
  • 2
  • 17
  • 14
3

All I had to do was switch the "Allow less secure apps to access your account" to on. I guess this is an alternative to creating an app specific password.

https://support.google.com/accounts/answer/6010255 for info

https://www.google.com/settings/security/lesssecureapps for the switch

Might be worth switching it back off after you're done for security purposes.

Dean_Wilson
  • 190
  • 13
1

There is another issue when using Gmail. Gmail now has security so that you must generate an application specific password - you can't use the password you have for your normal Gmail access. I discovered this by trying the examples above and then noticing that in the sendmail folder an error log had been generated. In the error log I came across a message indicating this.

1

These are the most recent Google SMTP server requirements:

  1. Gmail SMTP server address: smtp.gmail.com
  2. Gmail SMTP password: (Your Gmail password)
  3. Gmail SMTP port (TLS): 587
  4. Gmail SMTP port (SSL): 465
  5. Gmail SMTP TLS/SSL required: Yes

Google SMTP Requirements

If you just use SSL it gets complicated with the required Captcha verification test so I just set my SSL to auto which will try TLS when SSL Fails.
enter image description here

Ryan Santos
  • 367
  • 4
  • 12
1

Just to add to the already great responses. Make sure you are running XAMPP as Administrator. That was what fixed it for me.

Julian
  • 11
  • 2
1

I could not find a complete working solution so I compile it here for us some credit to source https://meetanshi.com/blog/send-mail-from-localhost-xampp-using-gmail/#

enter image description here

You are not done yet! 1 last thing to do is getting application password

(auth_password=Your-Gmail-Password)

and not your gmail account password as the following:

On a browser login your gmail account, then click on your profile icon top right, select

"Manager Your Google Account"

, the on the left column click on security, find box

"Signing in to Google"

click on

"App passwords"

, here you need to create a password for this xampp send mail under

"Select the app and device you want to generate the app password for."

generate a password and copy the the generated password to

(auth_password=just-generated-password) this in in php.ini above-screenshot.

That is it, all done, it should work for you now!

Enjoy your mails!

Dung
  • 19,199
  • 9
  • 59
  • 54
0
THIS IS WHAT YOU SENDMAIL SHOULD LOOK LIKE


[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=465

; SMTPS (SSL) support
;   auto = use SSL for port 465, otherwise try to use TLS
;   ssl = always 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=Your Email Here
auth_password=Your Password Here

; 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=Your Email Here

; 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=smtp.gmail.com

THIS IS WHAT YOU PHP.INI FILE SHOULD LOOK LIKE

[mail function]
; XAMPP: Comment out this if you want to work with an SMTP Server like Mercury
smtp_server=smtp.gmail.com
smtp_port = 465

; For Win32 only.
; http://php.net/sendmail-from
;sendmail_from = postmaster@localhost

; XAMPP IMPORTANT NOTE (1): If XAMPP is installed in a base directory with spaces (e.g. c:\program filesC:\xampp) fakemail and mailtodisk do not work correctly.
; XAMPP IMPORTANT NOTE (2): In this case please copy the sendmail or mailtodisk folder in your root folder (e.g. C:\sendmail) and use this for sendmail_path.  
; XAMPP: Comment out this if you want to work with fakemail for forwarding to your mailbox (sendmail.exe in the sendmail folder)
sendmail_path = "\"C:\xampp\sendmail\sendmail.exe\" -t"

; XAMPP: Comment out this if you want to work with mailToDisk, It writes all mails in the C:\xampp\mailoutput folder
;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 =

; Add X-PHP-Originating-Script: that will include uid of the script followed by the filename
mail.add_x_header=Off
Khalid
  • 1
0

a) Change php.ini Locate php.ini in file path “[Drive Letter]:[XAMPP directory]\php”. e.g. C:\xampp\php\php.ini

Search for sendmail_path in your php.ini file and remove the semi colon “;” before it [mine did not have path].

[mail function]
; For Win32 only.

SMTP = smtp.gmail.com

smtp_port = 25

; For Win32 only.
; http://php.net/sendmail-from
sendmail_from = [your_gmail_username]@gmail.com
sendmail_path = "\"C:\xampplite\sendmail\sendmail.exe\" -t"

b) Change sendmail.ini Locate sendmail.ini in file path is “[Drive Letter]:[XAMPP directory]\sendmail” e.g. C:\xampp\sendmail\sendmail.ini

Comment the “Mercury” and “A free mail service example” contents as shown below:

 # Mercury  <br/> 
 #account Mercury  <br/> 
 #host localhost  <br/> 
 #from postmaster@localhost  <br/> 
 #auth off  <br/> 
 # A freemail service example  <br/> 
 #account Hotmail  <br/> 
 #tls on  <br/> 
 #tls_certcheck off  <br/> 
 #host smtp.live .com  <br/> 
 #from [exampleuser]@hotmail.com  <br/> 
 #auth on  <br/> 
 #user [exampleuser]@hotmail .com  <br/> 
 #password [examplepassword]  <br/> 

c. Add the gmail account.

Example:

account Gmail
tls on 
tls_certcheck off
host smtp.gmail.com 
 from [your_gmail_username]@gmail.com 
auth on
  account default : Gmail 

d. Restart Apache Server


I did not use gmail. I used my hosting account. If you do that, make sure the SMTP settings are correct. Mine was mail.abc.com not smtp.gmail.com. This code is from 2 websites. You need to change both files. I have it working on Xampp 1.73 running on a win200sp4 box. All default setting except for these two files. php.ini and sendmail.ini

benomatis
  • 5,536
  • 7
  • 36
  • 59
Joe
  • 335
  • 2
  • 4
  • 12
0

Update for 2020

Simplified solution: If you are using Gmail you can set an application specific password.

  1. Log into your gmail account
  2. Select your marker in the top right corner (circle icon)
  3. Click Manage your Google Account
  4. Select Security in the left menu
  5. Under Signing in to your Google - click App passwords
  6. Select app: Mail
  7. Select device: your device of choice, mine was Windows
  8. Copy the auto generated password into your sendmail.ini file after auth_password
  9. Save, restart XAMPP and hopefully you are good to go

This solution worked for me, but off course there may be other errors blocking your success here, like updating the files in the xampp/sendmail folder, correct port settings etc.

ChrVik
  • 315
  • 1
  • 2
  • 18
0

Step 1: Go to your sendmai.ini

A.Set your smtpserver name. As i use gmail so for me it is "smtp.gmail.com"

smtp_server=smtp.gmail.com

B. Set your SMTP port number. For gmail you can use "465"

smtp_port=465 
smtp_ssl=ssl

C. Most important part is now. Setting passwords. You have to generate a app password to send email from server. To do so follow the steps from the link. *** Do not use your gmail login password. It will not work. you have to generate app password.If you have enabled 2-step verification then follow the bellow steps to generate app password else just use your gmail password. https://devanswers.co/create-application-specific-password-gmail/

auth_username=hossain.9090@gmail.com
auth_password=wqutwfuevmssmgko

wqutwfuevmssmgko is my securely generated password.

Step 2: Go to php.ini

A.set the value accordingly for SMTP and smtp_port. Save and don't forget to restart the apache.

SMTP=localhost
smtp_port=465
Md . Sojib Ahmed
  • 431
  • 4
  • 14