在测试我们的邮件服务器时,我们偶然发现了一个错误,阻止我们通过PHP发送邮件,尽管每个邮箱正常的发送/接收工作没有任何问题。我们正在运行一个单独的Ubuntu 18.04服务器,它只有邮箱,所有需要的组件都在运行。
错误日志文本文件中的输出
PHP致命错误:未捕获的Swift_TransportException异常:预期响应代码354,但得到代码"554",消息"554 5.5.1错误:没有有效的收件人\r\n "
PHP文件
$request_email = $_POST['request-email'];
$request_name = $_POST['request-name'];
$request_text = $_POST['request-text'];
$transport = (new Swift_SmtpTransport('data.abc.xy', 587, 'tls'))
->setUsername('contact@abc.xy')
->setPassword('*******')
->setStreamOptions(array('ssl' => array('allow_self_signed' => true, 'verify_peer' => false)));
$mailer = (new Swift_Mailer($transport));
$message = (new Swift_Message('Name: '. $request_name))
->setFrom(['' . $request_email => '' . $request_name])
->setTo(['contact@abc.xy'])
->setBody('E-Mail: ' . $request_email . $request_text)
->setContentType("text/html");
$result = $mailer->send($message);
我们所尝试的是重新安装所有Mail-in-a-box和所有组件,并检查所有的拼写错误。收件人确实存在于我们的邮件服务器上,可以通过客户端手动接收和发送邮件。
6条答案
按热度按时间iq0todco1#
我已经解决了这个错误(554)只是添加到laravel(.env文件)这2行:
最后,运行以下命令刷新邮件缓存配置:
ckx4rj1h2#
554 5.5.1错误是SMTP错误“无有效收件人"。如果收件人地址拼写错误,则可能发生此错误,但如果未正确验证发送服务器,也可能发生此错误。
所以问题是abc.xy不是一个注册域名,所以你不能发送电子邮件到这个地址。我认为这与你的代码无关。
您可以捕获
Swift_TransportException
错误并在自己的代码库中处理它,如下所示:iaqfqrcu3#
我在Laravel中也遇到过同样的问题,我通过将"from"改为"replyTo"来解决这个问题。我相信问题出在发件人和应用服务器的域名不同时。
w46czmvw4#
我通过确保env文件中设置的电子邮件地址解决了这个问题
MAIL_USERNAME=example@example.com
与我的自定义通知邮件类“toMail”函数中的“from”地址相同
->from('example@example.com','My app name')
似乎有些电子邮件服务觉得奇怪的是,该应用程序使用一个凭据(env凭据)发送电子邮件,但另一个电子邮件地址被屏蔽为发件人。
更好的解决方案可能是永远不要在通知类中设置“from”地址。
8aqjt8rx5#
还有一件事是,你的代码可能一切正常,但收件人地址根本不存在。我们有很多来自其他公司的客户,随着时间的推移,人们只是改变了他们的工作,他们使用的电子邮件地址被删除
因此,如果您尝试向不存在电子邮件地址发送电子邮件,您将得到相同的错误。
rlcwz9us6#
在我的例子中,我得到这个错误是因为我忘记在收件人的域中设置MX记录,所以应用程序不知道将电子邮件发送到哪里。
另一个原因可能是域名被列入黑名单,检查垃圾邮件