在发送电子邮件时建立收件人会让我对Laravel

时间:2017-05-04 08:53:54

标签: php laravel email

我正在尝试发送电子邮件,如果有cc,则会以cc。

发送
public $content;
public $subject;
public $filename;
public $user_id;
public $cc;

public function __construct($content,$subject,$filename,$user_id,$cc = null)
{

    $this->content = $content;
    $this->subject = $subject;
    $this->filename = $filename;
    $this->user_id = $user_id;
    $this->cc = $cc;
}

/**
 * Build the message.
 *
 * @return $this
 */
public function build()
{
    if($this->cc){
    return $this->from("my@email.io")
        ->subject($this->subject)
        ->cc($this->cc)
        ->attach(storage_path() . "/app/public/files/" . $this->user_id . "/" . $this->filename)
        ->view('emails.sent');
    }else{
        return $this->from("my@email.io")
            ->subject($this->subject)
            ->attach(storage_path() . "/app/public/files/" . $this->user_id. "/" .$this->filename)
            ->view('emails.sent');
    }
}

在我介绍cc逻辑之前,这个控制器运行得很完美,但是在我将if else添加到构建函数之后,Laravel发送了这个错误:

  

Mailable.php第241行中的ErrorException:提供的参数无效   的foreach()

这是什么功能:

protected function buildRecipients($message)
    {
        foreach (['to', 'cc', 'bcc', 'replyTo'] as $type) {
            foreach ($this->{$type} as $recipient) {
                $message->{$type}($recipient['address'], $recipient['name']);
            }
        }

        return $this;
    }

我在调用函数时尝试使用和不添加$ cc,它总是给我同样的错误。正如我在介绍if else之前所说的那样。

我已经通过创建2个不同的Mail控制器解决了这个问题,但我想知道为什么这个解决方案不起作用。提前致谢

2 个答案:

答案 0 :(得分:2)

我实际上将变量$ cc重命名为$ mycc,然后再次运行。

由于类扩展了Mailable,并且Mailable已经有一个名为$cc的变量,它应该是一个数组,我的$cc = null覆盖了该变量。

答案 1 :(得分:1)

  

Mailable.php第241行中的ErrorException:为foreach()提供的参数无效

这意味着传递给foreach的参数不是数组。根据你的代码,它意味着'to','cc','bcc','replyTo'属性之一是空的或不是数组。我建议在foreach之前添加is_array检查。

感谢。