Получать сообщения электронной почты, когда пользователь отправляет контактную форму, используя Laravel - PullRequest
3 голосов
/ 05 июля 2019

В настоящее время у меня есть приложение Laravel, которое имеет контактную форму. Когда форма отправлена, имя пользователя, адрес электронной почты, номер телефона и сообщение должным образом сохраняются в моей БД, пользователь получает подтверждение по электронной почте, и я не получаю никаких ошибок. Мой вопрос, как человеку, которому принадлежит форма, как я могу использовать Laravel для получения имени пользователя и сообщения на мою учетную запись gmail? Я использую Gmail SMTP для отправки электронных писем пользователю, который отправляет форму. Я хочу, чтобы информация контактной формы пользователей (только имя и сообщение) была отправлена ​​на мой электронный адрес электронной почты.

MessagesController.php

    <?php
namespace App\Http\Controllers;
use App\Mail\MessageCreated;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
use App\Message;
use Illuminate\Support\Facades\Mail;

class MessagesController extends Controller
{
    public function submit(Request $request)
    {
        $validator = Validator::make($request->all(), [
            'name' => 'required|min:2',
            'email' => 'required|max:255',
            'phonenumber' => 'required|min:11',
            'message' => 'required|min:5',
        ]);


        if ($validator->fails()) {
            return redirect(url()->previous() . '#contact')
                ->withErrors($validator)
                ->withInput();
        }

        $message = Message::create($request->all());

        Mail::to($message->email)->queue(
            new MessageCreated($message)
        );


        return redirect('/')->with('success', 'Your message has been 
            successfully sent. We will reach out to you soon');
    }
}

Модель: Message.php

    <?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Message extends Model
{
    protected $guarded = [];

    public function email(){
        return $this->belongsTo(Message::class);
    }
}

Отправляется по почте: MessageCreated.php

<?php

namespace App\Mail;

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

class MessageCreated extends Mailable
{
    use Queueable, SerializesModels;

    public function __construct($message)
    {
        $this->message = $message;
    }

    public function build()
    {
        return $this->markdown('mail.message-created');
    }
}

Сообщение, которое получает пользователь: message-создал.blade.php

    @component('mail::message')

We appreciate you taking the time to contact us. We will be reaching out to you soon.

@component('mail::button', ['url' => 'mysamplesite.io'])
Back to homepage
@endcomponent

Thank you,<br>

@endcomponent

Ответы [ 2 ]

5 голосов
/ 05 июля 2019

Laravel делает это очень просто.

В вашем контроллере после Mail::to() ... просто добавьте следующий фрагмент скрипта:

Mail::raw("name: $message->name \n message: $message->message", function($message) {
      $message->to('your-gmail-address')
      ->subject('New contact form is submitted.');
 });
1 голос
/ 05 июля 2019

Вы помещаете свою электронную почту в очередь, поэтому вам следует отправить ru php artisan queue:work или использовать функцию send вместо queue

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...