【发布时间】:2021-07-02 23:56:56
【问题描述】:
- Laravel 版本:8.27
- PHP 版本
$ php --version:PHP 8.0.3 (cli) - 数据库驱动和版本 $
mysql --version: mysql Ver 8.0.23-0ubuntu0.20.04.1
问题陈述:
我收到 TO 电子邮件 FROM 电子邮件当然不会在 POST 的 Amazon SES 中验证> password/email.
说明:
让 to@example2.com 将通过电子邮件请求密码重置链接。一般from@example1.com会发送密码重置链接。但是,在我的情况下,to@example2.com 正在尝试向自身发送密码重置链接。
在 Amazon SES 中,我们需要验证电子邮件才能通过 SES 服务发送邮件。所以我已经验证了from@example1.com。
注意:两个域是不同的
example1.com和example2.com。example1.com在 Amazon SES 上设置。
例外:
Swift_TransportException (554)
预期响应代码为 250,但收到代码“554”,消息为“554 消息被拒绝:电子邮件地址未验证。以下身份在区域 REGION 中未通过检查:to@example2.com”
配置:
$ php artisan route:list
+--------+----------+-----------------------------------------------+------------------------------------+-------------------------------------------------------------------------------+-------------------------------------------------------+
| Domain | Method | URI | Name | Action | Middleware |
+--------+----------+-----------------------------------------------+------------------------------------+-------------------------------------------------------------------------------+-------------------------------------------------------+
| | POST | password/email | password.email | App\Http\Controllers\Auth\ForgotPasswordController@sendResetLinkEmail | web |
App\Http\Controllers\Auth\ForgotPasswordController.php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\SendsPasswordResetEmails;
class ForgotPasswordController extends Controller
{
use SendsPasswordResetEmails;
vendor\laravel\ui\auth-backend\SendsPasswordResetEmails.php
namespace Illuminate\Foundation\Auth;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Password;
use Illuminate\Validation\ValidationException;
trait SendsPasswordResetEmails
{
public function sendResetLinkEmail(Request $request)
{
$this->validateEmail($request);
$response = $this->broker()->sendResetLink(
$this->credentials($request)
);
return $response == Password::RESET_LINK_SENT
? $this->sendResetLinkResponse($request, $response)
: $this->sendResetLinkFailedResponse($request, $response);
}
vendor\laravel\framework\src\illuminate\Auth\Passwords\PasswordBroker.php
namespace Illuminate\Auth\Passwords;
use Closure;
use Illuminate\Contracts\Auth\CanResetPassword as CanResetPasswordContract;
use Illuminate\Contracts\Auth\PasswordBroker as PasswordBrokerContract;
use Illuminate\Contracts\Auth\UserProvider;
use Illuminate\Support\Arr;
use UnexpectedValueException;
class PasswordBroker implements PasswordBrokerContract
{
public function sendResetLink(array $credentials, Closure $callback = null)
{
$user = $this->getUser($credentials);
if (is_null($user)) {
return static::INVALID_USER;
}
if ($this->tokens->recentlyCreatedToken($user)) {
return static::RESET_THROTTLED;
}
$token = $this->tokens->create($user);
if ($callback) {
$callback($user, $token);
} else {
$user->sendPasswordResetNotification($token);
}
return static::RESET_LINK_SENT;
.env
MAIL_DRIVER="smtp"
MAIL_HOST="test-smtp.region.amazonaws.com"
MAIL_PORT="25"
MAIL_USERNAME="USER..."
MAIL_PASSWORD="PASS..."
MAIL_ENCRYPTION="tls"
MAIL_FROM_ADDRESS="from@example2.com"
MAIL_FROM_NAME="foo"
【问题讨论】:
-
请分享更多细节。如果您的邮件服务器拒绝该邮件,我认为这与 PHP 或 Laravel 无关
-
@NicoHaase,我添加了我的 .env,你可以看到我的设置是正确的。
-
这就是我写的:你的设置很好。您需要向您正在使用的邮件服务器的管理员询问正确的拒绝原因
-
@NicoHaase,我是否需要向 AWS 询问这个问题。因为,我使用的是 Amazon SES。
标签: php laravel laravel-authentication