给定[Doctrine \ ORM \ Query_state]的邮箱中的地址不符合RFC 2822,3.6.2

时间:2018-06-28 07:20:10

标签: php symfony swiftmailer

我正在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()
    ]);

 } 

和消息错误:

  

给定[Doctrine \ ORM \ Query_state]的邮箱中的地址不符合RFC 2822,3.6.2

它告诉我地址​​无效,在这种情况下如何添加多个电子邮件地址?

谢谢您的帮助!

1 个答案:

答案 0 :(得分:1)

假设您的用户实体位于App\Entity\User中,则可以选择以下内容:

$emails = $em
    ->createQuery('SELECT u.email FROM App\Entity\User u')
    ->getResult()
;

这将返回用户的一系列电子邮件地址。然后,您只需将其传递给您的setTo()方法即可:

$message = (new \Swift_Message('Un nouvelles articles est publier'))
    ->setFrom('contact@al-houria.com')
    ->setTo($emails)
    // ...
;

有关进一步的帮助,请参见教义DQL SELECT Examples。如果您想变得更时髦,可以将用户名添加到他们的电子邮件地址中,然后将其发送出去。假设您的用户实体中有一个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');