Search code examples
phpxamppsmtpphpmailerswiftmailer

Cannot send mail using PHPmailer or swift mailer


When using PHPmailer or swift mailer to send mail through mail.google.com, both timeout after 30 seconds. The PHPmailer code is as follows

<?php
// Import PHPMailer classes into the global namespace
// These must be at the top of your script, not inside a function
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

//Load Composer's autoloader
require 'vendor/autoload.php';

$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 = 'mail.google.com';            // Specify main and backup SMTP servers
    $mail->SMTPAuth = true;                               // Enable SMTP authentication
    $mail->Username = '[my email]@gmail.com';                 // SMTP username
    $mail->Password = '[password]';                           // SMTP password
    $mail->SMTPSecure = 'ssl';                            // Enable TLS encryption, `ssl` also accepted
    $mail->Port = 465;                                    // TCP port to connect to

    //Recipients
    $mail->setFrom('[my email]@gmail.com', 'Adam Johnston');
    $mail->addAddress('[my email]@gmail.com', 'Adam Johnston');     // Add a recipient
    //$mail->addAddress('[email protected]');               // Name is optional
    //$mail->addReplyTo('[email protected]', 'Information');
    //$mail->addCC('[email protected]');
    //$mail->addBCC('[email protected]');

    //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. Mailer Error: ', $mail->ErrorInfo;
}

Here is the swift mailer code:

require_once './vendor/autoload.php';

// Create the Transport
$transport = (new Swift_SmtpTransport('mail.google.com', 465))
  ->setUsername('[my email]@gmail.com')
  ->setPassword('[password]')
;

// Create the Mailer using your created Transport
$mailer = new Swift_Mailer($transport);

// Create a message
$message = (new Swift_Message('Wonderful Subject'))
  ->setFrom(['[my email]@gmail.com' => 'Adam Johnston'])
  ->setTo(['[my email]@gmail.com' => 'Adam Johnston'])
  ->setBody('Here is the message itself')
  ;

// Send the message
$result = $mailer->send($message);

Because both are timing out, I'm assuming both are installed correctly but I've set something up incorrectly. Thanks in advance.


Solution

  • For gmail the SMTP server (Host field) should be smtp.gmail.com.