2012-04-03 4 views
18

У меня возникли проблемы с отправкой писем с symfony2 и swiftmailer. Я также немного потерял, как отладить эту проблему. Ниже приведен код. Сначала я создаю форму для отображения. На submit (request-> method == post) я попытаюсь отправить электронное письмо. Я не получаю никаких ошибок, и он забирает меня на страницу thankyou, однако я не получаю никаких писем. Я тестировал на prod и dev. В dev я открыл профилировщик после отправки, и он показывает 0 сообщений электронной почты. Любая помощь приветствуется! Благодаря!Symfony2 Swiftmailer Отправка

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()); 
} 
+1

Если вы хотите, чтобы профайлер показывал отправленные письма, вам необходимо удалить перенаправление. –

+0

Вы настроили почтовый сервер? – Flukey

+1

Я не настроил почтовый сервер ... Любые предложения по серверам/документации для этого? Я бегу ubuntu. –

ответ

9

Вы можете найти здесь всю процедуру о том, как отправлять письма с Symfony2. Я просто тестировал его, кажется, он работает нормально.

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

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

+0

Хороший учебник, Gmail работает для меня, но я не смог использовать конфигурацию localhost по умолчанию. –

+0

Он работает на моем локальном сервере, но не на удаленном сервере (онлайн), что мне делать ??? – krachleur

+1

Проверьте параметры удаленного сервера для swiftmailer. Возможно, у вас есть настраиваемые параметры для сред dev и prod. –

4

Я часто устанавливают следующую конфигурацию в config_dev.yml для -prevent- письма отправляются во время тестирования, может быть, вы сделали то же самое и забыл?

Если это в config_dev.yml, установите его ложь:

swiftmailer: 
    disable_delivery: true 
+0

Нет, я проверил и Я не отключен. Это также происходит при производстве –

+0

Еще один длинный снимок, но у меня часто нет ошибок, появляющихся в моих журналах Sf2, которые появляются в /var/log/apache2/error.log, что-то там есть? (Извините, как я уже сказал, длинный снимок) – Dieter

+0

После удаления перенаправления я вижу, что через профилировщик отправляется электронное письмо. Я все еще не получаю его. Ничего в журналах apache, php или symfony –

13

Вы можете иметь множество почты спулинга. Если это случай, вам необходимо запустить:

php app/console swiftmailer:spool:send 

для отправки буферизованных сообщений.

Проверьте, пожалуйста, http://symfony.com/doc/master/cookbook/email/spool.html.

22

Можете ли вы публиковать параметры.yml?

Также убедитесь, что буферизация отключена, поэтому электронное письмо может быть немедленно отправлено. Если у вас есть запись катушки под конфигурацию SwiftMailer, удалите его, например:

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

Должно быть:

 
swiftmailer: 
    transport: %mailer_transport% 
    host:  %mailer_host% 
    username: %mailer_user% 
    password: %mailer_password% 
+2

Это работает для меня, поскольку я использую транспорт gmail – Rocco

+0

Спасибо, я не мог видеть ошибку (Не удалось установить соединение с узлом) – arsenik

0

Я у вас есть проблемы с получением электронной почты с OvH, siwftmailer и fosUserBundle,

пожалуйста, рассмотреть вопрос о добавлении это в config.yml

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

Если вы не делаете это, fos user bundle отправит электронное письмо с [email protected], а OVH отметит это как спам.

источник: https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Resources/doc/emails.md

0

config.yml

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

контроллер/действие

$messageObject = \Swift_Message::newInstance() 
      ->setSubject('Subject') 
      ->setFrom('[email protected]') 
      ->setTo('[email protected]') 
      ->setBody('message'); 
$this->get('mailer')->send($messageObject); 
4

Помимо вышеуказанного решения, я предлагаю вам удалить die или exit из функции, где ты используйте код swiftmailer. Это исправит вашу проблему, если ваш код правильный.

+0

Замена быстрого и грязного 'die()' с помощью 'return new Response()' работала для меня. Благодаря! –

+0

Спасибо, что сэкономили мое время –

Смежные вопросы