给定 [Doctrine\ORM\Query_state] 邮箱中的地址不符合 RFC 2822, 3.6.2
Address in mailbox given [Doctrine\ORM\Query_state] does not comply with RFC 2822, 3.6.2
我正在 symfony
下开发博客并使用 swiftMailer
发送电子邮件。
我在我的控制器中使用此代码发送给我的所有用户,以警告他们添加了新文章,但问题是它向我显示了一条错误消息。
我的控制器:
/**
* @Route("/admin/ajout")
* @param Request $request
* @return Response
* @throws \Exception
*/
public function add(Request $request, \Swift_Mailer $mailer): Response {
$article = new Articles();
$addArticle = $this->createForm(ArticlesType::class, $article);
$addArticle->handleRequest($request);
$info = $this->getDoctrine()->getRepository(InfoMore::class)->findByInfo(2);
$em = $this->get('doctrine.orm.entity_manager');
$dql = "SELECT email FROM App:user";
$query = $em->createQuery($dql);
if($addArticle->isSubmitted() && $addArticle->isValid()) {
$article = $addArticle->getData();
$manager = $this->getDoctrine()->getManager();
$manager->persist($article);
$manager->flush();
$message = (new \Swift_Message('Un nouvelles articles est publier'))
->setFrom('contact@al-houria.com')
->setTo($query)
->setBody(
$this->renderView(
'email/article_publish.html.twig'
),
'text/html'
)
;
$mailer->send($message);
$this->addFlash('article', 'L\'article a bien étais ajouter');
return $this->redirectToRoute('app_backoffice_admin');
}
return $this->render('backOffice/CRUD/add.html.twig', [
'title' => 'Ajouter un article a votre blog',
'info' => $info,
'addArticle' => $addArticle->createView()
]);
}
和消息错误:
Address in mailbox given [Doctrine\ORM\Query_state] does not comply with RFC 2822, 3.6.2
它告诉我地址无效,在这种情况下如何添加多个电子邮件地址?
感谢您的帮助!
假设您的用户实体在 App\Entity\User
中,您可以 select 这个:
$emails = $em
->createQuery('SELECT u.email FROM App\Entity\User u')
->getResult()
;
这将 return 一组来自您用户的电子邮件地址。然后你只需将它传递给你的 setTo()
方法:
$message = (new \Swift_Message('Un nouvelles articles est publier'))
->setFrom('contact@al-houria.com')
->setTo($emails)
// ...
;
请参阅学说 DQL SELECT Examples 以获得更多帮助。如果您想更花哨一点,可以将用户的姓名添加到他们的电子邮件地址中,然后将其发送出去。假设您的 User 实体中有一个 getName()
函数。您可以像这样生成您的电子邮件地址:
$emails = [];
$users = $this->getDoctrine()->getRepository(User::class)->findAll();
foreach ($users as $user) {
$emails[$user->getEmail()] = $user->getName();
}
然后当您调用 ->setTo($emails)
时,它会同时包含他们的姓名和电子邮件地址。
最后一点,我会使用 $em = $this->getDoctrine()->getManager();
而不是 $this->get('doctrine.orm.entity_manager');
我正在 symfony
下开发博客并使用 swiftMailer
发送电子邮件。
我在我的控制器中使用此代码发送给我的所有用户,以警告他们添加了新文章,但问题是它向我显示了一条错误消息。
我的控制器:
/**
* @Route("/admin/ajout")
* @param Request $request
* @return Response
* @throws \Exception
*/
public function add(Request $request, \Swift_Mailer $mailer): Response {
$article = new Articles();
$addArticle = $this->createForm(ArticlesType::class, $article);
$addArticle->handleRequest($request);
$info = $this->getDoctrine()->getRepository(InfoMore::class)->findByInfo(2);
$em = $this->get('doctrine.orm.entity_manager');
$dql = "SELECT email FROM App:user";
$query = $em->createQuery($dql);
if($addArticle->isSubmitted() && $addArticle->isValid()) {
$article = $addArticle->getData();
$manager = $this->getDoctrine()->getManager();
$manager->persist($article);
$manager->flush();
$message = (new \Swift_Message('Un nouvelles articles est publier'))
->setFrom('contact@al-houria.com')
->setTo($query)
->setBody(
$this->renderView(
'email/article_publish.html.twig'
),
'text/html'
)
;
$mailer->send($message);
$this->addFlash('article', 'L\'article a bien étais ajouter');
return $this->redirectToRoute('app_backoffice_admin');
}
return $this->render('backOffice/CRUD/add.html.twig', [
'title' => 'Ajouter un article a votre blog',
'info' => $info,
'addArticle' => $addArticle->createView()
]);
}
和消息错误:
Address in mailbox given [Doctrine\ORM\Query_state] does not comply with RFC 2822, 3.6.2
它告诉我地址无效,在这种情况下如何添加多个电子邮件地址?
感谢您的帮助!
假设您的用户实体在 App\Entity\User
中,您可以 select 这个:
$emails = $em
->createQuery('SELECT u.email FROM App\Entity\User u')
->getResult()
;
这将 return 一组来自您用户的电子邮件地址。然后你只需将它传递给你的 setTo()
方法:
$message = (new \Swift_Message('Un nouvelles articles est publier'))
->setFrom('contact@al-houria.com')
->setTo($emails)
// ...
;
请参阅学说 DQL SELECT Examples 以获得更多帮助。如果您想更花哨一点,可以将用户的姓名添加到他们的电子邮件地址中,然后将其发送出去。假设您的 User 实体中有一个 getName()
函数。您可以像这样生成您的电子邮件地址:
$emails = [];
$users = $this->getDoctrine()->getRepository(User::class)->findAll();
foreach ($users as $user) {
$emails[$user->getEmail()] = $user->getName();
}
然后当您调用 ->setTo($emails)
时,它会同时包含他们的姓名和电子邮件地址。
最后一点,我会使用 $em = $this->getDoctrine()->getManager();
而不是 $this->get('doctrine.orm.entity_manager');