我有一个使用Laravel5.2API的AngularJS 1.5应用程序,我正在尝试在应用程序的不同位置发送电子邮件。因此,我可以向Laravel发送数据,并将其记录在我指定的表中,但当它发送一封确认电子邮件时,它会给我这个错误,并显示HTTP500状态代码:MethodNotAllowedHttpException
奇怪的是,它在我的笔记本电脑上的本地开发中工作得很好。但在亚马逊网络服务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调用。
这里我漏掉了什么?
非常感谢您的帮助!
发布于 2016-03-01 11:11:26
这里有一些东西需要检查,
1:是否确定已将.env文件设置为使用正确的SendGrid服务器设置。如果您忘记在.env中设置此功能,您将使用内部邮件功能。与其使用SendGrid,我建议将其保留在亚马逊内部,以获得更多的可靠性。切换到Amazon SES对您来说可能是一个很好的选择。
2:如果您使用的是内部邮件系统,这里有一篇关于来自亚马逊EC2实例的邮件的非常好的文章:http://shlomoswidler.com/2009/07/sending-email-from-ec2.html
对于其他可能来这里寻求帮助的人来说,这只是对1号的一个提醒。要在Laravel中设置您的邮件服务以使用smtp服务,请打开您的config/mail.php文件并设置驱动程序以使用您的提供商(如果由laravel提供)。这可以通过直接编辑文件或在.env文件中设置环境变量MAIL_DRIVER来完成。
https://stackoverflow.com/questions/35711740
复制相似问题