'Swiftmailer - Uncaught Error: Call to undefined method Swift_SmtpTransport::newInstance()

I'm trying to send email using the Swiftmailer.

I'm getting an Uncaught Error:

Call to undefined method Swift_SmtpTransport::newInstance().

Here is the code:

require_once 'swift/lib/swift_required.php';

$transport = Swift_SmtpTransport::newInstance('smtp.gmail.com', 465, 'ssl')
      ->setUsername ('[email protected]')
      ->setPassword ('password');

$mailer = Swift_Mailer::newInstance($transport);

$message = Swift_Message::newInstance('Weekly Hours')
       ->setFrom (array('[email protected]' => 'My Name'))
       ->setTo (array('[email protected]' => 'Recipient'))
       ->setSubject ('Weekly Hours')
       ->setBody ('Test Message', 'text/html');

$result = $mailer->send($message);

Based on the above code, what would be causing that mistake?



Solution 1:[1]

I'm not quite familiar with SwiftMailer, but from the brief overview of the error you provided, and their documentation page, I can suggest you to try using new operator. From the error, it's clear that Swift_SmtpTransport class doesn't have a newInstance method, so when you use it to create a new instance, it throws an error. Maybe try using this instead:

require_once 'swift/lib/swift_required.php';

$transport = new Swift_SmtpTransport('smtp.gmail.com', 465, 'ssl');
$transport->setUsername('[email protected]')->setPassword('password');

$mailer = new Swift_Mailer($transport);

$message = new Swift_Message('Weekly Hours');
$message
   ->setFrom(['[email protected]' => 'My Name'])
   ->setTo(['[email protected]' => 'Recipient'])
   ->setSubject('Weekly Hours')
   ->setBody('Test Message', 'text/html');

$result = $mailer->send($message);

Edit: PHP Doesn't allow a direct method call after instantiating an object (without parenthesis). Thanks, Art Geigel.

Solution 2:[2]

Swift_Mailer::newInstance($transport);

The newInstance method is available in version 5.4, in newer version, it is removed. Check version in composer.json.

"swiftmailer/swiftmailer": "^5.4"

Solution 3:[3]

add this lines in file : ./swift/classes/Swift/SmtpTransport.php

/**
 * Create a new SmtpTransport instance.
 *
 * @param string  $host
 * @param integer $port
 * @param string  $security
 *
 * @return Swift_SmtpTransport
 */
public static function newInstance($host = 'localhost', $port = 25, $security = null)
{
    return new self($host, $port, $security);
}

it was deleted in new version, but if you update from github, you need everytime add it

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1
Solution 2 Syscall
Solution 3 Kamil DÄ…browski