使用symfony对象发送Swift_message

时间:2017-05-03 17:33:39

标签: php symfony email message

我正在尝试创建一封电子邮件,向所有与特定公司关联的用户发送消息。如果我使用收件人阵列并将其添加到我的电子邮件并使用一封电子邮件进行测试,我可以在测试电子邮件中看到所有用户电子邮件。当我尝试将相同的收件人数组传递到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);

3 个答案:

答案 0 :(得分:1)

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

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

希望这个帮助

答案 1 :(得分:1)

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

您的$recipients数组看起来应该更像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(),它将用户的电子邮件地址作为字符串返回。

答案 2 :(得分:0)

我将以下内容添加到扩展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());

电子邮件已成功发送!