代码之家  ›  专栏  ›  技术社区  ›  Latheesan

使用默认模板在laravel中使用简单的电子邮件与我们联系-没有为[mail]错误定义提示路径

  •  0
  • Latheesan  · 技术社区  · 5 年前

    我试图创建一个简单的联系我们电子邮件形式,并使用现有的默认电子邮件模板,与LaaVel.

    在我的表单中,我从我的用户那里收集以下输入:

    • 名字
    • 姓氏
    • 主题
    • 消息

    我用下面的 FormRequest 发送电子邮件请求 要验证输入:

    public function rules()
    {
        return [
            'first_name' => ['required', 'string', 'min:3'],
            'last_name' => ['required', 'string', 'min:3'],
            'email' => ['required', 'email'],
            'subject' => ['required', 'in:' . implode(',', config('contact-us-subjects'))],
            'message' => ['required', 'string', 'min:10'],
        ];
    }
    

    这是我的控制器上接收请求并尝试发送电子邮件的功能:

    public function sendEmail(SendEmailRequest $sendEmailRequest)
    {
        $validated = $sendEmailRequest->validated();
    
        $data['slot'] = view('mail.contact-us', $validated)->render();
    
        Mail::send('vendor.mail.html.message', $data, function($message) use($validated) {
            $message->from($validated['email'], $validated['first_name'] . ' ' . $validated['last_name']);
            $message->subject($validated['subject']);
            $message->to(config('mail.from.address'), config('mail.from.name'));
        });
    
        return redirect()
            ->back()
            ->with('status', 'Thanks, your email has been successfully sent to us');
    }
    

    门面\点火\异常\视图异常 没有为[邮件]定义提示路径。(视图:C:\xampp\htdocs\MyApp\src\resources\views\vendor\mail\html\message.blade.php)

    我正在使用Laravel 6.x和PHP 7.x。有什么我可能做错了吗?

    1 回复  |  直到 5 年前
        1
  •  0
  •   Latheesan    5 年前

    我解决问题的方式略有不同。我不得不把邮件做成 markdown .

    第一步。使用此artisan命令创建新邮件: php artisan make:mail ContactUs

    第二步。确保默认 to (类似于from address/name)设置为 config/mail.php ,例如:

    'to' => [
        'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'),
        'name' => env('MAIL_FROM_NAME', 'Example'),
    ],
    

    app/Mail/ContactUs.php 这样地:

    <?php
    
    namespace App\Mail;
    
    use Illuminate\Bus\Queueable;
    use Illuminate\Mail\Mailable;
    use Illuminate\Queue\SerializesModels;
    
    class ContactUs extends Mailable
    {
        use Queueable, SerializesModels;
    
        /**
         * @var array $data
         */
        private $data;
    
        /**
         * Create a new message instance.
         *
         * @param array $data
         */
        public function __construct(array $data)
        {
            $this->data = $data;
        }
    
        /**
         * Build the message.
         *
         * @return $this
         */
        public function build()
        {
            return $this
                ->from($this->data['email'], $this->data['first_name'] . ' ' . $this->data['last_name'])
                ->subject($this->data['subject'])
                ->markdown('mail.contact-us', [
                    'messageBody' => $this->data['message'],
                ]);
        }
    }
    

    public function sendEmail(SendEmailRequest $sendEmailRequest)
    {
        $validated = $sendEmailRequest->validated();
    
        Mail::send(new ContactUs($validated));
    
        return redirect()
            ->back()
            ->with('status', 'Thanks, your email has been successfully sent to us');
    }