php.ini & SMTP= - how do you pass username & password
Question
My ISP
account requires that I send a username & password for outbound SMTP
mail.
How do I get PHP
to use this when executing php.mail()?
The php.ini
file only contains entries for the server (SMTP= )
and From: (sendmail_from= )
.
Solution
PHP mail()
command does not support authentication. Your options:
- PHPMailer- Tutorial
- PEAR - Tutorial
- Custom functions - See various solutions in the notes section: http://php.net/manual/en/ref.mail.php
OTHER TIPS
I apply following details on php.ini file. its works fine.
SMTP = smtp.example.com
smtp_port = 25
username = info@example.com
password = yourmailpassord
sendmail_from = info@example.com
These details are same as on outlook settings.
Use Fake sendmail for Windows to send mail.
- Create a folder named
sendmail
inC:\wamp\
. - Extract these 4 files in
sendmail
folder:sendmail.exe
,libeay32.dll
,ssleay32.dll
andsendmail.ini
. - Then configure
C:\wamp\sendmail\sendmail.ini
:
smtp_server=smtp.gmail.com smtp_port=465 auth_username=user@gmail.com auth_password=your_password
The above will work against a Gmail account. And then configure php.ini:
sendmail_path = "C:\wamp\sendmail\sendmail.exe -t"
Now, restart Apache, and that is basically all you need to do.
PHP does have authentication on the mail-command!
The following is working for me on WAMPSERVER (windows, php 5.2.17)
php.ini
[mail function]
; For Win32 only.
SMTP = mail.yourserver.com
smtp_port = 25
auth_username = smtp-username
auth_password = smtp-password
sendmail_from = you@yourserver.com
I prefer the PHPMailer tool as it doesn't require PEAR. But either way, you have a misunderstanding: you don't want a PHP-server-wide setting for the SMTP user and password. This should be a per-app (or per-page) setting. If you want to use the same account across different PHP pages, add it to some kind of settings.php file.
After working all day on this, I finally found a solution. Here's how I send from Windows XP with WAMP.
- Use Google's SMTP server. You probably need an account.
- Download and install Fake Sendmail. I just downloaded it, unzipped it and put it in the WAMP folder.
- Create a test PHP file. See below.
<?php $message = "test message body"; $result = mail('recipient@some-domain.com', 'message subject', $message); echo "result: $result"; ?>
- Update your php.ini file and your sendmail.ini file (sendmail.ini is in the sendmail folder).
- Check the error.log file in the sendmail folder that you just created if it doesn't work.
Reference:
- Install Postfix (Sendmail-compatible).
- Edit
/etc/postfix/main.cf
to read:
#Relay config
relayhost = smtp.server.net
smtp_use_tls=yes
smtp_sasl_auth_enable=yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_tls_CAfile = /etc/postfix/cacert.pem
smtp_sasl_security_options = noanonymous
- Create
/etc/postfix/sasl_passwd
, enter:
smtp.server.net username:password
Type #
/usr/sbin/postmap sasl_passwd
Then run:
service postfix reload
Now PHP will run mail as usual with the sendmail -t -i
command and Postfix will intercept it and relay it to your SMTP server that you provided.
Use Mail::factory in the Mail PEAR package. Example.
These answers are outdated and depreciated. Best practice..
composer require phpmailer/phpmailer
The next on your sendmail.php file just require the following
# use namespace
use PHPMailer\PHPMailer\PHPMailer;
# require php mailer
require_once "../vendor/autoload.php";
//PHPMailer Object
$mail = new PHPMailer;
//From email address and name
$mail->From = "from@yourdomain.com";
$mail->FromName = "Full Name";
//To address and name
$mail->addAddress("recepient1@example.com", "Recepient Name");
$mail->addAddress("recepient1@example.com"); //Recipient name is optional
//Address to which recipient will reply
$mail->addReplyTo("reply@yourdomain.com", "Reply");
//CC and BCC
$mail->addCC("cc@example.com");
$mail->addBCC("bcc@example.com");
//Send HTML or Plain Text email
$mail->isHTML(true);
$mail->Subject = "Subject Text";
$mail->Body = "<i>Mail body in HTML</i>";
$mail->AltBody = "This is the plain text version of the email content";
if(!$mail->send())
{
echo "Mailer Error: " . $mail->ErrorInfo;
}
else
{
echo "Message has been sent successfully";
}
This can be configure how ever you like..
Considering one answer in this question, In PHP 4 the PEAR Mail package is typically already installed, and this really simple tutorial shows you the few lines of code that you need to add to your php file http://email.about.com/od/emailprogrammingtips/qt/PHP_Email_SMTP_Authentication.htm
- Install the latest hMailServer. "Run hMailServer Administrator" in the last step.
- Connect to "localhost".
- "Add domain..."
- Set "127.0.0.1." as the "Domain", click "Save".
- "Settings" > "Protocols" > "SMTP" > "Delivery of e-mail"
- Set "localhost" as the "Local host name", provide your data in the "SMTP Relayer" section, click "Save".
- "Settings" > "Advanced" > "IP Ranges" > "My Computer"
- Disable the "External to external e-mail addresses" checkbox in the "Require SMTP authentication" group.
- If you have modified php.ini, rewrite these 3 values:
"SMTP = localhost",
"smtp_port = 25",
"; sendmail_path = ".
Credit: How to configure WAMP (localhost) to send email using Gmail?