使用PHP Swiftmailer时,如何解决错误554 5.5.1(无有效收件人)?

Cal*_*ula 1 php email swiftmailer

在测试我们的邮件服务器时,我们偶然遇到了一个错误,该错误阻止了我们通过PHP发送邮件,尽管每个邮箱中的常规发送/接收都可以正常工作。我们正在运行单独的Ubuntu 18.04服务器,该服务器仅具有Mail-in-a-box,且所有必需组件都在运行。

在error.log文本文件中输出

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);
Run Code Online (Sandbox Code Playgroud)

我们尝试的是重新安装所有Mail-in-a-box和所有组件,并检查所有内容是否存在拼写错误。收件人确实存在于我们的邮件服务器上,并且可以通过客户端手动接收和发送邮件。

Ami*_*UIS 7

554 5.5.1错误是SMTP错误“没有有效的接收者”。如果您拼错了收件人地址,则可能会发生这种情况,但如果您没有正确地对传出服务器进行身份验证,也会发生这种情况。

所以问题是abc.xy不是注册域,因此您无法向该地址发送电子邮件。我认为这与您的代码无关。

您可以捕获Swift_TransportException错误并在您自己的代码库中处理它,例如:

try {
    $result = $mailer->send($message);
} 
catch (Swift_TransportException $e) {
    echo $e->getMessage();
}
Run Code Online (Sandbox Code Playgroud)

  • 认证不好!我通过服务器发送电子邮件,该服务器将根据源 IP 和发件人地址的存在进行身份验证。我的发件人地址错误,因此未被视为经过身份验证。 (2认同)

gta*_*ero 7

我已经将这2行添加到laravel(.env文件)中,解决了此错误(554):

MAIL_FROM_ADDRESS=you@email.com
MAIL_FROM_NAME="you@email.com"
Run Code Online (Sandbox Code Playgroud)

在此之后运行此命令以刷新邮件缓存配置:

php artisan config:cache
Run Code Online (Sandbox Code Playgroud)


小智 6

我在 Laravel 中遇到了同样的问题,并通过将“from”更改为“replyTo”来修复它。我认为问题在于发件人域和应用程序服务器域不同。

// in Laravel
// ...
namespace App\Notifications;
// ...
    public function __construct(User $from, string $body)
    {
        $this->from = $from;
        $this->body = $body;
    }
// ...
    public function toMail($notifiable)
    {
        $message = new MailMessage;
        $message->subject('some subject');

        // "no valid recipients" error:
        // $message->from($this->from->email, $this->from->name_full);
        
        // works:
        // sender globally set in .env (MAIL_FROM_NAME, MAIL_FROM_ADDRESS)
        $message->replyTo($this->from->email, $this->from->name_full);
        
        $message->line(new HtmlString(nl2br($this->body)));

        return $message;
    }
Run Code Online (Sandbox Code Playgroud)
// Swiftmailer respectively
// ...
$message = (new Swift_Message('Name: '. $request_name))
    ->setFrom(['contact@abc.xy' => 'contact'])
    ->setReplyTo([$request_email => $request_name])
// ...
Run Code Online (Sandbox Code Playgroud)