【问题标题】:Email does not send in Laravel API after writing to database写入数据库后,电子邮件未在 Laravel API 中发送
【发布时间】:2016-02-29 23:21:32
【问题描述】:

我有一个使用 Laravel 5.2 API 的 AngularJS 1.5 应用程序,我试图在应用程序的不同点发送电子邮件。所以我可以向 Laravel 发送数据,它会记录在我指定的表格中,但是当它发送确认电子邮件时,它会给我这个错误,HTTP 状态代码为 500:MethodNotAllowedHttpException

奇怪的是,它在我的笔记本电脑上的本地开发中运行良好。但是 AWS EC2 实例上的功能相同,并且在发送任何电子邮件时都会失败。我正在使用 SendGrid 来管理发送电子邮件,但我认为我不需要为此更改任何设置。

例如:

    $emailUser = array();
    $emailUser['email'] = $request->email;
    $emailUser['first_name'] = $request->first_name;
    $emailUser['last_name'] = $request->last_name;
    $emailUser['randomStr'] = str_random(36);
    $emailUser['remove_dtm'] = Carbon::now()->addWeeks(2);

    //Add a password reset set to 2 weeks out for the user to register
    DB::table('password_resets')->insert([
        'email' => $emailUser['email'], 
        'token' => $emailUser['randomStr'], 
        'remove_dtm' => $emailUser['remove_dtm']
        ]);

    Mail::send('email.registered_user', $emailUser, function($message) use ($emailUser)
    {   $message->to($emailUser['email'], $emailUser['first_name'] . ' ' . $emailUser['last_name']);
        $message->from('WSCUSTOMERPO@waterstoneco.com', 'Waterstone Faucets');
        $message->replyTo('WSCUSTOMERPO@waterstoneco.com', 'Waterstone Faucets');
        $message->subject("Welcome to the Waterstone Faucets Portal!");
    });

当我尝试重置用户密码时,它将在password_reset 表中创建记录,但不会在实时站点上发送电子邮件。同样的功能在我的笔记本电脑上也能正常工作。我检查了我在 Angular 端发帖,并且 Laravel API 在运行这个函数时期待一个 post HTTP 调用。

我在这里错过了什么?

非常感谢您的帮助!

【问题讨论】:

  • 你在使用 smtp 吗?您的现场环境可能会阻止它。
  • 检查您的垃圾邮件箱。
  • 尝试设置驱动记录,只是为了检查问题是否是电子邮件驱动而不是代码引起的

标签: angularjs laravel amazon-ec2 sendgrid


【解决方案1】:

这里有几件事要检查,

1:您确定您的.env 文件设置为使用正确的SMTP 服务器设置来使用SendGrid。如果您忘记在.env 中进行设置,您将使用内部邮件功能。我建议不要使用 SendGrid,而是将其保留在 Amazon 内部以获得更高的可靠性。切换到 Amazon SES 对您来说可能是一个不错的选择。

2:如果您使用的是内部邮件系统,这里有一篇关于来自 Amazon EC2 实例的邮件的非常好的文章:http://shlomoswidler.com/2009/07/sending-email-from-ec2.html

只是提醒其他可能来这里寻求帮助的人的第 1 点。要将 Laravel 中的邮件服务设置为使用 smtp 服务,请打开您的 config/mail.php 文件并将驱动程序设置为使用您的提供程序(如果由 laravel 提供)。这可以通过直接编辑文件或在.env 文件中设置环境变量MAIL_DRIVER 来完成。

【讨论】:

    猜你喜欢
    • 2020-06-02
    • 2019-10-18
    • 2021-03-09
    • 1970-01-01
    • 1970-01-01
    • 2021-08-06
    • 1970-01-01
    • 2018-03-27
    • 2018-12-08
    相关资源
    最近更新 更多