I can't send email with symfony2
app/config/config.yml
swiftmailer:
transport: smtp
encryption: ssl
auth_mode: login
host: smtp.gmail.com
username: mymail#gmail.com
password: mypassword
src/Ga/CmsBundle/Resources/config/routing.yml
emailing:
pattern: /emailing
defaults: { _controller: "GaCmsBundle:main:emailing" }
src/Ga/CmsBundle/Controller/mainController.php
public function emailingAction()
{
$message = \Swift_Message::newInstance()
->setSubject('Hello Email')
->setFrom('mymail#gmail.com')
->setTo('anothermail#yahoo.com')
->setBody('mahdi musawie');
$this->get('mailer')->send($message);
return new response("mahdi");
}
try to set a port (this one was 465 for google apps) or use transport: gmail
this one works fine for me: (i use google apps)
mailer_transport: gmail
mailer_host: smtp.gmail.com
mailer_user: xxx#my-domain.com
mailer_password: xxx
mailer_port: 465
Related
I'm developing on Symfony3. I have a command which allows to send a e-mail the first day of each month. When I was working on local, the command worked fine.
Last week, I deploy my project in a "shared OVH Hosting", and when I execute the command, I get this error :
[Symfony\Component\Debug\Exception\ContextErrorException]
Warning: mkdir(): Permission denied
This is my swiftmailer configuration : (config.yml) :
swiftmailer:
transport: "%mailer_transport%"
auth_mode: "%mailer_auth_mode%"
host: "%mailer_host%"
encryption: "%mailer_encryption%"
port: "%mailer_port%"
username: "%mailer_user%"
password: "%mailer_password%"
spool: { type: memory }
And parameters.yml :
parameters:
mailer_transport: smtp
mailer_auth_mode: login
mailer_host: ns0.ovh.net
mailer_encryption: null
mailer_port: 587
mailer_user: mymail#mydomain.fr
mailer_password: mypass
And finally, my code sending an email (working in local) :
$pdf->Output("billing/FA-".$value->getDateRefresh()->format('Y-m')."-".$user->getId().".pdf",'F');
$message = \Swift_Message::newInstance('Votre fature du '.$value->getDateRefresh()->format('m-Y'))
->setFrom(array("mymail#mydomain.fr" => 'Name'))
->setTo($user->getEmail())
->setBody('Voici ci joint votre relevé CONVERSEO du '.$value->getDateRefresh()->format('m-Y'), 'text/html');
$attachment = \Swift_Attachment::fromPath("billing/FA-".$value->getDateRefresh()->format('Y-m')."-".$user->getId().".pdf");
$message->attach($attachment);
$transport = \Swift_MailTransport::newInstance();
$mailer = \Swift_Mailer::newInstance($transport);
$this->getContainer()->get('mailer')->send($message);
Thanks you for your answers !
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.
I have the following code to send mails:
/* Emails */
$message = \Swift_Message::newInstance()
->setSubject('Ihre Sammelrechnung')
->setFrom("xxx#myserver.com")
->setTo("recipient#gmail.com")
->setBody(
$this->renderView(
'email/invoiceMultiFinal.html.twig', array(
'company' => 'COMPANY',
)
),
'text/html'
);
/* Send eMail */
if(!$this->get('mailer')->send($message)){
die("ERROR");
}
I know 100% that sender an recipient are correct. In my Logs I have:
{"message":"Exception occurred while flushing email queue: Failed to authenticate on SMTP server with username \"xxx#myserver.com\" using 1 possible authenticators","context":[],"level":400,"level_name":"ERROR","channel":"app","datetime":{"date":"2016-05-31 15:19:09.919207","timezone_type":3,"timezone":"Europe/Berlin"},"extra":[]}
config.yml
swiftmailer:
transport: "%mailer_transport%"
host: "%mailer_host%"
username: "%mailer_user%"
password: "%mailer_password%"
spool: { type: memory } #Deleting this changes nothing
parameters.yml
parameters:
mailer_transport: smtp
mailer_host: 127.0.0.1
mailer_user: xxx#myserver.com # adding "" doesn't change sth either
mailer_password: password
secret: xxxxxxx
I am using my own server, so no Gmail etc. involved. I can send and receive emails through the webmailer AND through php bin/console swiftmailer:email:send
Any ideas what can cause such behaviour? Side note, it worked like a charm for almost a month! It stopped today, possibly related to a reboot!
I have my website in production, with Hostinger, and with the same parameters and config I can't send emails in production but I could in developing mode. I have changed the parameters and config files with others settings I have seen in other questions but with no success. Anyway, the error I get is the following:
Connection could not be established with host smtp.gmail.com
[Connection timed out #110] 500 Internal Server Error -
Swift_TransportException
My parameters.yml file:
parameters:
...
mailer_transport: gmail
mailer_encryption: ssl
mailer_auth_mode: login
mailer_host: smtp.gmail.com
mailer_user: xxxxx#gmail.com
mailer_password: xxxx
...
My config.yml file:
# Swiftmailer Configuration
swiftmailer:
transport: gmail
host: smtp.gmail.com
username: xxxxx#gmail.com
password: xxxx
My controller file:
public function kontaktuaAction()
{
$kontaktua = new Kontaktua();
$form = $this->createForm(new KontaktuaType(), $kontaktua);
$request = $this->getRequest();
if ($request->getMethod() == 'POST') {
$form->bind($request);
if ($form->isValid()) {
$message = \Swift_Message::newInstance()
->setSubject($kontaktua->getGaia())
->setTo('xxxxx#gmail.com')
->setFrom($kontaktua->getEmaila())
->setBody($kontaktua->getIzena().'(e)k, email helbidea '.$kontaktua->getEmaila().' duena hurrengo mezu hau'.
' bidali dizu: '.$kontaktua->getMezua());
$this->get('mailer')->send($message);
return $this->redirect($this->generateUrl('kontaktua'));
}
}
return $this->render('TaldeaBundle:Default:kontaktua.html.twig', array(
'form' => $form->createView()
));
}
The following settings works for me:
config.yml under swiftmailer
encryption: ssl
auth_mode: login
parameters.yml:
mailer_transport: smtp
mailer_host: smtp.gmail.com
mailer_user: #gmail_user_name
mailer_password: #gmail_password
I am trying to send an email from some user to the site owner.
I use swiftmailer Bundle of Symfony. this is my code:
Controller
$mailTo = $this->container->getParameter('mailer_user');
$mailFrom = $message->getEmail();
$mail = Swift_Message::newInstance()
->setSubject('Contact ' . $message->getCountry() . ' from Lemarquis')
->setFrom($mailFrom)
->setTo($mailTo)
->setBody($this->renderView(
'WsMailerBundle:Email:message1.html.twig', array(
'message' => $message)))
->setContentType('text/html');
$this->get('mailer')->send($mail);
app/config.yml
swiftmailer:
transport: %mailer_transport%
encryption: %mailer_encryption%
auth_mode: %mailer_auth_mode%
port: %mailer_port%
host: %mailer_host%
username: %mailer_user%
password: %mailer_password%
app/parameters.yml
parameters:
database_driver: pdo_mysql
database_host: localhost
database_port: null
database_name: ...
database_user: ...
database_password: ...
mailer_transport: smtp
mailer_encryption: ssl
mailer_port: 465
mailer_auth_mode: login
mailer_host: smtp.gmail.com
mailer_user: someaddress#somedomain.tn
mailer_password: somepwd
The problem is that e-mail is sent from %mailer_user% to %mailer_user%, even with different user addresses.
->setFrom($mailFrom)
You can use this to overwrite %mailer_user% in "FROM" field, however email will still be send from %mailer_user%. This field should be used only to add name of the sender, not to change his email address.
If You still want to change shown email You can try, but You can have problems on many servers (for example GMAIL is blocking that option: How to set 'FROM' property using Swiftmailer with Gmail? ).