1

大家好,我正在尝试在 Laravel 中发送一封电子邮件,并且在使用了如此多的配置并且每次我在这里发布时都得到相同的异常之后,我得到的异常是。

预期响应代码 220,但得到代码“”,带有消息“”

我在 Laravel 中配置邮件的步骤如下。

我启用了谷歌两步验证。使用以下 MAIL 变量更改了 .env 文件。

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=email@domain.com
MAIL_PASSWORD=email_password
MAIL_ENCRYPTION=tls

最后在我的 config/mail.php 文件中,我像这样更改设置。

return [
'driver' => env('MAIL_DRIVER', 'smtp'),
'host' => env('MAIL_HOST', 'smtp.gmail.com'),
'port' => env('MAIL_PORT', 587),
'from' => ['address' => '<<your email>>', 'name' => '<<any name>>'],
'encryption' => env('MAIL_ENCRYPTION', 'tls'),
'username' => env('MAIL_USERNAME'),
'password' => env('MAIL_PASSWORD'),
'sendmail' => '/usr/sbin/sendmail -bs',
'pretend' => false,
];

这是我用来发送电子邮件的功能

$mail = Mail::raw($msg, function ($message) {
   $message->to('email@domain.com');
});

谁能指导我我做错了什么

4

1 回答 1

0

您实际上不需要修改config/mail.php它使用您的.env. 这个电子邮件配置在.env我的项目中工作:

MAIL_DRIVER=smtp
MAIL_HOST=smtp.googlemail.com
MAIL_PORT=465
MAIL_USERNAME=mymail@gmail.com
MAIL_PASSWORD=mypassword
MAIL_ENCRYPTION=ssl

如果您使用的是 gmail,则需要从您的 google 帐户获取 API 密码。

因此,请先执行以下操作:

 1. Login to your gmail Account
 2. Go to your preferences
 3. Search for Sign In And Security
 4. Sign In to google -> enable two step verification
 5. There you can generate an app password which you have to use in your `.env` file

此外,请务必在更改.env配置后清除配置缓存。

运行以下命令:

php artisan config:cache

在您的控制器中,您可以使用以下 Schema 发送电子邮件:

首先使用以下命令生成一个可邮寄的类:

php artisan make:mail InquirySent

该类看起来像这样:

class InquirySent extends Mailable
{
    use Queueable, SerializesModels;

    public $data;

    public function __construct($data)
    {
        $this->data = $data;
    }

    public function build()
    {
        return $this->view('emails.contacts.inquiry'); // this is the location where you 'style' your view for your mails
    }
}

在您的控制器中,您可以执行以下操作以发送电子邮件。

class ContactController extends Controller
{
    protected $myMail;

    public function __construct() {
        $this->myMail = env('MAIL_USERNAME');
    }

    public function sent(ContactRequest $request)
    {
        $data = $request->all();       
        // new implementation using a mailable class
        Mail::to($this->myMail)->send(new InquirySent($data));
    }
}

如您所见,您正在向.env文件中设置的邮件发送电子邮件。

于 2018-05-07T20:13:59.717 回答