我正在尝试设置 SendGrid 以在我的 Laravel 8 项目中发送电子邮件。我一直在关注这个文档:
https://sendgrid.com/docs/for-developers/sending-email/laravel/
我按照他们的方式复制了 .env 邮件设置。我只是在密码字段中添加我的 sendgrid api 密钥,并在“MAIL_FROM_ADDRESS”中添加我的 sendgrid 验证电子邮件。
MAIL_MAILER=smtp
# MAIL_DRIVER=smtp # for laravel < 7
MAIL_HOST=smtp.sendgrid.net
MAIL_PORT=587
MAIL_USERNAME=apikey
MAIL_PASSWORD=MY_SENDGRID_API_KEY
MAIL_ENCRYPTION=tls
MAIL_FROM_NAME="MY NAME"
MAIL_FROM_ADDRESS=MY VERIFIED EMAIL FROM SENDGRID
然后它要求我做一个 php artisan make:mail TestEmail ("app/Mail/TestEmail.php") 并复制以下代码:
<?php
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;
class TestEmail extends Mailable
{
use Queueable, SerializesModels;
public $data;
public function __construct($data)
{
$this->data = $data;
}
public function build()
{
$address = 'MY VERIFIED SENDGRID EMAIL ADDRESS';
$subject = 'This is a test!';
$name = 'MY NAME';
return $this->view('emails.test')
->from($address, $name)
->cc($address, $name)
->bcc($address, $name)
->replyTo($address, $name)
->subject($subject)
->with([ 'test_message' => $this->data['message'] ]);
}
}
然后我在“app/resources/views/emails/test.blade.php”中创建了一个视图:
<!DOCTYPE html>
<html lang="en-US">
<head>
<meta charset="utf-8" />
</head>
<body>
<h2>Test Email</h2>
<p>{{ $test_message }}</p>
</body>
</html>
Sendi
然后它告诉我使用以下代码发送电子邮件:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Mail\TestEmail;
use Illuminate\Support\Facades\Mail;
class SendGridEmailController extends Controller
{
public function sendMail()
{
$data = ['message' => 'This is a test!'];
Mail::to('MY GMAIL ACCONT')->send(new TestEmail($data));
}
}
对于上面的代码,文档没有说创建控制器或任何东西,但在我的情况下,我确实创建了一个控制器“SendGridEmailController”并在那里添加了上面的代码。
然后,在我的routes/web.php 文件中,我创建了一条路线:
Route::get('/test_email', [SendGridEmailController::class, 'sendMail']);
然后,当我尝试通过上述路线运行代码时,出现此错误:
“给定的邮箱地址 [mailtrap] 不符合 RFC 2822, 3.6.2。”
我不明白这个错误想表达什么。我尝试查看 Google 搜索,甚至在这里,但我找不到任何与我在 Laravel 中遇到的问题相关的内容。
也许我错过了一些东西或者没有正确设置 sendgrid?
感谢您对此的帮助。谢谢!
你运行过这个吗?
php artisan config:cache
由于 2021 年 1 月 sendgrid 的政策变更,请升级至 SMTP 集成的 API 密钥。上面的 SMTP 环境变量方法会抛出错误并且不起作用,但是解决该问题的方法是创建仅用于发送邮件的受限 API 密钥
环境变量应该是这样的。
MAIL_DRIVER=smtp
MAIL_HOST=smtp.sendgrid.net
MAIL_PORT=2525
MAIL_USERNAME="apikey"
MAIL_PASSWORD="your secret key here"
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=emailaddres
MAIL_FROM_NAME=app_name
在我的例子中,一切都按照 Laravel 电子邮件设置进行配置,唯一的问题是我的服务器 587 端口被阻止