symfony2: emails are not sent - php

$mail = \Swift_Message::newInstance()
->setSubject($message->getSubject())
->setFrom($message->getEmail())
->setBody($message->getBody());
$this->get('mailer')->send($mail);
Mails are not sent when using swiftmailer. Yet, when I go step by step in the debugger, it seems to send the email and returns sent=1. However I don't receive anything in my mailbox (gmail). I use my gmail account for sending emails, as shown below:
parameters:
mailer_transport: gmail
mailer_host: ~
mailer_user: username#gmail.com
mailer_password: my-password
delivery_address: username#gmail.com
swiftmailer:
transport: %mailer_transport%
host: %mailer_host%
username: %mailer_user%
password: %mailer_password%
spool: { type: memory }
I've checked apache error log, nothing. I've run php app/console swiftmailer:spool:send just in case, but no luck.
What could prevent emails from being sent ?

You need either to:
1) Remove the spool line in your swiftmailer configuration, this one:
spool: { type: memory }
2) Trigger the spool queue to be sent:
php app/console swiftmailer:spool:send
But I think you are looking for option 1)

u can try this one...
Parameter.yml
mailer_transport: gmail
mailer_encryption: ssl
mailer_auth_mode: login
mailer_host: smtp.gmail.com
mailer_user: 'xxxxxxxxxxxx'
config.yml
swiftmailer:
transport: gmail
host: smtp.gmail.com
username: 'Yourmail-id#gmail.com'
password: 'Password'

The ->setTo part was missing ! That solved it.
$mail = \Swift_Message::newInstance()
->setSubject($message->getSubject())
->setFrom($message->getEmail())
->setTo("me#gmail.com")
->setBody($message->getBody());

First, when you set spool: { type: memory } it means that you actually want to send the emails manually by running the spool command: php app/console swiftmailer:spool:send. So removing that spool line is going to help.
Second, you need to properly configure your mailing host. For development purposes, I strongly recommend that you use a service such as SendGrid and configure it as detailed in this Symfony2 Mailing Setup Tutorial
The tutorial also contains details on how to properly setup a mailing service in Symfony2 and how to build mailing templates.
Third, if you want to stick with Gmail, then the correct data is:
mailer_transport: smtp
mailer_host: smtp.gmail.com
mailer_user: your_gmail_address#gmail.com
mailer_password: 'your_gmail_password'
mailer_port: 587

Related

Symfony 3 - Swiftmailer not sending email

I'm attempting to send an email using SwiftMailer (version = Swift-5.4.8) after a user submits a form. I cannot determine why the email is not being sent. I have only tried using gmail setup as I've heard it is easiest to use (am new to web dev).
I have tried changing config.yml, parameters.yml
parameters.yml:
parameters:
database_host: 127.0.0.1
database_port: null
database_name: symfony
database_user: root
database_password: null
mailer_transport: gmail
mailer_encryption: ssl
mailer_auth_mode: login
mailer_host: smtp.gmail.com
mailer_user: myemail#gmail.com
mailer_password: mypass
secret: mysecret
config.yml (relevant snippet, please lmk if need other portions)
swiftmailer:
transport: '%mailer_transport%'
host: '%mailer_host%'
username: '%mailer_user%'
password: '%mailer_password%'
spool: { type: memory }
DefaultController
$form = $this->createFormBuilder()
->add('from', EmailType::class)
->add('message', TextareaType::class)
->add('send',SubmitType::class)
->getForm()
;
if ($form->isSubmitted()){
$data = $form->getData();
$message = \Swift_Message::newInstance()
->setSubject('Join Our Team Request')
->setFrom($data['from'])
->setTo('myemail2#gmail.com')
->setBody(
$data['message'],'text/plain'
)
;
$this->get('mailer')->send($message);
}
return $this->render('xxx.html.twig', array("title" => "...","join_team_form" =>$form->createView()));
The view and form are rendered correctly. It appears the form submits correctly, however I never receive an email. Again new to web dev, any suggestions appreciated.
EDIT: I was able to successfully configure and send an email using the command prompt and the 'php bin\console swiftmailer:email:send' command. The issue was it was using a dev_config file, silly error. However, when I still fill out the form and click the send button, no email gets sent. Only using the above command. Any insight?
EDIT2: Solution to first EDIT was running 'composer update'.... nice...
The best practice to send mails with gmail on Symfony is described in this documentation
But for this you need to have environment variables loaded in your application, and I don't know it's your case.
The below should work. Update your config.yml to
swiftmailer:
url: 'gmail://%mailer_user%:%mailer_password%#localhost?encryption=tls&auth_mode=oauth'
spool: { type: 'memory' }
Another suggestion is to check that your form is valid before sending the mail. Otherwise the send will fail if the from is null or ""
if ($form->isSubmitted() && $form->isValid()){ ... }
Let me know if it don't work
Try to use tls encryption and smtp tranport protocol.
Your config.yml will be similar to this:
# Swiftmailer Configuration
swiftmailer:
transport: 'smtp'
host: 'smtp.gmail.com'
username: 'myemail#gmail.com'
password: 'mypass'
encryption: tls
auth_mode: login
And, you must activate access to less secure applications and disable two step authentification in your gmail account.

Symfony3 - Email not sent from a Command

I can't sent e-mail from a Command in Symfony3 in prod.
My code :
$message = \Swift_Message::newInstance()
->setSubject('A subject')
->setFrom('email#site.com')
->setTo('email#site.com')
->setBody('content', 'text/html');
$mailer = $this->getContainer()->get('mailer');
$mailer->send($message);
Config.yml
# Swiftmailer Configuration
swiftmailer:
transport: '%mailer_transport%'
host: '%mailer_host%'
username: '%mailer_user%'
password: '%mailer_password%'
port: '%mailer_port%'
encryption: '%mailer_encryption%'
spool: { type: memory }
Parameters.yml
mailer_transport: smtp
mailer_host: myhostfromovh
mailer_encryption: null
mailer_port: 587
mailer_user: myuser
mailer_password: mypassword
I got no error but no e-mail received in my mailbox. :(
Moreover, when I write in command line :
php app/console swiftmailer:email:send
I got :
[2017-12-22 13:31:12] app.ERROR: Exception occurred while flushing email queue: Connection could not be established with host myhostfromovh [Connection refused #111]
I changed my custom host myhostfromovh by smtp.gmail.com or ns0.ovh.net (with PORT and USER / PASSWORD), nothing to do, it doesn't work. :-(
BUT ! When I execute the same code in a Controller, no problem, I receive the mail. So I don't understand.
Help me ! \o/
You have enabled an email queue in your swiftmail this means that the emails will be queued and send during the kernel event terminate (after you already send the response to the client).
You should have the errors of your controller on var/logs/prod.log
It seems your host is not allowed to connect to that host:port. Possible reasons?
Your IP has been banned
Wrong ip/port (Configuration)
Service provider/Enterprise/University firewall block outgoing smtp connections (quite common nowadays)
Install mailcatcher https://mailcatcher.me/ and try to send emails to your local smtp server.

Symfony 3 can't send email test

I'm a newbie with Symfony 3 (Symfony generally)
I want to send an email, just to test my parameters, if everything's going well, but that doesn't work.
Here my parameters.yml file:
database_host: 127.0.0.1
database_port: null
database_name: learnsymfony
database_user: root
database_password: null
mailer_transport: gmail
mailer_encryption: ssl
mailer_auth_mode: login
mailer_host: smtp.gmail.com
mailer_user: 'personalemail#gmail.com'
secret: 7759e1c20bb67e4ec0fbac5c3a4de22beed3b95d
And Here my config.yml code for swiftmailer:
transport: gmail
host: smtp.gmail.com
username: 'personalemail#gmail.com'
password: 'myPassword'
spool: { type: memory }
I found this configuration in one question here in the forum, but for my case, that was given an error "Exception occurred while flushing email queue: Connection could not be established with host smtp.gmail.com [ #0]"
Any suggestion please?
I tried alot of other configurations but nothing works well...
thanks
I also faced this problem today and got resolved by following how to send email in Symfony
After following these steps don't forget to import these in your default controller:
use Symfony\Component\Routing\Annotation\Route as Route;
use Symfony\Component\HttpFoundation\Response;
And make sure your email and password which you are using "#app/config/parameters.yml" are correct.

Send mail from localhost via Symfony2 Command using Swiftmailer

Command function
$message = \Swift_Message::newInstance('test')
->setContentType("text/html")
->setFrom('x#x.com')
->setTo('x#gmail.com');
$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: x#gmail.com
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?
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: yourMail#gmail.com
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('x#mdpi.com')
->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.

PHP Swiftmailer with Zoho smtp server not sending mail

I'm using Swiftmailer on a Symfony2. I'm also using Zoho mail to host my mail server and I have configured Swiftmailer using the smpt details provided by Zoho, but it looks like something is wrong because the following exception is thrown:
PHP Fatal error: Uncaught exception 'Swift_TransportException' with message 'Connection could not be established with host 127.0.0.1 [Connection refused #111]'
My parameters.yml file looks like:
parameters:
mailer_transport: smtp
mailer_host: smtp.zoho.com
mailer_port: 465
mailer_encryption: ssl
mailer_user: my_username
mailer_password: my_password
mailer_authmode: plain
and my config.yml:
swiftmailer:
transport: "%mailer_transport%"
host: "%mailer_host%"
port: "%mailer_port%"
encryption: "%mailer_encryption%"
username: "%mailer_user%"
password: "%mailer_password%"
auth_mode: "%mailer_authmode%"
spool: { type: memory }
I have tested the connection using telnet and everything seems to be alright:
root:/# telnet smtp.zoho.com 465
Trying 74.201.154.90...
Connected to smtp.zoho.com.
Escape character is '^]'.
What am I missing?
Thanks!
Well, if you parameters.yml is well loaded then i think i know the problem where it comes from, i think your webhost doesn't allow ssl connection port 465, it refuses the connection thats what the error 111 means, try first to connect using TLS security with port 587. If you still want to use 465 try contacting your web hosting to check that port.
Edit :
Remove the "" should fix it
swiftmailer:
transport: %mailer_transport%
host: %mailer_host%
port: %mailer_port%
encryption: %mailer_encryption%
username: %mailer_user%
password: %mailer_password%
auth_mode: %mailer_authmode%
spool: { type: memory }
Change mailer_authmode: plain to mailer_authmode: login.
After trying with all the solutions (in my development and the production machine) I've tryied PhpMailer. It works perfectly.
I think the problem is in SwiftMailer's code.
You need to log into zoho and set up an application specific password. You can find it under Security -> Two Factor Authentication. Use that password instead of your account password.
Please note that Zoho Mail does not offer IMAP/POP support anymore with their free plan:
```
FREE PLAN
Up to 25 Users
5GB* /User, 25MB Attachment Limit
Webmail access only+. Single domain hosting.
```
+IMAP/POP Support Available exclusively with the paid plans.
https://www.zoho.com/workplace/pricing.html?src=zmail
Old free plans (registered before 2018???) seem to still have IMAP/POP Support Available
Source: https://help.zoho.com/portal/community/topic/zoho-free-tier-pop-imap-activesync-no-longer-free

Categories