Laravel 9.x 提交表单后 Mailgun 返回未定义错误。 [电子邮件无法发送]

问题描述 投票:0回答:4

尝试使用输入表单发送数据。用户发送姓名、电子邮件、主题和消息等信息。此表单用于向管理员报告问题。提交表单时,返回 Mailgun not Defined 错误。

laravel 和 mvc 新手。

The Error

.env

MAIL_MAILER=Mailgun
MAIL_HOST=smtp.mailgun.org
MAIL_PORT=587 
[email protected]
MAIL_PASSWORD=myPassword

config/mail.php

'default' => env('MAIL_MAILER', 'smtp'),

    'mailers' => [
        'smtp' => [
            'transport' => 'smtp',
            'host' => env('MAIL_HOST', 'smtp.mailgun.org'),
            'port' => env('MAIL_PORT', 587),
            'encryption' => env('MAIL_ENCRYPTION', 'tls'),
            'username' => env('MAIL_USERNAME'),
            'password' => env('MAIL_PASSWORD'),
            'timeout' => null,
        ],
        
    ],

        'mailgun' => [
            'transport' => 'mailgun',
        ],

        'failover' => 
        [
            'transport' => 'failover',
            'mailers' => [
                'smtp',
                'log',
            ],
        ],

应用程序/Mail/contacter.php

namespace App\Mail;

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

class contacter extends Mailable
{
    use Queueable, SerializesModels;

    public $emailData;
  
    public function __construct($emailData)
    {
        $this->mailData = $emailData;
      
    }
    public function build()
    {
        return $this->subject('Message')
                    ->view('mail');
    }
}

ContactUsFormController.php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use app\Models\Contact;
use app\Mail\contacter;
use Illuminate\Support\Facades\Mail;


class ContactUsFormController extends Controller
{
    public function createForm(Request $req){
        return view('contact');
    }
    public function ContactUsForm(Request $req){
                //form validation 
                $this->validate($req,[
                    'name' => 'required',
                    'email' => 'required | email',
                    'subject' => 'required',
                    'message' => 'required'
                ]);
                $email = [
                    'name' => $req->get('name'),
                    'email' => $req->get('email'),
                    'subject' => $req->get('subject'),
                    'message' => $req->get('message')
                ];

              Mail::to(env('ADMIN'))->send(new contacter($email));

            return back()->with('success', 'We have recieved your message and will reply to ' . $email['email'] . ' email address!');


   }
}

web.php

Route::get('/contact', [ContactUsFormController::class, 'createForm']);
Route::post('/contact', [ContactUsFormController::class, 'ContactUsForm'])->name('contact.store');

邮件刀片

    <h1>About : {{ $emailData['subject'] }}</h1>
    <p>From : {{ $emailData['name'] }}</p>
    <p>Reply To : {{$emailData['email']}}</p> <br /><br /><br />
    <p>{{$emailData['message']}}</p>
     
    <br />
    <p>END</p>
php laravel email
4个回答
0
投票

从您的

.env
看来您正在使用mailgun smtp凭据

那么你应该将你的驱动程序定义为 SMTP

MAIL_MAILER=smtp

希望对你有帮助


0
投票

contracter.php 文件的更改

//public $emailData;
// to

public $mailData;

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

0
投票

看起来你使用mailgun smtp,将你的.env设置为: MAIL_MAILER=smtp

如果您想使用 mailgun api,请将您的 .env 设置为: MAIL_MAILER=邮件枪

然后更新“mailgun”数组中的 config/services.php :

'domain' => 'MAILGUN_DOMAIN',  

 'secret' => 'MAILGUN_SECRET',  ==>> your private api key

 'endpoint' => 'api.mailgun.net',  

0
投票

您是否尝试过在 config/mail.php 的邮件程序数组中将 Mailgun 大写

© www.soinside.com 2019 - 2024. All rights reserved.