【问题标题】:What is the best way to sent out email in Laravel 5?在 Laravel 5 中发送电子邮件的最佳方式是什么?
【发布时间】:2015-08-04 11:54:51
【问题描述】:

我在 Laravel 5 应用程序中发送电子邮件时遇到问题。


这是我的邮件功能

电子邮件 = test@gmail.com

Mail::send('emails.activation', array(

  'username'=>$user->username,
  'name'=>$user->name,
  'code'=>$user->code,
  'email'=>$user->email

  ),
function($message){
  $message->from(env('MAIL_USERNAME'),'Site');
  $message->to('email', 'name' )->subject('Site Activation ');
});

我不断得到


更新

.env 文件中的邮件配置

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=465
MAIL_USERNAME=donotreply@site.com
MAIL_PASSWORD=***********

新错误


我对正在发生的事情非常好奇。 我做错了什么?

【问题讨论】:

  • RFC 2822, 3.6.2 说明了什么?
  • 不符合?那是什么意思?我的电子邮件有效。
  • 发件人、发件人或回复字段等电子邮件地址字段有问题。 Swift Mailer 严格遵循 RFC 标准,避免邮件被垃圾邮件检查工具捕获。
  • 请不要误会我的意思,但我的test@gmail.com 有什么问题?

标签: php email laravel laravel-4 laravel-5


【解决方案1】:

这意味着发件人、发件人或回复字段等电子邮件地址字段有问题。

Swift Mailer 严格遵循 RFC 标准,以避免电子邮件被垃圾邮件检查工具捕获。

test@gmail.com 看起来不像普通的电子邮件地址,甚至根本不存在。

尝试使用不同的电子邮件地址示例发送给我

Mail::send('emails.activation', array(

  'username'=>$user->username,
  'name'=>$user->name,
  'code'=>$user->code,
  'email'=>$user->email

  ),
function($message){
  $message->from('siteEmailaddress@domain.com'),'Site');
  $message->to('avalidEmailaddress@domain.com', 'name' )->subject('Site Activation ');

});

另外,如果您希望在下面使用 gmail 作为 SMTP 服务器:

'driver' => 'smtp',
'host' => 'smtp.gmail.com',
'port' => 465,
'encryption' => 'ssl',
'username' => 'your-email@gmail.com',
'password' => 'your-password',

已编辑

注意:MAIL_USERNAME 必须是您的 @gmail.com 电子邮件地址,例如myname@gmail.com 否则你会得到 Connection could not be established with host smtp.gmail.com 错误

如果无法解决此异常,请打开 app\Exceptions\handler.php

在渲染方法中添加这个:

    /**
     * Render an exception into an HTTP response.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Exception  $e
     * @return \Illuminate\Http\Response
     */
    public function render($request, Exception $e)
    {


        if ($e instanceof Swift_RfcComplianceException){
            //redirect to form
            //You can also delete the user account here if already created or do other stuffs
            return redirect($request->fullUrl())->with('error',"We have issue sending you an email");

        }


        .......
        
    }

注意:记得在 handler.php 的顶部添加use Swift_RfcComplianceException;

【讨论】:

  • 您的 SMTP 配置正是我所拥有的。
  • 感谢您帮助我,但我仍然收到 timeout 错误消息。我很好奇????
  • 当我设置MAIL_USERNAME=my-email@gmail.comgmail 作为它的一部分。有用。我只是想给你一个更新。也许您可以将其作为回答的一部分并加粗
【解决方案2】:

看起来“发件人”地址无效,您当前正在使用 env 调用,但 100% 不知道它返回的内容。

出于测试目的,尝试将from 地址更改为真实的电子邮件地址。

【讨论】:

  • 更改为真实电子邮件后 - 我收到此错误Connection could not be established with host smtp.gmail.com [Operation timed out #60]
  • 好的,更进一步 ;-)。不过,您的 SMTP 服务器设置似乎不正确。如果您想使用 gmail SMTP 服务器,您需要提供用户名和密码。尝试使用例如 SMTP 服务器您的服务提供商(通常不需要身份验证)。
  • 我做到了。我在.env 文件中提供/配置所有内容。
  • 您对如何修复该超时错误消息有什么建议吗?
猜你喜欢
  • 2013-02-12
  • 1970-01-01
  • 2010-09-08
  • 2018-02-21
  • 1970-01-01
  • 2011-06-18
  • 2014-08-19
  • 1970-01-01
相关资源
最近更新 更多