【问题标题】:how to receive email through laravel?如何通过 laravel 接收邮件?
【发布时间】:2022-01-26 08:21:12
【问题描述】:

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

这是 .env 文件

    MAIL_DRIVER=imap
    MAIL_HOST=imap.gmail.com
    MAIL_PORT=993
    MAIL_USERNAME=myemail@gmail.com
    MAIL_PASSWORD=mypassword
    MAIL_ENCRYPTION=tls
    MAIL_FROM_ADDRESS=myemail@gmail.com
    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('roopabala298@gmail.com')->send(
                     new SendMail($data));
                 return back()->with(
                      'success', 
                      'Thanks for contacting us!');
            }
    }

?>

sendMail.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


    【解决方案1】:

    如果您想使用现有邮箱接收邮件,也可以使用EmailEngine 之类的邮箱。它监控 IMAP 连接,如果收到新消息,它会向你的 Laravel 应用发送一个 webhook。

    【讨论】:

      【解决方案2】:

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

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

      您需要从电子邮件端而不是网站端解决问题。

      基本的电子邮件设置如下所示:

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

      然后,可以使用 IMAP 服务器从该存储中读取数据。

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

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

      您可以在此处插入额外的步骤,例如使用电子邮件的内容调用 PHP 程序。一种常见的方法是使用procmail。如果您使用 procmail 或其他方式,则取决于您设置的特定电子邮件服务器。请参阅 this question 获取运行 PHP 程序的 procmail 配方。


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

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

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

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

      【讨论】:

        【解决方案3】:

        没有名为 imap 的电子邮件驱动程序。它必须是 smtp。示例 gmail 设置;

        MAIL_DRIVER=smtp
        MAIL_HOST=smtp.googlemail.com
        MAIL_PORT=465
        MAIL_USERNAME=your.email@gmail.com
        MAIL_PASSWORD=yourpassword
        MAIL_ENCRYPTION=ssl
        

        您可以在config/mail.php找到可用的邮件驱动程序

        【讨论】:

        • 是的 smtp 用于发送邮件,但我需要使用哪个驱动程序来接收邮件或如何处理传入的邮件?
        猜你喜欢
        • 1970-01-01
        • 2015-07-15
        • 1970-01-01
        • 2014-11-22
        • 1970-01-01
        • 1970-01-01
        • 2012-08-05
        • 2020-12-20
        • 2010-12-15
        相关资源
        最近更新 更多