Reputation: 7229
Command function
$message = \Swift_Message::newInstance('test')
->setContentType("text/html")
->setFrom('[email protected]')
->setTo('[email protected]');
$message->setBody('test');
if ($this->getApplication()->getKernel()->getContainer()->get('mailer')->send($message))
{
return true;
}
return false;
When I execute command in Command Line I get true like mail is sent.
Paramters.yml
mailer_transport: gmail
mailer_host: smtp.gmail.com
mailer_user: [email protected]
mailer_password: xxxxxxxxxxxxx
Config.yml
swiftmailer:
spool:
type: file
path: "%kernel.root_dir%/../swiftmailer"
transport: %mailer_transport%
host: %mailer_host%
username: %mailer_user%
password: %mailer_password%
I had read somewhere that Symfony Profiler can be used to see if mail has sent but I just want to physically send mail to my address in testing purpose. I just need info where I do wrong things.
I must notice that I using allowed device security tool in gmail account.
Can that be reason why mail is not sent?
Upvotes: 3
Views: 4501
Reputation: 7229
Yes! I found a solution.
I had removed spool in Config.yml and add port and encryption.
# Swiftmailer Configuration
swiftmailer:
transport: %mailer_transport%
host: %mailer_host%
port: %mailer_port%
encryption: %mailer_encryption%
username: %mailer_user%
password: %mailer_password%
and in Parameters.yml
mailer_transport: gmail
mailer_host: smtp.gmail.com
mailer_port: 465
mailer_encryption: ssl
mailer_user: [email protected]
mailer_password: yourNewGeneratedAppPassword
after that I was available to see errors using
$mailer = $this->getContainer()->get('mailer');
$logger = new \Swift_Plugins_Loggers_ArrayLogger();
$mailer->registerPlugin(new \Swift_Plugins_LoggerPlugin($logger));
Then after message is sent I had used:
echo $logger->dump();
To print error in terminal.
Below is whole function.
public function sendMail($email, $data)
{
$mailer = $this->getContainer()->get('mailer');
$logger = new \Swift_Plugins_Loggers_ArrayLogger();
$mailer->registerPlugin(new \Swift_Plugins_LoggerPlugin($logger));
$message = \Swift_Message::newInstance('test')
->setContentType("text/html")
->setFrom('[email protected]')
->setTo($email);
$message->setBody($data);
if ($mailer->send($message))
{
echo $logger->dump();
return true;
}
return false;
}
Tips:
Also you must authenticate your app, ofcourse if you using gmail. via this link https://myaccount.google.com/security
There is link
app password
Here is description https://support.google.com/accounts/answer/185833?hl=en
After click there you will need to give custom name to your app and generate new password which you will using in
Parameters.yml >> mailer_password:
to connect app with gmail account.
Upvotes: 7