Потратив 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: [email protected]
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('[email protected]')
->setTo('[email protected]')
->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: [email protected]
mailer_password: password
Для Gmail config.yml
настройки остаются прежними, но в parameters.yml
внести следующие изменения
mailer_transport: gmail
mailer_host: smtp.gmail.com
mailer_user: [email protected]
mailer_password: password
Тогда посетите это ссылка на сайт Google, чтобы приложения могли войти в свой аккаунт для отправки почты.
Вы также можете просмотреть любую подозрительную активность входа в систему с помощью этого ссылка на сайт
Замечания:
В вашем контроллере, где вы говорите функцию для отправки электронной почты ->setFrom('[email protected]')
должен совпадать с идентификатором электронной почты, который генерирует письмо, в противном случае вы не получите письмо, я просмотрел это и потратил на него 2 дня.
$message = \Swift_Message::newInstance()
->setSubject('Contact enquiry')
->setFrom('[email protected]') \\match this to mailer_user in parameters.yml
->setTo('[email protected]')
->setBody(
$this->renderView('ContactBundle:Default:contactEmail.txt.twig', array('enquiry' => $enquiry))
);
Вот так у меня все получилось 🙂 наконец-то, надеюсь, это поможет кому-то застрять. Я могу подтвердить, что это решение работает для меня как на сервере разработки, так и на рабочем сервере.
Других решений пока нет …