用laravel发送电子邮件,但不识别变量[重复]

Posted

技术标签:

【中文标题】用laravel发送电子邮件,但不识别变量[重复]【英文标题】:Sending email with laravel, but doesn't recognize variable [duplicate] 【发布时间】:2013-10-25 01:51:28 【问题描述】:

我正在尝试通过 Laravel 发送电子邮件,但收到此错误:

未定义变量:contactEmail

即使它是在它上面定义的。这里出了什么问题?

控制器

$contactName = Input::get('name');
$contactEmail = Input::get('email');
$contactMessage = Input::get('message');

$data = array('name'=>$contactName, 'email'=>$contactEmail, 'message'=>$contactMessage);
Mail::send('template.mail', $data, function($message)
   
    $message->from($contactEmail, $contactName);
    $message->to('info@aallouch.com', 'myName')->subject('Mail via aallouch.com');
);

编辑:

template.mail

Name: $name
Email: $email
Message:$message

【问题讨论】:

请向我们展示您的 template.mail。您可能有不止一个问题。 做了另一个编辑,修复了一些。 template.mail 正在编辑中(这就是我在该文件中的全部内容)。但我仍然收到Undefined variable: contactEmail 您也可以在 www.aallouch.com/contact 上进行测试,然后填写表格,您会看到错误消息 将您的模板更改为this is just a test 并尝试发送您的电子邮件。首先,我认为您可能有 stmp 问题。为清楚起见,请从中移除所有刀片。 已更改。但是即使在其上方定义了相同的错误contactEmail,也未定义。它在控制器中 好的,知道了,刚刚编辑了我的消息。您必须使用use ($contactEmail, $contactName) 传递它们。 【参考方案1】:

因为您的 $data 变量定义为:

$data = array(
    'name'=>$contactName, 
    'email'=>$contactEmail, 
    'message'=>$contactMessage
);

您的视图中没有可用的 $data,但您可以直接使用:

 $name 
 $email 
 $message 

编辑:

你的控制器应该有:

    $contactName = Input::get('name');
    $contactEmail = Input::get('email');
    $contactMessage = Input::get('message');

    $data = array('name'=>$contactName, 'email'=>$contactEmail, 'message'=>$contactMessage);
    Mail::send('template.mail', $data, function($message) use ($contactEmail, $contactName)
       
        $message->from($contactEmail, $contactName);
        $message->to('info@aallouch.com', 'myName')->subject('Mail via aallouch.com');
    );

您必须将变量传递给闭包使用

use ($contactEmail, $contactName)

如上图。

【讨论】:

好的,但是在我收到Name: $name Email: $email Message:$message 的电子邮件中,变量没有被打印出来 您的模板是否命名为 .blade.php 不,但只是这样做并得到错误:Object of class Illuminate\Mail\Message could not be converted to string 您可能需要将$message 更改为$messageBody。看起来 function($message) 正在传递给您的视图,而不是您的 $message 您展示了“使用use ($contactEmail, $contactName) 将变量传递给闭包”非常有帮助。我从来不知道如何将变量传递给闭包。谢谢!【参考方案2】:

我遇到了这个错误,我已经解决了。我已将 $message 关键字替换为 $data 中的 $comment

下面的例子:

$data = array('name' => 'vikas', 'message' => 'test message');

查看

 $name 
 $message 

出现错误

$data = array('name' => 'vikas', 'comment' => 'test message');

 $name 
 $comment 

现在一切正常。

【讨论】:

【参考方案3】:

如果您查看source code,您会看到这一行:

 $data['message'] = $message = $this->createMessage();

因此,您的 message 字段被该行覆盖。为字段使用其他名称,例如 textcomment

【讨论】:

【参考方案4】:

我来这里是说,如果您在 Laravel 5.* 或 6.* 中遇到此问题,请确保您在 Mailable 类中将变量设置为 public。默认情况下,PHPStorm 会将您的属性设为private,并且它们将无法在电子邮件刀片模板中访问。

【讨论】:

以上是关于用laravel发送电子邮件,但不识别变量[重复]的主要内容,如果未能解决你的问题,请参考以下文章

无法在实时服务器中从Laravel发送邮件[重复]

API 的 Laravel 用户识别

laravel刀片将youtube iframe与变量连接起来[重复]

text Laravel用CC,BCC发送电子邮件

Laravel 邮件在添加密件抄送时会发送两次电子邮件

text 用laravel SES发送邮件