发送电子邮件时遇到异常

时间:2018-05-07 19:27:22

标签: laravel email laravel-5 smtp laravel-mail

大家好我试图在Laravel中发送电子邮件,并且在使用了这么多配置并且每次我在这里发布相同的例外时,我得到的例外是。

  

预期的回复代码220,但得到了代码"",带有消息""

我在Laravel中配置Mail时使用的步骤如下。

我启用了谷歌两步验证。  使用以下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');
});

任何人都可以指导我做错了吗

1 个答案:

答案 0 :(得分: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

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

首先使用以下命令生成mailable类:

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文件中设置的邮件发送电子邮件。