尝试使用输入表单发送数据。用户发送姓名、电子邮件、主题和消息等信息。此表单用于向管理员报告问题。提交表单时,返回 Mailgun not Defined 错误。
laravel 和 mvc 新手。
.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>
从您的
.env
看来您正在使用mailgun smtp凭据
那么你应该将你的驱动程序定义为 SMTP
MAIL_MAILER=smtp
希望对你有帮助
contracter.php 文件的更改
//public $emailData;
// to
public $mailData;
public function __construct($emailData)
{
$this->mailData = $emailData;
}
看起来你使用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',
您是否尝试过在 config/mail.php 的邮件程序数组中将 Mailgun 大写