如何通过laravel接收邮件?

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

我知道如何发送电子邮件,但我想知道如何在提交表单后接收来自许多用户的电子邮件?

这是 .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 文件中的某些设置吗?

html laravel email
4个回答
1
投票

当您发送电子邮件时,用户在网站上执行某些操作,该网站运行一些 PHP 代码,然后访问 SMTP 服务器以发送电子邮件。一切从网站开始。

如果您想对收到的邮件做出响应,那么活动将在(您的系统上)SMTP 服务器收到电子邮件时启动。它不是由网站触发的。

你需要扭转问题,从电子邮件端而不是网站端解决它。

基本的电子邮件设置是这样的:

  1. 邮件到达SMTP服务器
  2. SMTP 服务器存储该电子邮件

然后,可以使用 IMAP 服务器从该商店读取数据。

稍微复杂一点的方法如下:

  1. 邮件到达SMTP服务器
  2. SMTP 服务器通过垃圾邮件检查器传递电子邮件
  3. SMTP 服务器根据垃圾邮件检查器的结果存储或丢弃该电子邮件

您可以在那里插入额外的步骤,例如使用电子邮件的内容调用 PHP 程序。一种常见的方法是使用 procmail。如果您使用 procmail 或其他东西取决于您的特定电子邮件服务器设置。有关运行 PHP 程序的 procmail 配方,请参阅这个问题


另一种方法(效率低得多且触发速度不快)是轮询 IMAP 服务器。

这要求 PHP 按计划触发,而不是从网站触发。例如而不是使用 procmail 你可以使用 cron.

您需要访问邮箱,然后确定您尚未处理其中的哪些电子邮件。

PHP 有一个 IMAP 扩展 可以让您扫描邮箱并从中读取邮件。


0
投票

没有名为 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

中找到可用的邮件驱动程序

0
投票

如果您想使用现有邮箱接收消息,您也可以使用像EmailEngine这样的东西。它监控 IMAP 连接,如果收到新消息,它会向您的 Laravel 应用程序发送一个 webhook。


0
投票

是的,据我所知,Laravels Mail 功能仅用于发送,而不是接收。我刚刚偶然发现了 Beyondco - 邮箱。这似乎正是接收邮件所需要的: https://beyondco.de/docs/laravel-mailbox/getting-started/introduction

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