web-dev-qa-db-fra.com

Envoi d'email avec mailgun in laravel error

Bonjour, j’ai simplement essayé d’envoyer un courrier électronique à Laravel, j’ai lu la documentation et cela a semblé si facile, mais chaque fois que j’essaie, j’obtiens erreur après erreur, j’ai essayé à sendgrid de ne pas fonctionner et maintenant j’essaie d’utiliser mailgun mais j'ai des problèmes avec elle aussi.

C'est mon code ::

$data = array();

        Mail::send('emails.auth.activate', $data, function($message)
        {
            $message->to('[email protected]', 'John Doe')->subject('This is a demo!');
        });

C'est l'erreur que j'obtiens:

GuzzleHttp \ Exception \ ClientException (400)

Client error response [url] https://api.mailgun.net/v2/mail.xxxxxxx.com/messages.mime [status code] 400 [reason phrase] BAD REQUEST 

Mail Config:

<?php

return array(

    /*
    |--------------------------------------------------------------------------
    | Mail Driver
    |--------------------------------------------------------------------------
    |
    | Laravel supports both SMTP and PHP's "mail" function as drivers for the
    | sending of e-mail. You may specify which one you're using throughout
    | your application here. By default, Laravel is setup for SMTP mail.
    |
    | Supported: "smtp", "mail", "sendmail", "mailgun", "mandrill", "log"
    |
    */

    'driver' => 'mailgun',

    'Host' => 'sandboxXXXXXXXXXXXXXXXXXXXXXXXXXXX.mailgun.org',

    'port' => 587,

    'from' => array('address' => '[email protected]', 'name' => 'Xxxxxxxx'),

    'encryption' => 'tls',

    'username' => '[email protected]',

    'password' => 'xxxxxxxxxxx',

    'sendmail' => '/usr/sbin/sendmail -bs',

    'pretend' => true,

);
9
user3718908

Suivez ces étapes

  1. Tout d'abord, installez le paquetage Guzzle en ajoutant "guzzlehttp/guzzle": "~4.0" ligne à l'intérieur de composer.json
  2. Mettre à jour le compositeur en utilisant composer update
  3. Créez votre compte sur mailgun à partir de http://www.mailgun.com/ . Après la création du compte, veuillez noter le sous-domaine du pistolet mail créé comme sandboxXXXXXXXXXXXXXXXXXXXXXXXXXXXX.mailgun.org et la clé API créée comme key-65c33f1xxxxxxxxxxxxxxxxxxxx.
  4. Aller au fichier config/services.php et remplacer

    'mailgun' => array(
        'domain' => '',
        'secret' => '',
    ),
    

    avec

    'mailgun' => array(
        'domain' => 'sandboxXXXXXXXXXXXXXXXXXXXXXXXXXXXX.mailgun.org',
        'secret' => 'key-65c33f1xxxxxxxxxxxxxxxxxxxx',
    ),
    

    Si vous voulez créer votre propre sous-domaine, vous pouvez créer et attribuer au domaine (au lieu de cela)

  5. Configurez config/mail.php comme ceci

    'driver' => 'mailgun',
    'Host' => 'smtp.mailgun.org',
    'port' => 587,
    'from' => array('address' => '[email protected]', 'name' => 'Xxxxxxxx'),
    'encryption' => 'tls',
    'username' => null,
    'password' => null,
    'sendmail' => '/usr/sbin/sendmail -bs',
    'pretend' => false
    

Notez qu'il n'est pas nécessaire de fournir un nom d'utilisateur et un mot de passe pour cela. Mailgun se chargera de cela. 

Essayez d'envoyer un email maintenant. J'espère que cela t'aides. Bonne chance!

28
srbhattarai

Je voulais juste ajouter une raison possible de l'erreur. J'ai reçu cette erreur en utilisant le mode bac à sable alors que je n'avais pas encore défini le destinataire autorisé. Lorsque je me suis connecté à Mailgun et que j'ai ajouté le destinataire souhaité à la liste "Destinataire autorisé", l'erreur a disparu.

10
MMMTroy

J'ai le même problème et je reçois toujours l'erreur suivante: Réponse d'erreur du client [url] https://api.mailgun.net/v3//messages.mime 404 non trouvé

Il n'y a pas beaucoup d'écriture sur cette erreur écrite en ligne pour Laravel 5.1 que j'utilise. Il s'avère que dans config-> services, l'installation par défaut de Laravel 5.1 est fournie avec:

'domain' => env('');

'secret' => env('');

pour une raison quelconque, si vous gardez votre domaine et votre secret enveloppés dans env comme lors de l'installation par défaut, MailGunTransport ne le récupère pas. Il suffit donc de le définir comme suit:

domain' =>'yourdomain';

'secret' => 'yoursecret';

J'espère que cela aidera puisque je suis sûr que je ne suis pas le seul à avoir probablement rencontré ce problème.

1
max234435

J'ai également bloqué une fois la configuration de Mailgun dans Laravel 5.1 et ce qui a fonctionné pour moi est le processus suivant. J'espère que ça aide quelqu'un:

1) Installez le paquetage en ajoutant "guzzlehttp/guzzle": "5.0" à l'intérieur de composer.json comme ceci:

"require": {
    "guzzlehttp/guzzle": "~5.0"
},

2) Mettez à jour le compositeur en utilisant Sudo composer update dans le terminal.

3) Redémarrez Apache.

4) Créez le compte dans http://www.mailgun.com . Cela va créer un Sub Domain et un API Key.

5) Ajoutez le Sub Domain et le API Key dans le .env comme ceci:

MAILGUN_DOMAIN=sandbox8...........3b.mailgun.org
MAILGUN_SECRET=key-9..................04

6) Et dans le fichier services.php, ajoutez la ligne suivante:

'mailgun' => [
    'domain' => env('MAILGUN_DOMAIN'),
    'secret' => env('MAILGUN_SECRET'),
],

7) Maintenant, le mail.php comme suit:

'driver' => 'mailgun',
'Host' => 'smtp.mailgun.org',
'port' =>  587,
'from' => ['address' => null, 'name' => null],
'encryption' => 'tls',
'username' => null,
'password' => null,
'sendmail' => '/usr/sbin/sendmail -bs',
'pretend' => false,

J'espère que cela fonctionne pour vous tous.

0
M.J

J'ai eu ce problème car je n'avais pas activé mon compte mailgun. Une fois activé, tout fonctionnait bien

0
Mark Hague

Vous pourrez envoyer des messages aux personnes du même domaine, sauf si vous les avez ajoutés à la catégorie de destinataires autorisés. Si vous ajoutez quelqu'un à la catégorie de destinataires autorisés, il devra approuver la demande, puis seulement serait capable de recevoir les emails.

0
Akshay Singh