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('no-reply@mysite.com')
            ->setTo('email@mysite.com')
            ->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());
}
Shawn Northrop
  • 5,826
  • 6
  • 42
  • 80
  • 1
    If you want the profiler to show sent mails you have to remove the redirect. – Hubert Perron Apr 03 '12 at 20:23
  • 1
    I have not set up a mail server... Any suggestions on servers / documentation for this? I am running ubuntu. – Shawn Northrop Apr 04 '12 at 02:29
  • @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. – Flukey Apr 04 '12 at 12:58
  • 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? – Shawn Northrop Apr 04 '12 at 19:00
  • 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 made – Shawn Northrop Apr 04 '12 at 19:02
  • My problem was trying to send an email from within a test which uses the test config, which defines `disable_delivery: true` by default – Pierre de LESPINAY Jun 13 '17 at 13:03

7 Answers7

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%
Marcos Labad
  • 1,123
  • 10
  • 11
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.

smentek
  • 2,820
  • 1
  • 28
  • 32
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

AntonioCS
  • 8,335
  • 18
  • 63
  • 92
Milos Cuculovic
  • 19,631
  • 51
  • 159
  • 265
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
Dieter
  • 1,690
  • 2
  • 15
  • 28
  • Nope, I checked and I have not disabled. This is also happening on production – Shawn Northrop Apr 05 '12 at 23:49
  • 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) – Dieter Apr 06 '12 at 09:38
  • 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 logs – Shawn Northrop Apr 09 '12 at 00:47
  • 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. – Dieter Apr 10 '12 at 08:23
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.

Chintan Panchal
  • 311
  • 5
  • 11
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:        noreply@yourdomain.com
            sender_name:    yourname

If you don't do this, fos user bundle will send the email with noreply@exemple.com and OVH flag this as spam.

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

0x1gene
  • 3,349
  • 4
  • 29
  • 48
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('username@xx.eu')
            ->setTo('xxx@stackoverflow.eu')
            ->setBody('message');
$this->get('mailer')->send($messageObject);
websky
  • 3,047
  • 1
  • 33
  • 31