I am trying to send an email and if it has cc, it will be sent with 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');
}
}
This controller worked flawlessly before I introduced the cc logic, but after I added the if else to the build function, Laravel sends me this error:
ErrorException in Mailable.php line 241: Invalid argument supplied for foreach()
Which is this function:
protected function buildRecipients($message)
{
foreach (['to', 'cc', 'bcc', 'replyTo'] as $type) {
foreach ($this->{$type} as $recipient) {
$message->{$type}($recipient['address'], $recipient['name']);
}
}
return $this;
}
I have tried both with and without adding $cc when calling a function, and it always gives me the same error. As I said this worked before I introduced the if else.
I already solved this by creating 2 different Mail controllers, but I would like to know why this solution doesn't work. Thanks in advance