4
votes

Comment résoudre l'erreur 554 5.5.1 (aucun destinataire valide) lors de l'utilisation de PHP Swiftmailer?

Lors du test de notre serveur de messagerie, nous sommes tombés sur une erreur qui nous empêche d'envoyer des mails via PHP, bien que l'envoi / la réception réguliers par Mail-in-a-box fonctionne sans aucun problème. Nous exécutons un serveur Ubuntu 18.04 distinct qui n'a que Mail-in-a-box avec tous ses composants nécessaires en cours d'exécution.

Sortie dans le fichier texte error.log

Erreur fatale PHP: Swift_TransportException non interceptée: réponse attendue code 354 mais a reçu le code "554", avec le message "554 5.5.1 Erreur: non valide destinataires \ r \ n "

Fichier 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);

Ce que nous avons essayé, c'est de réinstaller tout Mail-in -a-box et tous les composants et vérifier tout pour les fautes d'orthographe. Le participant existe sur notre serveur de messagerie et peut recevoir et envoyer des mails manuellement via le client.


0 commentaires

4 Réponses :


6
votes

L'erreur 554 5.5.1 est l'erreur SMTP " aucun destinataire valide ". Cela peut se produire si vous avez mal orthographié les adresses des destinataires, mais cela peut également se produire si vous ne vous authentifiez pas correctement auprès du serveur sortant.

Le problème est que abc.xy n'est pas un domaine enregistré, vous ne pouvez donc pas envoyer d'e-mail à cette adresse. Je pense que ce n'est pas quelque chose lié à votre code.

Vous pouvez attraper l'erreur Swift_TransportException et la gérer dans votre propre base de code comme:

try {
    $result = $mailer->send($message);
} 
catch (Swift_TransportException $e) {
    echo $e->getMessage();
}


2 commentaires

Mauvaise authentification! J'envoyais des e-mails via un serveur, qui ferait l'authentification basée sur l'adresse IP source et l'existence de l'adresse d'expédition. J'avais une mauvaise adresse d'expédition et je n'ai donc pas été considéré comme authentifié.


J'ai le même problème et pour moi, il semble que cela soit causé par des caractères accentués dans le nom de l'expéditeur



14
votes

J'ai résolu cette erreur (554) en ajoutant simplement à laravel (fichier .env) ces 2 lignes:

php artisan config:cache

Après cela, exécutez cette commande pour vider la configuration du cache de messagerie:

MAIL_FROM_ADDRESS=you@email.com
MAIL_FROM_NAME="you@email.com"


0 commentaires

0
votes

J'ai eu le même problème dans Laravel et je l'ai résolu en changeant "de" en "ReplyTo". Je pense que le problème vient du fait que les domaines de l'expéditeur et du serveur d'applications diffèrent.

// Swiftmailer respectively
// ...
$message = (new Swift_Message('Name: '. $request_name))
    ->setFrom(['contact@abc.xy' => 'contact'])
    ->setReplyTo([$request_email => $request_name])
// ...
// 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;
    }


0 commentaires

0
votes

J'ai résolu ce problème en m'assurant que l'adresse e-mail définie dans le fichier env

MAIL_USERNAME=example@example.com

est la même que l'adresse "de" dans la fonction toMail de ma classe de courrier de notification personnalisée

-> from ('example@example.com ',' Mon nom d'application ')

Il semble que certains services de messagerie trouvent étrange que l'application envoie un e-mail en utilisant un seul identifiant (identifiants d'environnement) mais qu'une adresse e-mail différente soit masquée en tant qu'expéditeur.

Une meilleure solution serait probablement de ne jamais définir d'adresse "de" dans vos classes de notification.


0 commentaires