即使抄送和密送为空,Laravel邮件仍将发送

4

我在 Laravel 中有邮件发送功能

public static function Compose($to,$cc,$bcc,$subject,$body)
    {

        // return $to;
        try
        {
            $data = [
                'body' => $body
            ];

            if(env('APP_ENV') == "local") 
            {
                $email["subject"] = $subject;
                $email["to"] = $to;
                $email["cc"] = $cc;
                $email["bcc"] = $bcc;
                Mail::send('email.composeMail', $data, function ($message) use ($email) {

                    $message
                        ->subject($email["subject"])
                        ->to($email["to"]);
                        ->cc($email["cc"]);
                        ->bcc($email["bcc"]);
                });
            }
            else
            {
                $email["subject"] = $subject;
                $email["to"] = $to;
                $email["cc"] = $cc;
                $email["bcc"] = $bcc;

                Mail::send('email.composeMail', $data, function ($message) use ($email) {

                    $message
                        ->subject($email["subject"])
                        ->to($email["to"]);
                        ->cc($email["cc"]);
                        ->bcc($email["bcc"]);
                });
            }
        } 
        catch (\Exception $e) 
        {
            Log::critical('Critical error occurred upon processing the transaction in Email.php -> Email class -> RevertPropertyToInbox method');
            throw new CustomErrorHandler($e->getMessage(),Constant::LogLevelCritical);
        }
    }

在很多情况下,抄送和密送字段是空的。但是邮件没有被发送,并且我收到了错误消息。

enter image description here

在这里,我想直接使用代码而不检查CC或BCC是否为空,我是否遗漏了什么以便我能实现我的计划。


2
为什么你不想检查呢? 这是世界上最简单的事情,比寻求可能根本不存在的解决方案要快得多。 - Josef Hoppe
在这种情况下,我认为如果 Laravel 检查 cc 或 bcc 是否为空,那么它会直接忽略而不通知开发人员,因此我认为 Laravel 可能会检查 cc 或 bcc 是否为空,并且我可能错过了这一点。 - Vishal Shetty
2个回答

10

这些方法都可以使用数组调用,而不是普通的字符串 (文档)。在这种情况下,你应该只需要将数组留空即可。尝试以下代码:

$message
    ->subject($email["subject"])
    ->to($email["to"]);
    ->cc($email["cc"] ?: []);
    ->bcc($email["bcc"] ?: []);

问题在于,如果我们将数组保留为空,则会抛出错误消息,即使对于您的代码也会抛出相同的错误消息。 - Vishal Shetty
我猜你在SwiftMailer中发现了一个Bug。你可以尝试报告一下,因为设置cc/bcc为空数组是不可能的(这是未经记录的)。 - aross

2

如果电子邮件地址为空,则无法发送电子邮件,它将始终抛出错误。

相反,您需要检查并相应地发送电子邮件。

请尝试以下方法:

if($email["cc"] =='' && $email["bcc"] == ''){
 $message
                        ->subject($email["subject"])
                        ->to($email["to"]);
}
elseif($email["cc"] ==''){
$message
                        ->subject($email["subject"])
                        ->to($email["to"])
                        ->bcc($email["bcc"]);
}
else{

$message
                        ->subject($email["subject"])
                        ->to($email["to"])
                        ->cc($email["cc"]);

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接