如何使用laravel发送电子邮件?

时间:2018-01-24 05:05:01

标签: php laravel laravel-5.2

应用程序没有问题,我不更改配置。 一个月后,我尝试了程序出错。

错误讯息:

  

StreamBuffer.php第269行中的Swift_TransportException:连接   无法与主机smtp.gmail.com建立[#0]

env的这个配置:

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=465
MAIL_USERNAME=mr.xxxxxxx@gmail.com
MAIL_PASSWORD=mypassword
MAIL_ENCRYPTION=ssl

mail.php的这种配置:

<?php
return [

'driver' => env('MAIL_DRIVER', 'smtp'),

'host' => env('MAIL_HOST', 'smtp.gmail.com'),

'port' => env('MAIL_PORT', 465),

'from' => ['address' => 'muhamadramadhan95@gmail.com', 'name' => 'Ramadhan'],

'encryption' => env('MAIL_ENCRYPTION', 'ssl'),

'username' => env('MAIL_USERNAME'),

'password' => env('MAIL_PASSWORD'),

'sendmail' => '/usr/sbin/sendmail -bs',

];

请帮助,非常感谢。

3 个答案:

答案 0 :(得分:2)

您可以使用sendgrid。它非常简单。

<强> 步骤1: 将SendGrid添加到 composer.json

"require":  
{ 
"sendgrid/sendgrid": "~6.0"
}

<强> 步骤2:

<。>在.env文件中设置你的sendgrid api密钥

SENDGRID_API_KEY= Your Sendgrid API key 

<强> 步骤-3:

在控制器中添加以下代码

$from = new \SendGrid\Email(null, "your email id");//place senders email id
                        $subject = "checking Email service"; //*your subject goes here*
                        $to = new \SendGrid\Email("Example User", 'example@gmail.com');  //*place reciever email id*
                        $content = new \SendGrid\Content("text/html", $otp);
                        $mail = new \SendGrid\Mail($from, $subject, $to, $content);

                        $apiKey = env('SENDGRID_API_KEY');// set in .env file
                        $sg = new \SendGrid($apiKey);

                        $response = $sg->client->mail()->send()->post($mail);
                        return json_encode(['code' => 200, 'status' => 'Success', 'message' => 'mail sent Sucessfully]);

为了更好地理解,请点击以下链接

https://github.com/sendgrid/sendgrid-php

答案 1 :(得分:0)

尝试更改encryption文件中的port.env

MAIL_ENCRYPTION=tls
MAIL_PORT=587

然后运行:

$php artisan config:clear

或者,如果这不起作用,请尝试下面的黑客攻击:

在第263行的_establishSocketConnection()中将以下行添加到Swift/Transport/StreamBuffer.php方法:

$options['ssl']['verify_peer'] = FALSE;

$options['ssl']['verify_peer_name'] = FALSE;

注意: 上面指定的hack只是一种解决方法,可以在Swift包更新时随时覆盖。因此,如果您尝试使用此方法,请记住这一点。

答案 2 :(得分:0)

尝试使用mailgun。在这里,我发布了使用它的步骤:

第1步: 获取Mailgun API,注册Mailgun,添加域名

第2步:配置Laravel应用程序

config/services.php文件中,添加以下内容:

'mailgun' => [
    'domain' => env('MAILGUN_DOMAIN'),
    'secret' => env('MAILGUN_SECRET'),
],

接下来,您需要转到.env文件,并将“MAIL_USERNAME”“MAIL_PASSWORD”“MAILGUN_DOMAIN”“MAILGUN_SECRET”替换为您自己的文件。< / p>

MAIL_DRIVER=smtp
MAIL_HOST=smtp.mailgun.org
MAIL_PORT=2525
MAIL_USERNAME=postmaster@yourdomain.com
MAIL_PASSWORD=yourmailgunpassword
MAIL_ENCRYPTION=null

MAILGUN_DOMAIN=yourdomain.com
MAILGUN_SECRET=key-YourMailGunSecret

最后一步,在同一个文件中,您还需要添加并用自己的值替换值:

MAIL_FROM_ADDRESS: hello@yourdomain.com
MAIL_FROM_NAME: John

那就是它!希望这会对你有所帮助!