当电子邮件保存在变量中时,邮箱地址不符合RFC 2822,3.6.2规范。

54

我有一个正确的电子邮件地址。我已经复制了它,但当我发送时,我收到以下错误:

 Address in mailbox given [] does not comply with RFC 2822, 3.6.2. 

为什么我要使用Laravel(Swift Mailer)发送电子邮件:

$email = email@address.com

然后当我发送它时,会抛出错误。

但如果我直接使用该字符串,则可以发送它。

这是代码块:

 Mail::send('emails.activation', $data, function($message){
            $message->to($email)->subject($subject);
        });
                ->with('title', "Registered Successfully.");

$email$subject 超出了作用域,不是吗? - Anthony Sterling
在调用Mail::send之前,我已经定义了它们,但如果这意味着超出范围,那么我应该怎么办? - user3077503
5
使用 use 关键字。 Mail::send('emails.activation', $data, function($message) use ($email, $subject) { .... :) - Anthony Sterling
请用一段相对完整的代码来回答吗?如果成功的话,我会标记为答案。 - user3077503
同样的问题也会在有时候输入错误的电子邮件地址时出现(即没有可用的abcd@abcd.abc)。 - bharat
显示剩余2条评论
18个回答

34

您的电子邮件变量为空是由于作用域,您应该设置一个使用条款,例如:

Mail::send('emails.activation', $data, function($message) use ($email, $subject) {
    $message->to($email)->subject($subject);
});

11

(我在 PHP 中使用 SwiftMailer)

当我不小心为 $email 发送了一个字符串时,我遇到了类似这样的错误。

$email = "someone@somewhere.com <Some One>";

当我本意发送的是什么时

$email = Array("someone@somewhere.com"=>"Some One");

我无意中把它运行了一遍字符串函数,这个函数我是用来记录日志的,所以一旦我重新发送该数组,错误就消失了。


谢谢,那是我的问题,因为电子邮件地址不正确。 - amir22
Symfony 3.4(同时使用SwiftMailer)存在一些问题。 - sneaky
这就是我在寻找的答案,谢谢。 - GTS Joe
是的,同样的问题。我从Mac邮件中复制了地址,但复制的时候地址前面加了"mailto:"。 - undefined

7

确保您的电子邮件地址变量不为空。 使用以下方式进行检查:

print_r($variable_passed);

2
他/她在问题描述中说,他们回显了变量并且它不是空白的。 - Leonardo Raele
1
在我的情况下,那就是问题所在:空白的邮件地址。 - dAm2K

6
 Mail::send('emails.activation', $data, function($message){
        $message->from('email@from', 'name');
        $message->to($email)->subject($subject);
    });

我不知道为什么,但在我的情况下,我把表单信息放在函数里面,并且它能够正常工作。


4
你的问题可能是.env文件加载不正确,使用了MAIL_USERNAME。
要检查你的.env文件是否正确加载电子邮件地址,请在控制器中添加以下行并刷新页面。
最初的回答可能是,你的.ME 文件没有正确加载。这导致了 MAIL_USERNAME 的问题。如果要检查 .env 文件是否可以正确加载电子邮件地址,请在控制器中添加此行并刷新页面。
dd(env('MAIL_USERNAME'))

如果它显示为空,请尝试从命令行运行以下命令,然后再试一次。最初的回答。
php artisan cache:clear

4
唯一对我有效的解决方案是更改以下代码。
 Mail::send('emails.activation', $data, function($message){
     $message->from(env('MAIL_USERNAME'),'Test'); 
     $message->to($email)->subject($subject);
});

3
请在您的答案中添加一些解释,以便其他人可以从中学习 - 您改变了什么,为什么会有所不同? - Nico Haase

1
我曾经遇到过同样的问题,但是我已经解决了。请确保以下几点:
   Mail::send('emails.auth.activate', array('link'=> URL::route('account-activate', $code),'username'=>$user->username),function($message) use ($user) {
                        $message->to($user->email , $user->username)->subject('Active your account !');

                    });

这应该是你的 emails.activation
    Hello {{ $username }} , <br> <br> <br>

    We have created your account ! Awesome ! Please activate by clicking the   following link <br> <br> <br>
   ----- <br>
      {{ $link }} <br> <br> <br>
       ---- 

你为什么不能在发送邮件的函数中调用$email变量的答案是:你需要调用$user变量,然后可以将所需的变量写成$user->variable的形式。
谢谢 :)

1
数据变量($email,$subject)似乎是全局的。而全局变量无法在函数内读取。您必须将它们作为参数传递(推荐方式)或声明为全局变量。
尝试这种方式:
Mail::send('emails.activation', $data, function($message, $email, $subject){
        $message->to($email)->subject($subject);
    });
            ->with('title', "Registered Successfully.");

1
由于发送的电子邮件地址为空,所以发生了这种情况。看到那些空括号了吗?这意味着电子邮件地址没有被放入swiftmailer函数的$address参数中。

1

今天我也遇到了非常类似的问题,解决方法就是如此。

$email = Array("Zaffar Saffee" => "myemail@gmail.com");
        $schedule->command('cmd:mycmd')
                 ->everyMinute()
                 ->sendOutputTo("/home/forge/dev.mysite.com/storage/logs/cron.log")
                 ->emailWrittenOutputTo($email);

虽然是 Laravel 5.2...

我的基本问题是,我传递的是字符串而不是数组,所以出现了错误。

->emailWrittenOutputTo('mymail@gmail.com'); // string, we need an array

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