Envoyer des mails avec Mailgun – utilisation de l'API

 

Dans le chapitre précédent, nous avons découvert Mailgun et son interface de suivi.

Je rappelle que les comptes créés depuis 2017 doivent désormais saisir un numéro de carte bancaire pour avoir le droit d'envoyer des mails et il y a désormais une limite quotidienne de 400 mails/jour. Ce qui rend Mailgun tout de suite beaucoup moins intéressant…

Voyons comment utiliser Mailgun pour expédier des mails.

Envoyer des mails avec l'API

Avec Composer

Si vous souhaitez utiliser l'API en php, le recours à Composer est obligatoire, du moins en théorie. Donc vous devrez l'installer sur votre serveur. C'est une vraie galère.

Si vous êtes en mutualisé, assurez-vous que votre hébergeur propose un accès SSH pour pouvoir envoyer des instructions en ligne de commande car c'est nécessaire pour pouvoir installer Composer. C'est par exemple le cas pour les hébergements mutualisés OVH, sauf pour leur offre de base.

Voici l'exemple fourni sur la doc officielle de Mailgun :

require '../vendor/autoload.php';
use Mailgun\Mailgun;

session_start();
ini_set( 'default_charset', 'ISO-8859-1' );

$mails_via_mailgun=true;
$success_mailgun='Queued. Thank you.';


function send_mailgun_composer($destinataire, $from_nom, $from_email, $subject, $html, $attachment=array()){
 
// Instantiate the client.
 $mgClient = new Mailgun('key-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx');
 $domain = "monsite.com";
 
// Make the call to the client.
 $result = $mgClient->sendMessage($domain, array(
 'from' => $from_nom.' <'.$from_email.'>',
 'to' => $destinataire,
 'subject' => $subject,
 'text' => strip_tags($html),
 'html' => $html
 ), array(
 'attachment' => $attachment
 ));
 
 error_log("Mailgun ".$result);
 
}

Sans Composer

Bon, obligatoire… en fait il est tout à fait possible de contourner, grâce à cURL (là encore pour Free c'est mort). A part pour l'envoi de pièce jointes, qui refuse de fonctionner par ce biais.

function send_mailgun($destinataire, $from_nom, $from_email, $subject, $html, $attachment=''){
 
 $config = array();
 
 $config['api_key'] = "key-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
 $config['api_url'] = "https://api.mailgun.net/v3/mondomaine.com/messages"; 
 
 $message = array(); 
 $message['from'] = $from_nom." <".$from_email.">"; 
 $message['to'] = $destinataire; 
 $message['h:Reply-To'] = "<".$from_email.">"; 
 $message['subject'] = utf8_encode(stripslashes($subject));
 $message['html'] = utf8_encode(stripslashes($html));
 
 
//if($_SERVER['REMOTE_ADDR']=='127.0.0.1'){ var_dump($message); }

$ch = curl_init();
 
 curl_setopt($ch, CURLOPT_URL, $config['api_url']); 
 curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
 curl_setopt($ch, CURLOPT_USERPWD, "api:{$config['api_key']}");
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
 curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
 curl_setopt($ch, CURLOPT_POST, true); 
 curl_setopt($ch, CURLOPT_POSTFIELDS,$message);
 
 $result = curl_exec($ch);
 
 curl_close($ch);
 
 error_log("Mailgun ".$result);
 
//if($_SERVER['REMOTE_ADDR']=='127.0.0.1'){ var_dump($result); } 
 
 return $result;
 
}

Utilisation du SMTP

Si vous aviez déjà l'habitude d'envoyer des mails (par exemple avec la librairie PHPmailer) en SMTP, cela vous permettra de continuer à travailler avec le même script d'envoi, en changeant seulement quelques paramètres.

Sauf que… si votre site est sur un mutualisé chez OVH, les ports du SMTP sont bloqués pour toute adresse de serveur SMTP autre que celle d'OVH. Donc, cette solution est à réserver aux hébergements dédiés ou aux VPS.

Voici un exemple utilisant PHPmailer :

 

$mail = new PHPmailer();
 
$mail->IsSMTP();
$mail->SMTPDebug = 2; // Client commands and server responses
$mail->Debugoutput = 'error_log'; // dans les logs
$mail->Host='smtp.mailgun.org'; 
$mail->Port = 465; // si 465 est bloque, utiliser 587
$mail->Username = 'postmaster@monsite.com';  // a récupérer dans le bloc Domain Information sur votre interface Mailgun
$mail->Password = 'xxxxxxxxxxxxxx';  // a récupérer dans le bloc Domain Information
$mail->SMTPAuth = true; 
$mail->SMTPSecure = 'ssl'; // si vous utilisez le port 587, changez pour tls
 
$mail->AddReplyTo($expediteur); 
$mail->SetFrom($expediteur, $nom_expediteur); 
$mail->AddAddress($destinataire); 
$mail->Subject=stripslashes($objet);
$mail->MsgHTML($message_debut."<div style='font-size: 12px'>".stripslashes($texte)."</div>".$message_fin);
$mail->AltBody= "Pour lire ce message, veuillez utiliser un client mail compatible HTML";
$mail->AddCustomHeader("List-Unsubscribe: <mailto:".$expediteur."?subject=Unsubscribe>, <http://www.mondomaine.com>");
 
if($mail->Send()) { 

// TODO faire quelque chose si l'envoi a reussi
 } 
 
 unset($mail);

 

Le plugin WordPress Mailgun

Il est très souvent mis à jour. Je ne l'ai pas encore utilisé. Vous pouvez le télécharger ici.

Partager

Flux RSS Envoyer le lien  un ami par mail
 
«
»