【发布时间】:2021-11-18 00:39:24
【问题描述】:
我正在使用 Laravel 8 做一个项目,每次用户单击按钮时我都需要发送一封自动邮件。我已经创建了所有结构,甚至遵循了一些教程,因为我不知道该怎么做,但是即使我看到“已发送电子邮件”页面,电子邮件也不会显示在 gmail 上。 我真的需要一些帮助(即使我确定问题很愚蠢,但我找不到错误)。 于是就有了代码。 这是我的 .env:
MAIL_MAILER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=myemail@gmail.com
MAIL_PASSWORD=mypassword
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=myemail@gmail.com
MAIL_FROM_NAME="${APP_NAME}"
这是我的路线:
Route::get('send', 'App\Http\Controllers\mailController@sendEmail');
邮件控制器:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Mail;
use DB;
use PDF;
use App\Mail\TestMail;
class mailController extends Controller {
public function sendEmail()
{
$details = [
'title' => 'Mail from veronica',
'body' => 'This is for testing'
];
Mail::to("receivermail@gmail.com")->send(new TestMail($details));
return "Email sent";
}
}
TestMail(在 App\Mail 中):
<?php
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
class TestMail extends Mailable
{
use Queueable, SerializesModels;
public $details;
/**
* Create a new message instance.
*
* @return void
*/
public function __construct($details)
{
$this->details = $details;
}
/**
* Build the message.
*
* @return $this
*/
public function build()
{
return $this->subject('Test Mail from Veronica')->view('mail');
}
}
最后是mail.blade.php:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Test Mail</title>
</head>
<body>
<h1>{{$details['title']}}</h1>
<p>{{$details['body']}}</p>
<p>Thank you</p>
</body>
</html>
这就是我修改的所有内容,正如我所说,如果我转到 http://localhost:8000/send 我可以看到“已发送电子邮件”,但我没有收到邮件。
如果可以我想问另一件事,下一步是在邮件中附加一个带有一些信息的 .pdf,我知道我必须使用 ->attachData("document.pdf", $pdf) ,但我必须把它放在哪里?
非常感谢您的帮助!
【问题讨论】:
-
配置您的详细信息后,您是否使用
php artisan config:clear清除了配置缓存? .从控制器中删除重复的类use App\Http\Requests;和use App\Http\Controllers\Controller;。您已经在控制器顶部定义了这些。 -
是的,我已经在配置后完成了,但它不起作用。哦,对不起,我要删除重复的课程,没有看到他们!谢谢!
-
您应该在构建方法中附加在可邮寄类 (TestMail) 中的文件。你的代码看起来不错。问题可能与 Gmail 相关,因为您是从本地机器调用 SMTP,而没有 https。有可能,Gmail 会将您的邮件标记为危险邮件。发送邮件尝试dump return,说不定会有什么问题(
dd(Mail::to("receivermail@gmail.com")->send(new TestMail($details));)) -
它返回'null',也就是说它没有发送任何东西?
-
代码看起来不错,我的建议是首先尝试在 MailTrap 等服务中捕获这些电子邮件或使用 Laravel Log,因为我认为该问题可能与您的 Google SMTP 配置有关。
标签: php laravel email laravel-8