【发布时间】:2017-05-04 08:53:54
【问题描述】:
我正在尝试发送一封电子邮件,如果它有抄送,它将与抄送一起发送。
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 个不同的邮件控制器解决了这个问题,但我想知道为什么这个解决方案不起作用。提前致谢
【问题讨论】:
-
你的 PHP 版本是多少?因为您使用的短数组语法仅适用于 5.4 以上
-
在函数 buildRecipients 中的第二个 foreach 循环之前放置一个检查(isset($this->{$type}) 等,任何合适的)。因为我在您粘贴的代码中没有看到任何“to”或“replyTo”属性。
-
@Amarnasan 7.0.4
-
@JoshulSharma “to”是从另一个控制器发送的,但我还是会检查一下。