我知道如何发送电子邮件,但我想知道如何在提交表单后接收来自许多用户的电子邮件?
这是 .env 文件
MAIL_DRIVER=imap
MAIL_HOST=imap.gmail.com
MAIL_PORT=993
[email protected]
MAIL_PASSWORD=mypassword
MAIL_ENCRYPTION=tls
[email protected]
MAIL_FROM_NAME="${APP_NAME}"
这是控制器
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Mail;
use App\Mail\SendMail;
class SendEmailController extends Controller
{
public function index()
{
return view('send_email');
}
function send(Request $request)
{
$this->validate($request, [
'name' => 'required',
'email' => 'required|email',
'message' => 'required'
]);
$data = array(
'name' => $request->name,
'message' => $request->message
);
Mail::to('[email protected]')->send(
new SendMail($data));
return back()->with(
'success',
'Thanks for contacting us!');
}
}
?>
发送邮件.php
<?php
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;
class SendMail extends Mailable
{
use Queueable, SerializesModels;
public $data;
/**
* Create a new message instance.
*
* @return void
*/
public function __construct($data)
{
$this->data = $data;
}
/**
* Build the message.
*
* @return $this
*/
public function build()
{
return $this->subject('form')
->view('dynamic_email_template')
- >with('data', $this->data);
}
}
?>
当我尝试提交时,它说
预期响应代码 220
...但得到一个空洞的回应。
还有如何在控制器中为我的电子邮件中的发件人电子邮件编写代码?
错误是什么?
我需要更改 gmail 或 mail.php 文件中的某些设置吗?
当您发送电子邮件时,用户在网站上执行某些操作,该网站运行一些 PHP 代码,然后访问 SMTP 服务器以发送电子邮件。一切从网站开始。
如果您想对收到的邮件做出响应,那么活动将在(您的系统上)SMTP 服务器收到电子邮件时启动。它不是由网站触发的。
你需要扭转问题,从电子邮件端而不是网站端解决它。
基本的电子邮件设置是这样的:
然后,可以使用 IMAP 服务器从该商店读取数据。
稍微复杂一点的方法如下:
您可以在那里插入额外的步骤,例如使用电子邮件的内容调用 PHP 程序。一种常见的方法是使用 procmail。如果您使用 procmail 或其他东西取决于您的特定电子邮件服务器设置。有关运行 PHP 程序的 procmail 配方,请参阅这个问题。
另一种方法(效率低得多且触发速度不快)是轮询 IMAP 服务器。
这要求 PHP 按计划触发,而不是从网站触发。例如而不是使用 procmail 你可以使用 cron.
您需要访问邮箱,然后确定您尚未处理其中的哪些电子邮件。
PHP 有一个 IMAP 扩展 可以让您扫描邮箱并从中读取邮件。
没有名为 imap 的电子邮件驱动程序。必须是smtp。 Gmail 设置示例;
MAIL_DRIVER=smtp
MAIL_HOST=smtp.googlemail.com
MAIL_PORT=465
[email protected]
MAIL_PASSWORD=yourpassword
MAIL_ENCRYPTION=ssl
您可以在
config/mail.php
中找到可用的邮件驱动程序
如果您想使用现有邮箱接收消息,您也可以使用像EmailEngine这样的东西。它监控 IMAP 连接,如果收到新消息,它会向您的 Laravel 应用程序发送一个 webhook。
是的,据我所知,Laravels Mail 功能仅用于发送,而不是接收。我刚刚偶然发现了 Beyondco - 邮箱。这似乎正是接收邮件所需要的: https://beyondco.de/docs/laravel-mailbox/getting-started/introduction