【问题标题】:Use symfony objects for sending Swift_message使用 symfony 对象发送 Swift_message
【发布时间】:2017-05-03 17:33:39
【问题描述】:

我正在尝试创建一封电子邮件,用于向与特定公司关联的所有用户发送消息。如果我将收件人数组添加到我的电子邮件中并使用一封电子邮件进行测试,我可以看到所有用户电子邮件都打印在测试电子邮件中。当我尝试将相同的收件人数组传递给 setTo 而不是使用单个电子邮件地址时,我收到一条消息 “警告:非法偏移类型”

    $company = $this->getDoctrine()->getRepository('Bundle:Customer')->findOneBy(array('accountId' => $compare->getCustomerAccount()));

    $recipients = [];
    foreach($company->getUsers() as $user){
        array_push($recipients, $user);
    }
    array_push($recipients, $company->getCsr());

    $newComment = new Comment();
    $newComment->setDetails($comment);
    $newComment->setUser($this->getUser());

    $em = $this->getDoctrine()->getManager();
    $em->flush();

    $message = \Swift_Message::newInstance()
        ->setSubject($subject)
        ->setFrom($fromEmail)
        ->setTo($recipients)
        ->setBody(
            $this->renderView(
                'Bundle:Comment:email_users.html.twig', array(
                    'subject' => $subject,
                    'comment' => $comment,
                    'company' => $company,
                    'proof' => $proof
                )
            )
        )
        ->setContentType('text/html')
    ;
    $this->get('mailer')->send($message);

【问题讨论】:

  • 看起来您正在推送用户对象而不是电子邮件地址?
  • @ccKep 是的,我如何访问 symfony 用户对象的电子邮件? getEmail 不是一个函数。
  • 好吧,如果您打算向他们发送邮件,您必须将电子邮件存储在某个地方吗?您的用户实体是什么样的?
  • 我们的用户对象扩展了基本的 symfony 用户“BaseUser”,我们没有 getUser 函数。我可以尝试添加一个,但我觉得应该有一个内置但似乎没有
  • 如果你真的扩展了,你应该有一个getEmail 方法(见Line 218 in User.php)。只需尝试使用 array_push($recipients, $user->getEmail()); 并暂时删除 array_push($recipients, $company->getCsr()); (我不知道 getCsr 是否返回另一个 User 对象或它返回的任何其他对象)。

标签: php symfony email message


【解决方案1】:

Se setTo 接受带有电子邮件和姓名的关联数组(检查文档中的here),因此您应该使用以下内容修改您的代码:

foreach($company->getUsers() as $user){
    array_push($recipients, [$user->getEmail() => $user->getName()]);
}
array_push($recipients, $company->getCsr()->getEmail());

希望有帮助

【讨论】:

    【解决方案2】:

    发生错误是因为您尝试使用$user 对象数组而不是字符串的关联数组来设置收件人。当尝试以对象或数组作为索引访问数组的索引时,您将看到该错误消息。

    你的$recipientsarray 应该看起来更像array('receiver@domain.org', 'other@domain.org' => 'A name'),你应该没问题。

    您的代码可能如下所示:

        $recipients = [];
        foreach($company->getUsers() as $user){
            array_push($recipients, $user->getEmail());
        }
        array_push($recipients, $company->getCsr()->getEmail());
    

    我只是假设您的用户对象有一个 getter 方法getEmail(),它将用户电子邮件地址作为字符串返回。

    【讨论】:

      【解决方案3】:

      我在扩展 BaseUser 的用户类中添加了以下内容:

      /**
       * Sets the email.
       *
       * @return string
       */
      public function getEmail()
      {
          return parent::getEmail();
      }
      

      然后我可以在每个用户上运行 getEmail

      $recipients = [];
      foreach($company->getUsers() as $user){
          array_push($recipients, $user->getEmail());
      }
      array_push($recipients, $company->getCsr()->getEmail());
      

      邮件发送成功!

      【讨论】:

      • 第一部分已经过时了,如果你没有定义那个函数(你的基类定义了,而且它是公共的——它在 FOSUserBundle 中)它无论如何都会被调用。很高兴你让它工作了!
      • 这是我的假设,但我最初尝试了 getEmail(),它说它不是一个函数
      猜你喜欢
      • 1970-01-01
      • 2013-04-11
      • 2019-05-25
      • 2015-03-25
      • 2013-03-09
      • 2023-03-07
      • 1970-01-01
      • 2011-09-13
      • 2013-10-26
      相关资源
      最近更新 更多