Symfony2 Swiftmailer Not Sending
Asked Answered
E

7

20

I am having trouble sending emails with symfony2 and swiftmailer. I am also a bit lost on how to debug this issue. Below is the code. First I am creating a form to display. On submit (request->method == post) I then try to send the email. I am getting no errors and it is taking me to the thankyou page, however, I am not receiving any email. I have tested on prod and dev. In dev I have opened the profiler after submission and it shows 0 emails. Any help is appreciated! Thanks!

public function contactAction(Request $request)
{
    $defaultData = array('name' => 'Name', 'email' => 'Email', 'subject' => 'Subject', 'message' => 'Message');
    $form = $this->createFormBuilder($defaultData)
        ->add('name', 'text')
        ->add('email', 'email')
        ->add('subject', 'text')
        ->add('message', 'textarea')
        ->getForm();

    if($request->getMethod() == 'POST') {
        $form->bindRequest($request);
        $data = $form->getData();
        $message = \Swift_Message::newInstance()
            ->setSubject($data['subject'])
            ->setFrom('[email protected]')
            ->setTo('[email protected]')
            ->setBody($this->renderView('AdaptiveSiteBundle:Default:email.txt.twig', array('name' => $data['name'], 'message' => $data['message'])))
        ;
        $this->get('mailer')->send($message);

        return $this->redirect($this->generateUrl('thankyou'));
    } 

    return array("form" => $form->createView());
}
Equipoise answered 3/4, 2012 at 20:20 Comment(6)
If you want the profiler to show sent mails you have to remove the redirect.Myrica
I have not set up a mail server... Any suggestions on servers / documentation for this? I am running ubuntu.Equipoise
@ShawnNorthrop How is it going to send emails if it hasn't got a mail server configured? Easiest suggestion: Configure swiftmail to send emails via gmails servers.Marisolmarissa
The emails should be going out through godaddy. I have set this up as documented for godaddy smtp. I was unsure if i needed a mail server locally on top of this?Equipoise
Part of my problem is I see no logs or ways to debug this. I'm not sure if the connection / request to godaddy is ever being madeEquipoise
My problem was trying to send an email from within a test which uses the test config, which defines disable_delivery: true by defaultPesticide
G
10

You can find here the entire procedure on how to send emails with symfony2. I just tested it at it seems to work fine.

http://tutorial.symblog.co.uk/docs/validators-and-forms.html#sending-the-email

http://symfony.com/doc/current/email.html

Guillermoguilloche answered 19/9, 2012 at 7:28 Comment(4)
Good tutorial, the Gmail is working for me but I've not been able to use the default localhost config.Pesticide
It's working on my local server but not on the distant server (online), what should I do ???Lysis
Check your distant server parameters for the swiftmailer. Maybe you have custom params for the dev and prod environments.Guillermoguilloche
Thanks for the reference. It's just too bad that things described on the Symfony website only work 20% of the time.None
K
25

Can you post parameters.yml?

Also ensure that spooling is disabled so the email can be instantly sent. If you have a spool entry under the Swiftmailer configuration, delete it, for example:

swiftmailer:
    transport: %mailer_transport%
    host:      %mailer_host%
    username:  %mailer_user%
    password:  %mailer_password%
    spool:     { type: memory }

Should be:

swiftmailer:
    transport: %mailer_transport%
    host:      %mailer_host%
    username:  %mailer_user%
    password:  %mailer_password%
Kopje answered 9/10, 2013 at 22:18 Comment(1)
Thanks I could not see the error (Connection could not be established with host)Outguard
E
13

You may have mail spooling set. If it is a case you need to run:

php app/console swiftmailer:spool:send

to send spooled emails.

Check http://symfony.com/doc/master/cookbook/email/spool.html for more.

Eudemonics answered 11/4, 2013 at 6:51 Comment(0)
G
10

You can find here the entire procedure on how to send emails with symfony2. I just tested it at it seems to work fine.

http://tutorial.symblog.co.uk/docs/validators-and-forms.html#sending-the-email

http://symfony.com/doc/current/email.html

Guillermoguilloche answered 19/9, 2012 at 7:28 Comment(4)
Good tutorial, the Gmail is working for me but I've not been able to use the default localhost config.Pesticide
It's working on my local server but not on the distant server (online), what should I do ???Lysis
Check your distant server parameters for the swiftmailer. Maybe you have custom params for the dev and prod environments.Guillermoguilloche
Thanks for the reference. It's just too bad that things described on the Symfony website only work 20% of the time.None
S
6

I often set the following configuration in config_dev.yml to -prevent- mails being sent during testing, maybe you have done the same and forgot?

If this is in config_dev.yml, set it to false:

swiftmailer:
  disable_delivery:  true
Spermatid answered 5/4, 2012 at 12:32 Comment(4)
Nope, I checked and I have not disabled. This is also happening on productionEquipoise
Another long shot, but I often have no errors showing up in my Sf2 logs, which do show up in /var/log/apache2/error.log, see anything there? (Sorry, as I said, long shot)Spermatid
After removing the redirect, I am seeing that an email is being sent through the profiler.. I am still not receiving it though. Nothing in the apache, php, or symfony logsEquipoise
Sorry m8, not a clue then. Maybe try changing to gmail sending instead of smtp, so you can at least see if everything works like that. If it does, check out the smtp settings on both end, you and GoDaddy.Spermatid
H
5

Apart from the above solution, I suggest you to remove die or exit from the function where you use the swiftmailer code. This will fix your problem if your code is proper.

Heterogenous answered 10/8, 2016 at 6:58 Comment(2)
Replacing the quick & dirty die() with return new Response() worked for me. Thanks!Orpine
Thanks for saving my timeTwila
H
0

I you have trouble receiving email with ovh, siwftmailer and fosUserBundle,

please consider adding this in your config.yml

fos_user:
    from_email:
            address:        [email protected]
            sender_name:    yourname

If you don't do this, fos user bundle will send the email with [email protected] and OVH flag this as spam.

source: https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Resources/doc/emails.md

Halfon answered 6/6, 2014 at 16:19 Comment(0)
C
0

config.yml

# Swiftmailer Configuration
swiftmailer:
    transport:  smtp
    encryption: ssl
    auth_mode:  login
    host:       smtp.xx.eu
    username:   username
    password:   password 

controller/action

$messageObject = \Swift_Message::newInstance()
            ->setSubject('Subject')
            ->setFrom('[email protected]')
            ->setTo('[email protected]')
            ->setBody('message');
$this->get('mailer')->send($messageObject);
Cycling answered 28/4, 2015 at 7:55 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.