sender mail isn't the chosen with symfony2 - php

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? ).

Related

Sending mail with swiftmailer via OVH mail

I want to send confirmation email to users. I did install swiftmailer with composer and these are my configuration in parameters. yml and config.yml
parameters:
database_host: 127.0.0.1
database_port: null
database_name: xxxx
database_user: root
database_password: root
mailer_transport: smtp
mailer_host: 127.0.0.1
mailer_user: xxxxx#xxxxxx.com
mailer_password: xxxx
secret: ea293ee3152cb8522e591a6cb821f950cc67f499
spool:
type: file
mailer_port: 587
mailer_encryption: tls
mailer_logging: '%kernel.debug%'
config.yml
swiftmailer:
transport: '%mailer_transport%'
host: '%mailer_host%'
username: '%mailer_user%'
password: '%mailer_password%'
spool: { type: memory }
I added this code to my controller and I tested but nothing sent:
$message = \Swift_Message::newInstance()
->setSubject('hello')
->setFrom('example#gmail.com')
->setTo('xx.xx#xxx.tn')
->setBody('#servicom/pages/profile_commercial.html.twig', 'text/html');
# Send the message
$this->get('mailer')
->send($message);
I want to ask if the problem is from the configuration or from the code.
Thanks in advance.
See if you need some other parameters like encryption (typicaly tls) or port (generaly 587).
Documentation for adding properties there
Finally i fixed the issue by debugging first then adding the ini_set() so i share this solution :
Parameters.yml :
parameters:
database_host: 127.0.0.1
database_port: null
database_name: xxxxx
database_user: root
database_password: root
mailer_transport: smtp
mailer_host: ssl0.ovh.net
mailer_user: xxxx#myhost.com
mailer_password: toguess
encryption: ssl
auth_mode: login
secret: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Add this to the function send :
ini_set('SMTP','ssl0.ovh.net');
ini_set('smtp_port',587);
And this for the Debug :
if ( $this->get('mailer')->send($message)) {
echo '[SWIFTMAILER] sent email to ' . 'malek.zarkouna#esprit.tn';
echo '' . $mailLogger->dump();
} else {
echo '[SWIFTMAILER] not sending email: ' . $mailLogger->dump();
}

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.

Swiftmailer sending from console but not from PHP

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!

Send email with symfony2

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

When using Gmail for SMTP, can you set a different "from" address?

I am using Swift Mailer 406 for sending emails. I connect to my smtp.gmail.com account and then I do:
->setFrom(array($from => $fromname))
But the emails sent got the original gmail account email.
Can I change it?
gmail doesn't allow you to use random From addresses. You have to add and validate the address you'd like to use in the gmail settings:
Settings -> Accounts -> Send mail as -> Add another email address you own
$email=$entity->getEmail();
->setFrom(array('your fix adress#gmail.com' => $email))
In your Parameters.yml you should make this configuration:
parameters:
database_host: 127.0.0.1
database_port: null
database_name: your db name
database_user: root
database_password: null
mailer_transport: smtp
mailer_host: smtp.gmail.com
mailer_user: your fix adress#gmail.com
mailer_password: your password of your fix adress
mailer_port: 465
mailer_encryption: ssl
auth_mode: login
secret: 3556f3fb752a82ce0ee9c419ef793b7a707f324a
And in your contact controller you should add this to fix setfrom() function of swiftmailer:
if ($form->isValid()) {
$em = $this->getDoctrine()->getManager();
$subject = $entity->getSubject();
$name=$entity->getName();
$email=$entity->getEmail();
$body=$entity->getBody();
$message = \Swift_Message::newInstance('here')
->setSubject("Shoppify email from ".$name." Subject ".$subject)
->setFrom(array('your fix adress#gmail.com' => $email))
->setTo('your adress destionation#example.com')
->setBody($body);
$this->get('mailer')->send($message);
$em->persist($entity);
$em->flush();
return $this->redirect($this->generateUrl('email_sended'));
}

Categories