【问题标题】:Laravel send email on form submitLaravel 在表单提交时发送电子邮件
【发布时间】:2020-03-27 14:39:05
【问题描述】:

所以我有一个简单的表单,我希望每当用户提交表单时将其通过电子邮件发送给我,但我不确定问题是什么,因为每当我提交表单时我收到 500 错误,我不知道为什么。

这是表格:

<div class="contact" id="contact">
    <form action="{{url('/contact')}}" method="post">
        {{ csrf_field() }}
        <input type="text" class="fname" name="firstname" placeholder="First Name">
        <input type="text" class="lname" name="lastname" placeholder="Last Name">
        <input type="text" class="address" name="address" placeholder="Address">
        <input type="text" class="email" name="email" placeholder="Email">
        <textarea id="subject" name="message" placeholder="Message" style="height:200px"></textarea>
        <label class="checkbox-label">
            <input type="checkbox" class="yard" name="yard"> I Want a Yard Sign
        </label>
        <br>
        <label class="checkbox-label">
            <input type="checkbox" class="host" name="host"> Host a Meet and Greet
        </label>
        <br>

        <input type="submit" value="Get More Information">
        <br>
    </form>
</div>

在我的网络路由文件中,我设置了两条路由

Route::get('/contact', function () {
    return view('contact');
});

Route::post('/contact', function (Request $request) {
    Mail::send(new ContactMail($request));
    return redirect('/');
});

我创建了我的邮件文件

<?php

namespace App\Mail;

use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;

class ContactMail extends Mailable
{
    use Queueable, SerializesModels;

    public $email;

    /**
     * Create a new message instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->email = $request;
    }

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {
        return $this->subject('New Contact Mail')
                    ->from($this->email->email, $this->email->firstname)
                    ->to('test@gmail.com')
                    ->view('email.contactmail');
    }
}

然后是我的简单刀片文件

{{ $email->content }}

每当我提交表单或尝试调用路由时,我都会收到 500 错误,我不知道为什么。

【问题讨论】:

  • 在您的 ContactMail 类构造函数中,您分配了一个未定义的变量 $request。
  • 你真的应该在开发中打开错误报告。这样,您将得到有意义的错误,而不是针对用户的一般错误 500。
  • 是的,所以我忘了添加 use Illuminate\Http\Request;但我仍然遇到同样的错误
  • 这不是你的问题。您的问题是您没有定义构造函数来获取参数。
  • 为了将来参考,问题的完整细节将在您的 Laravel、PHP 和/或 Web 服务器日志中。如果你不使用它们,你就会失明。

标签: php laravel


【解决方案1】:

我想你忘记在类构造函数中插入Request $request 作为参数并导入 Request 类。

<?php

namespace App\Mail;

use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Http\Request;

class ContactMail extends Mailable
{
    use Queueable, SerializesModels;

    public $email;

    /**
     * Create a new message instance.
     *
     * @return void
     */
    public function __construct(Request $request)
    {
        $this->email = $request;
    }

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {
        return $this->subject('New Contact Mail')
                    ->from($this->email->email, $this->email->firstname)
                    ->to('test@gmail.com')
                    ->view('email.contactmail');
    }
}

另外,根据您的描述,您可能没有调试。在 .env 文件中更改它: APP_DEBUG=TRUE

【讨论】:

  • 好的,是的,我已经修复了,但还是一样的 500 错误,让我打开调试看看它吐出什么,嗯,它已经打开或设置为 true
  • 好的!这样做,让我知道:)
猜你喜欢
  • 2016-08-01
  • 2019-04-24
  • 2016-11-23
  • 1970-01-01
  • 1970-01-01
  • 2015-03-28
  • 2016-07-26
  • 1970-01-01
相关资源
最近更新 更多