PHP/Mail
From charlesreid1
Sending email with PHP:
https://stackoverflow.com/questions/14456673/sending-email-with-php-from-an-smtp-server#14456761
Procedure:
- Open port 465
- Put PHPMailer on your PHP include path
- From the PHP script you want to send email from, include PHPMailer
- Drop in your SMTP credentials
- Now you're able to send off emails
Contents
Namecheap SMTP Mail Settings
Namecheap:
- Username: your email address
- Password: password for this email account
- Incoming/outgoing servers name: mail.privateemail.com
- Incoming server type: IMAP or POP3
- Incoming server (IMAP): 993 port for SSL
- Incoming server (POP3): 995 port for SSL
- Outgoing server (SMTP): 465 port for SSL
Installing PHPMailer
Visit PHPMailer: https://github.com/PHPMailer/PHPMailer
Copy the contents of the PHPMailer folder into one of the include_path directories specified in your PHP configuration
Opening Port
The following iptables rule will keep track of outgoing packets and will allow corresponding return packets - necessary for SMTP connections, because you want to be able to receive the "okay, data received" signal from the server you're sending mail out to.
iptables -I INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
See [1]
Editing php.ini
No smtp settings needed in the php.ini file...
See [2]
Do need to enable PHP OpenSSL support though: in php.ini, add
[PHP_OPENSSL] extension=php_openssl.dll
See [3]
Editing PHPMailer Settings
Need to edit the file class.smtp.php and put your SMTP credentials there. (I think.)
Using PHPMailer
See https://github.com/PHPMailer/PHPMailer
<?php
//////////////////////////////////////////////////////////////
// Include PHP mailer stuff
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
require 'path/to/PHPMailer/src/Exception.php';
require 'path/to/PHPMailer/src/PHPMailer.php';
require 'path/to/PHPMailer/src/SMTP.php';
//////////////////////////////////////////////////////////////
// Set SMTP credentials
$mail = new PHPMailer(true); // Passing `true` enables exceptions
try {
//Server settings
$mail->SMTPDebug = 2; // Enable verbose debug output
$mail->isSMTP(); // Set mailer to use SMTP
$mail->Host = 'smtp1.example.com;smtp2.example.com'; // Specify main and backup SMTP servers
$mail->SMTPAuth = true; // Enable SMTP authentication
$mail->Username = 'user@example.com'; // SMTP username
$mail->Password = 'secret'; // SMTP password
$mail->SMTPSecure = 'tls'; // Enable TLS encryption, `ssl` also accepted
$mail->Port = 587; // TCP port to connect to
//Recipients
$mail->setFrom('from@example.com', 'Mailer');
$mail->addAddress('joe@example.net', 'Joe User'); // Add a recipient
$mail->addAddress('ellen@example.com'); // Name is optional
$mail->addReplyTo('info@example.com', 'Information');
$mail->addCC('cc@example.com');
$mail->addBCC('bcc@example.com');
//Attachments
$mail->addAttachment('/var/tmp/file.tar.gz'); // Add attachments
$mail->addAttachment('/tmp/image.jpg', 'new.jpg'); // Optional name
//Content
$mail->isHTML(true); // Set email format to HTML
$mail->Subject = 'Here is the subject';
$mail->Body = 'This is the HTML message body <b>in bold!</b>';
$mail->AltBody = 'This is the body in plain text for non-HTML mail clients';
$mail->send();
echo 'Message has been sent';
} catch (Exception $e) {
echo 'Message could not be sent.';
echo 'Mailer Error: ' . $mail->ErrorInfo;
}
?>
Don't Send to Gmail
If you are experiencing problems with PHPMailer, and you are sending emails to a gmail acount, try sending your emails to a non-gmail account.
I was trying all kinds of different things in the script above and nothing was working, but then I got the bright idea to send to a non-gmail email address, and everything worked like a charm.
The PHPMailer emails were simply being dropped by Gmail, without any notification. They did not even show up in my spam folder.
My ultimate solution: send the emails to a non-gmail account (an email service associated with my domain but run by NameCheap). If you need to send them to a gmail account, set up email forwarding from the non-gmail NameCheap account to your gmail account.