【问题标题】:Building recipients while sending an email gives me an exception with Laravel在发送电子邮件时建立收件人给了我一个 Laravel 的例外
【发布时间】: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”是从另一个控制器发送的,但我还是会检查一下。

标签: php laravel email


【解决方案1】:

我实际上将变量 $cc 重命名为 $mycc 并且它再次工作。

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

【讨论】:

  • 我花了 3 个小时试图解决这个问题。我一直认为 Mailable 类不会有问题,但看起来确实如此。覆盖 $cc var 是问题所在。疯狂的。谢谢!
【解决方案2】:

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

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

谢谢。

【讨论】:

    猜你喜欢
    • 2016-12-11
    • 2019-06-17
    • 2018-11-19
    • 2019-04-22
    • 2022-01-02
    • 1970-01-01
    • 2015-01-20
    • 2017-10-01
    • 2023-03-17
    相关资源
    最近更新 更多