Nonexistent parameter in Swiftmailer - symfony

In an attempt to configure both a memory & a spool mailer in a Symfony 4.3 application I followed the docs to create this configuration:
swiftmailer:
default_mailer: memory
mailers:
memory:
sender_address: 'admin#bogus.info'
transport: smtp
username: admin#bogus.info
password: 123Abcd
host: localhost
spool: { type: 'memory' }
spooler:
sender_address: 'admin#bogus.info'
transport: smtp
username: admin#bogus.info
password: 123Abcd
host: localhost
spool:
type: file
path: '%kernel.project_dir%/var/spool'
And in services.yaml:
App\Services\Emailer:
$spoolMailer: '%swiftmailer.mailer.spooler%'
$defaultMailer: '%swiftmailer.default_mailer%'
$senderAddress: '%swiftmailer.mailer.memory_mailer.sender_address%'
$projectDir: '%kernel.project_dir%'
But with those four parameters in the service the following occurs with php bin/console debug:container:
The service "App\Services\Emailer" has a dependency on a non-existent
parameter "swiftmailer.mailer.spooler"...
Why does this configuration not work?

The service "App\Services\Emailer" has a dependency on a non-existent parameter "swiftmailer.mailer.spooler"...
Surrounding parameters with the % symbol allows you to pass values to your services.
As you want to inject a service, you should prefix your parameter with the # symbol.
Also, to get the default mailer service, you have to inject #swiftmailer.mailer
EDIT: Proper way to retrieve the sender address: %swiftmailer.mailer.memory.sender_address%
Updated service definition :
App\Services\Emailer:
$spoolMailer: '#swiftmailer.mailer.spooler'
$defaultMailer: '#swiftmailer.mailer'
$senderAddress: '%swiftmailer.mailer.memory.sender_address%'
$projectDir: '%kernel.project_dir%'

Related

Can't send E-Mails with symfony and swiftmailer using SMTP Server

when I try to send an e-Mail I get the error:
Exception occurred while flushing email queue: Connection could not be
established with host w00d8ef1.kasserver.com [ #0]
.env
MAILER_URL=smtp://w00d8ef1.kasserver.com:25?encryption=ssl&auth_mode=login&username=myusername&password=mypassword
swiftmailer.yaml
swiftmailer:
url: '%env(MAILER_URL)%'
spool: { type: 'memory' }
Controller:
$message = (new Swift_Message('Test'))
->setFrom('info#lama.resper.de')
->setTo($user->getEmail())
->setBody(
$this->renderView(
'pdf/usercard.html.twig',
['user' => $user]
),
'text/html'
)
;
$mailer->send($message);
Hope someone can help me. The Mailserver is running.
Are you sure that you are using the right port number for smtp? Generally, it runs on 465 or 587. So, try to change the port number in your MAILER_URL env variable.
symfony 4.3
try .env file loks like
MAILER_URL=smtp://YOURDOMAIN.COM:465?encryption=ssl&auth_mode=login&username=USEREMAIL#DOMAIN.COM&password=YOURPASSWORD
in config/packages/dev/swiftmailer.yaml (for dev env)
insert:
swiftmailer:
transport: smtp
username: user#domain.pl
password: 'yourpasswor{$##'
host: mail.yourdomain.pl
port: 465
encryption: ssl
auth-mode: login
spool: { type: 'memory' }
stream_options:
ssl:
allow_self_signed: true
verify_peer: false
verify_peer_name: false
use
php bin/console debug:config swiftmailer
to checkout your config
same for production yaml file (but ssl shoud not be self signed)

mailer does not work on prod with the same settings as on dev

Basically after changing from Dev to Prod on Symfony, the mailer stopped sending mails to given email.
Posting few settings from my Symfony:
parameters:
mailer_transport: smtp
mailer_port: 465
mailer_host: myhost
mailer_user: mylogin
mailer_password: mypw
config:
# Swiftmailer Configuration
swiftmailer:
transport: '%mailer_transport%'
host: '%mailer_host%'
port: '%mailer_port%'
username: '%mailer_user%'
password: '%mailer_password%'
spool: { type: memory }
logging: true
# delivery_addresses: ['']
It looks correctly for me. The website uses SSL if that matters. Is there anything to change/edit? Do you need any other code to assist me with?

i cant send email symfony3 neither to confirm registration or for a simple email

Im developping a web application using symfony3 , i'm trying to send confirmation emails using swiftmailer , i want to use confirmation mails and resetting also send direct emails between the users of my app.
Unfortunately i didn't managed to do it yet.
Here is my configs files also the code that i use to send direct mails
Here is my parameter.yml
mailer_transport: gmail
mailer_host: smtp.gmail.com
mailer_auth_mode: login
mailer_user: ***********
mailer_password: ********
mailer_encryption: ssl
Here is my code config.yml
swiftmailer:
transport: '%mailer_transport%'
host: '%mailer_host%'
encryption: ssl
username: '%mailer_user%'
auth_mode: login
password: '%mailer_password%'
spool: { type: memory }
fos_user:
db_driver: orm
firewall_name: main
user_class: AppBundle\Entity\User
registration:
confirmation:
enabled: true
from_email:
address: *****e#gmail.com
sender_name: ........
from_email:
address: ******#gmail.com
sender_name: ......
my code to send email
$mailer = $this->get('mailer');
$message = $mailer->createMessage()
->setSubject("Objet")
->setFrom(array('................' => "...."))
->setTo('..........)
->setBody("Hi");
$mailer->send($message);
Here is my parameters file:
mailer_transport: gmail
mailer_host: gmail
mailer_user: ************
mailer_password: **********
And here is my config file section for swiftmailer:
# Swiftmailer Configuration
swiftmailer:
transport: "%mailer_transport%"
host: "%mailer_host%"
username: "%mailer_user%"
password: "%mailer_password%"
spool: { type: memory }
I use dual verification in Gmail so I generated a application specific password,
this is where you can see how to set one.
This is how I send emails from my controller:
private function sendConfirmationEmail($user)
{
$token = $user->getEmailConfirmationToken();
$subject = 'Email Confirmation';
$label = 'Confirm Email';
$email = $user->getEmail();
$href = "www.mysymfonyproject.com/app_dev.php/confirm?token=" . $token;
$message = \Swift_Message::newInstance()
->setSubject($subject)
->setFrom('myemail#gmail.com')
->setTo( $email )
->setBody(
$this->renderView(
'Emails/confirm.html.twig',
array('href' => $href)
),
'text/html'
);
$this->get('mailer')->send($message);
return true;
}
Also, I see something slightly odd in your config file, it seems you set your "auth_mode" and "encryption" twice both in your parameters.yml and your config.yml.
Your config.yml file includes your parameters.yml file which is like your parameters.yml get copy-pasted to the config file and in the config file you have mailer settings where some values are pointers to pre set values and other are just values, %mailer_password% points to mailer_password parameter value which gets included from the parameters file. It's nothing complicated it's just YML and inclusion. Since you already defined all parameters in the parameters.yml all you need to do in config.yml is to point to them and you can do so by changing your config.yml section for mailer to look like this:
transport: "%mailer_transport%"
host: "%mailer_host%"
encryption: "%mailer_encryption%"
username: "%mailer_user%"
auth_mode: "%mailer_auth_mode%"
password: "%mailer_password%"
spool: { type: memory }
Or just copy my application settings and give it a try. A YML developers greeting "Good Luck :)"
PS. YML has to have proper indentation and the suggested edit of your config file is probably not indented correctly so indent it manually.

swiftmailer does not send emails

I want to send emails using symfony, but the swiftmailer does not send out any emails. I even dont get error reportings or anything else. Thats my code:
$mail = \Swift_Message::newInstance()
->setSubject('Subject')
->setTo('test#example.com') #this is replaced by real email of course
->setFrom('test#example.com')
->setBody('Testbody');
$this->get('mailer')->send($mail);
Thats the config:
swiftmailer:
default_mailer: mailer
mailers:
mailer:
transport: "%mailer_transport%"
host: "%mailer_host%"
username: "%mailer_user%"
password: "%mailer_password%"
#spool: { type: memory }
I even tried to set the host to an address that does not exist, but I dont get any error from swiftmailer or symfony.
I tried to find the files for the lib, but there is no Swift_Message or newInstance anywhere in the symfony files, strange
use this code
$message = \Swift_Message::newInstance()
->setSubject('Validation de votre commande')
->setFrom('test#example.com')
->setTo('test#example.com')
->setBody('Testbody');
->setCharset('utf-8')
->setContentType('text/html')
->setBody('test');
$this->get('mailer')->send($message);
in app/config/parametres.yml :
mailer_transport: gmail
mailer_host: smtp.gmail.com
mailer_user: your mail
mailer_password: your password mail
in app/config/config.yml :
# Swiftmailer Configuration
swiftmailer:
transport: "%mailer_transport%"
host: "%mailer_host%"
username: "%mailer_user%"
password: "%mailer_password%"
spool: { type: memory }
I had seen someone with the same problem. For him the problem was with the spool queue. It is solved by either disabling spool explicitly:
spool:
enabled:false
or flushing the queue in the code:
$this->get('mailer')->send($mail);
$spool = $this->get('mailer')->getTransport()->getSpool();
$spool->flushQueue($this->get('mailer')->getTransport());
Hope it works!

Sendmail and SwiftMailerBundle on Symfony2

Hello I am using Symfony2 and the SwiftMailerBundle, when i was using gmail like my transport, was so easy, but now i need use sendmail.
Here is the part of my parameters.yml
mailer_transport: sendmail
mailer_host: /usr/sbin/sendmail
mailer_user: no-replay#mysite.com
mailer_password: null
And here is the config.yml:
# Swiftmailer Configuration
swiftmailer:
transport: "%mailer_transport%"
host: "%mailer_host%"
username: "%mailer_user%"
password: "%mailer_password%"
spool: { type: memory }
// Create the Transport
$transport = Swift_SendmailTransport::newInstance('/usr/sbin/exim -bs');
// Create the Mailer using your created Transport
$mailer = Swift_Mailer::newInstance($transport);
as per the documentation :
http://swiftmailer.org/docs/sending.html#using-the-sendmail-transport
you need to create a Swift_SendmailTransport first then instantiate your mailer with it.
This question may help : Configure Symfony2/Swiftmailer to use "sendmail -t"

Resources