Проведя 2 дня, пытаясь заставить его работать, я, наконец, решил спросить здесь. Я пытаюсь создать электронное письмо после того, как пользователь представит форму контакта, прочитав документацию на веб-сайте Symfony и бесчисленные другие статьи о stackoverflow и google. Я просто не могу заставить его работать. Глядя на инструкцию, похоже, что она должна быть довольно прямой, но ни одно из решений не работает. Я пытался отправлять электронные письма через Gmail и через нашу SMTP-компанию, но оба не работали
Это мои текущие parameters.yml
swiftmailer: transport: smtp username: username (confirmed that i am entering it right) password: password (confirmed that i am entering it right) host: mail.domain.com port: 26 auth_mode: login
Вышеупомянутая настройка не дает никакой ошибки, она просто представляет форму и отображает сообщение об успешном завершении, но письма не получаются
Я даже попробовал несколько других комбинаций, подобных приведенным ниже, используя Gmail, но это возвращает ошибку аутентификации пользователя, я все время уверенно повторял, что я ввожу нужные данные для входа и 100% уверены, что они верны, потому что через браузер я могу войти в систему.
config.yml:
swiftmailer: transport: %mailer_transport% encryption: %mailer_encryption% auth_mode: %mailer_auth_mode% host: %mailer_host% username: %mailer_username% password: %mailer_password% spool: { type: memory }
parameters.yml:
mailer_transport: smtp mailer_encryption: ssl mailer_auth_mode: login mailer_host: smtp.gmail.com mailer_username: myusername@gmail.com mailer_password: mypassword
Это то, что выглядит мой контроллер, который генерирует электронную почту
public function indexAction(Request $request) { $enquiry = new Enquiry(); $form = $this->createForm(new EnquiryType(), $enquiry); $form->handleRequest($request); if ($form->isValid()) { $message = \Swift_Message::newInstance() ->setSubject('Contact enquiry') ->setFrom('username@domain.com') ->setTo('username@domain.com') ->setBody( $this->renderView('ContactBundle:Default:contactEmail.txt.twig', array('enquiry' => $enquiry)) ); //print_r($message); $this->get('mailer')->send($message); $this->get('session')->getFlashBag()->add( 'notice', 'Your contact enquiry was successfully sent. Thank you!' ); return $this->redirect($this->generateUrl('contact_form')); } return $this->render( 'ContactBundle:Default:contact.html.twig', array( 'form' => $form->createView() ) ); }
Поpublic function indexAction(Request $request) { $enquiry = new Enquiry(); $form = $this->createForm(new EnquiryType(), $enquiry); $form->handleRequest($request); if ($form->isValid()) { $message = \Swift_Message::newInstance() ->setSubject('Contact enquiry') ->setFrom('username@domain.com') ->setTo('username@domain.com') ->setBody( $this->renderView('ContactBundle:Default:contactEmail.txt.twig', array('enquiry' => $enquiry)) ); //print_r($message); $this->get('mailer')->send($message); $this->get('session')->getFlashBag()->add( 'notice', 'Your contact enquiry was successfully sent. Thank you!' ); return $this->redirect($this->generateUrl('contact_form')); } return $this->render( 'ContactBundle:Default:contact.html.twig', array( 'form' => $form->createView() ) ); }
Я буду очень признателен, если я получу какую-то помощь здесь, поскольку сейчас я совершенно не знаю.
Я получил его для работы на SMTP и Gmail на базе компании
Для компании SMTP
config.yml:
swiftmailer: transport: %mailer_transport% encryption: %mailer_encryption% auth_mode: %mailer_auth_mode% host: %mailer_host% username: %mailer_username% password: %mailer_password% spool: { type: memory }
parameters.yml:
mailer_transport: smtp mailer_host: mail.domain.com mailer_user: username@domain.com mailer_password: password
Для настроек Gmail config.yml
остаются неизменными, но в parameters.yml
делают следующее изменение
mailer_transport: gmail mailer_host: smtp.gmail.com mailer_user: username@gmail.com mailer_password: password
Затем перейдите по этой ссылке google, чтобы разрешить приложениям входить в ваш аккаунт для отправки писем. Вы также можете просмотреть любую подозрительную активность входа в систему, используя эту ссылку
Заметка:
В вашем контроллере, где вы говорите, что функция отправки электронной почты ->setFrom('username@gmail.com')
должна соответствовать идентификатору электронной почты, который генерирует электронное письмо, иначе вы не получите электронное письмо, я посмотрел это и потратил впустую 2 дня в теме.
$message = \Swift_Message::newInstance() ->setSubject('Contact enquiry') ->setFrom('username@gmail.com') \\match this to mailer_user in parameters.yml ->setTo('username@gmail.com') ->setBody( $this->renderView('ContactBundle:Default:contactEmail.txt.twig', array('enquiry' => $enquiry)) );
Вот как я получил работу 🙂 наконец, надеюсь, это поможет кому-то застрять. Я могу подтвердить, что это решение работает для меня как на сервере разработки, так и на производстве.