我正在尝试设置包含“密码重置”功能的Laravel身份验证。但是,当我尝试发送电子邮件时,我总是犯错误。我得到的错误是:
Expected response code 250 but got code "550", with message "550 Bad HELO - Host impersonating domain name
我在Cloudflare中使用Laravel 5.6。我的托管人说,这可能是问题所在,但我已经尝试禁用Cloudflare信息中心内的所有Cloudflare DNS功能,但这没有用。我确定我使用了正确的邮件设置,因为它们在我的手机和任何其他设备上都能正常工作。 另外,我已经尝试过切换端口,无论我是否填写有效端口都没关系,它会一直给我这个错误。
答案 0 :(得分:2)
Laravel 5.6 使用 $_SERVER["SERVER_NAME"] 作为你的本地域。 您应该将本地域更改为您的 MAIL_HOST
这对我有用:
config/mail.php
'localdomain' => env('MAIL_HOST')
您应该对供应商进行一些更改: 供应商/swiftmailer/swiftmailer/lib/dependency_maps/transport_deps.php
//->asValue(!empty($_SERVER['SERVER_NAME']) && '' === preg_replace('/(?:^\[)?[a-zA-Z0-9-:\]_]+\.?/', '', $_SERVER['SERVER_NAME']) ? trim($_SERVER['SERVER_NAME'], '[]') : '127.0.0.1')
->asValue(config('mail.localdomain'))
替换注释代码,
我知道这是最糟糕的解决方案,但似乎没有其他解决方案。
答案 1 :(得分:0)
我遇到了同样的问题,我尝试了上面的答案,但它没有帮助我,但是由于奇怪的原因,以下对我有用......
在您的 /config/mail.php 中添加以下行:
'localdomain' => 'localhost'
别问我为什么xD
答案 2 :(得分:0)
@bardia-mazaheri 是对的,但更好的解决方案是这样做:
class AppServiceProvider extends ServiceProvider
{
public function register()
{
// There is a bug in which the Swift library loads 'transport.localdomain' value from $_SERVER['SERVER_NAME']
// which results to wrong host name for email server and causes an error:
// Expected response code 250 but got code "550", with message "550 Bad HELO - Host impersonating domain name
// described here https://stackoverflow.com/questions/55279922/550-bad-helo-host-impersonating-domain-name-laravel
\Swift_DependencyContainer::getInstance()
->register('transport.localdomain')
->asValue('mail.domain.com');
}
}