【问题标题】:Send an automatic email on Laravel 8在 Laravel 8 上发送自动电子邮件
【发布时间】: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")-&gt;send(new TestMail($details));))
  • 它返回'null',也就是说它没有发送任何东西?
  • 代码看起来不错,我的建议是首先尝试在 MailTrap 等服务中捕获这些电子邮件或使用 Laravel Log,因为我认为该问题可能与您的 Google SMTP 配置有关。

标签: php laravel email laravel-8


【解决方案1】:

您的 laravel 应用可能会被 google 服务阻止为不安全,因此您需要在您的 gmail 帐户中允许新应用。去这个链接:

  1. https://myaccount.google.com/lesssecureapps?pli=1
  2. https://accounts.google.com/b/0/DisplayUnlockCaptcha

并检查安全选项。

授权应用后,需要稍等片刻。 有时更改需要 20-30 分钟才能在 GMAIL 帐户中生效。所以请耐心等待

【讨论】:

    【解决方案2】:

    尝试将MAIL_HOST=smtp.gmail.com 更改为MAIL_HOST=smtp.googlemail.com

    【讨论】:

      【解决方案3】:

      我能够让它工作!我遵循了 Sanam Patel 的想法并使用 MailTrap 发送电子邮件,它成功了!按照我的解决方案,也许它对有同样问题的人有用。

      这是.env文件(和原来的差不多):

      MAIL_MAILER=smtp
      MAIL_HOST=smtp.gmail.com
      MAIL_PORT=587
      MAIL_USERNAME=mymail@gmail.com
      MAIL_PASSWORD=mypassword
      MAIL_ENCRYPTION=tls
      MAIL_FROM_ADDRESS=null
      MAIL_FROM_NAME="${APP_NAME}"
      

      在 config/mail.php 我已将默认设置更改为 mailgun:

      'default' => env('MAIL_MAILER', 'mailgun'),
      

      和 smtp:

      'mailers' => [
              'smtp' => [
                  'transport' => 'smtp',
                  'host' => env('MAIL_HOST', 'smtp.mailgun.org'),
                  'port' => env('MAIL_PORT', 587),
                  'encryption' => env('MAIL_ENCRYPTION', 'tls'),
                  'username' => env('MAIL_USERNAME'),
                  'password' => env('MAIL_PASSWORD'),
                  'timeout' => null,
                  'auth_mode' => null,
              ],
      

      使用 php artisan make:mail Mail 我已经创建了我的 Mail.php,我是这样制作的:

      <?php
      
      namespace App\Mail;
      
      use Illuminate\Bus\Queueable;
      use Illuminate\Contracts\Queue\ShouldQueue;
      use Illuminate\Mail\Mailable;
      use Illuminate\Queue\SerializesModels;
      
      class Mail extends Mailable
      {
          use Queueable, SerializesModels;
      
          /**
           * Create a new message instance.
           *
           * @return void
           */
          public function __construct()
          {
              //
          }
      
          /**
           * Build the message.
           *
           * @return $this
           */
          public function build()
          {
              return $this->from('mymail@gmail.com', 'Veronica')
                      ->view('email');
          }
      }
      

      查看电子邮件是一个简单的刀片。 那么mailController.php就是:

      <?php
      
      namespace App\Http\Controllers;
      
      use App\Http\Controllers\Controller;
      use App\Mail\Uscita;
      use Illuminate\Http\Request;
      use Illuminate\Support\Facades\Mail;
      
      class mailController extends Controller
      {
          /**
           * Ship the given order.
           *
           * @param  \Illuminate\Http\Request  $request
           * @return \Illuminate\Http\Response
           */
          public function send(Request $request)
          {
              Mail::to('receivermail@gmail.com')->send(new Uscita());
          }
      }
      

      路线和之前一样:

      Route::get('/send', 'App\Http\Controllers\mailController@send');
      

      所有这一切都完美无缺,现在我将插入请求的数据并完成。谢谢大家的帮助!

      【讨论】:

        猜你喜欢
        • 2020-05-06
        • 1970-01-01
        • 2021-08-05
        • 2011-10-22
        • 2013-08-22
        • 2021-01-05
        • 2021-08-28
        • 1970-01-01
        相关资源
        最近更新 更多