Envoi de mail SMTP phpmailer

Pour ceux qui souhaitent aller plus loin dans le paramétrage de leur espace.
cyli
Messages : 2
Inscription : 23 janv. 2013, 12:15

Envoi de mail SMTP phpmailer

Message par cyli »

Bonjour,

N'ayant pas hébergé mon agora sur un serveur perso et souhaitant envoyer des mails via le smtp de gmail, j'ai fini par réussir en modifiant le fichier /fonctions/divers.inc.php comme suit :

Perso, j'ai recopier dans le répertoire "fonctions" le fichier class.phpmailer.php (attention, je n'ai testé qu'avec la version pour PHP5.1)

Code : Tout sélectionner

function envoi_mail($destinataires, $sujet_mail, $contenu_mail, $options="")
{
	////	INITIALISATION
	global $trad, $infos_trad;
	if(!isset($options["message_alert"]))								$options["message_alert"] = true;
	if(!isset($options["header_footer"]))								$options["header_footer"] = true;
	if(!isset($options["afficher_dest_message"]))						$options["afficher_dest_message"] = false;
	if(!isset($options["expediteur_noreply"]))							$options["expediteur_noreply"] = false;
	if(!isset($options["envoi_fichiers"]) || control_upload()==false)	$options["envoi_fichiers"] = false;
	if(!isset($options["notif"]))										$options["notif"] = false;
	if(!isset($options["accuse_reception"]))							$options["accuse_reception"] = false;
	$frontiere = "-----=".uniqid(mt_rand());
	
	if(is_array($destinataires)==false)		$destinataires = array($destinataires);
foreach($destinataires as $dest_key => $dest_tmp){
/**/	if(is_numeric($dest_tmp))	{ $mail_tmp = user_infos($dest_tmp,"mail");   if($mail_tmp!="") $destinataires[$dest_key] = $mail_tmp; }
/**/}
$destinataires_txt = implode(",", array_unique($destinataires));

$destinataire_php = (count($destinataires)>1)  ?  ""  :  $destinataires_txt;

require_once('class.phpmailer.php');
//include("class.smtp.php"); // optional, gets called from within class.phpmailer.php if not already loaded

$mail             = new PHPMailer();

$body             = $contenu_mail;
$body             = eregi_replace("[\]",'',$body);

$mail->IsSMTP(); // telling the class to use SMTP

$mail->SMTPAuth   = true;                  // enable SMTP authentication
$mail->SMTPSecure = "ssl";                 // sets the prefix to the servier
$mail->Host       = "smtp.gmail.com";      // sets GMAIL as the SMTP server
$mail->Port       = 465;                   // set the SMTP port for the GMAIL server
$mail->Username   = "[identifiant]@gmail.com";  // GMAIL username
$mail->Password   = "[mot de passe]";            // GMAIL password

$mail->SetFrom('[mon email]@gmail.com', '[nom d'envoi]');

$mail->AddReplyTo("[mon email]@gmail.com","[nom d'envoi]");

$mail->Subject    = "$sujet_mail";

$mail->AltBody    = "To view the message, please use an HTML compatible email viewer!"; // optional, comment out and test

$mail->MsgHTML($body);

// La fonction suivant permet l'envoi multiple de message, comme pour les notifications et convertie le tableau d'adresse mail en un envoi par adresse
array_map(array($mail, 'AddAddress'), explode(',', $destinataires_txt));
foreach ($destinataires_txt as $email){
    $mail->AddAddress($email);
}

if(!$mail->Send()) {
  echo "Mailer Error: " . $mail->ErrorInfo;
} else {
  echo "Message envoyé!";
}
}
Si vous avez un problème de caractères dans le mail reçu, ajouter "$mail->CharSet = "UTF-8";" en dessous de "$mail = new PHPMailer();"

Donc pour faire court, les variables d'agora sont utilisées ce qui me permet de garder le sujet mais aussi les mails des destinataires, le seul hic c'est qu'on perd les noms des destinataires (par flemme de faire mieux)

Cela dit, pour plus de sécurité je dirais qu'il faudra voir comme piste pour les développeurs d'Agora-Project la possibilité de rentrer les valeurs du serveur et les identifiants mail dans la base de donnée pour plus de sécurité.

Cela dit, beau travail les gars pour ce projet collaboratif !

Germain
its9000
Messages : 29
Inscription : 01 janv. 2013, 11:43

Re: Envoi de mail SMTP phpmailer

Message par its9000 »

Merci! ;)
pollux57
Messages : 4
Inscription : 05 janv. 2013, 17:53

Re: Envoi de mail SMTP phpmailer

Message par pollux57 »

marche bien pour moi apres adaptation à mon smtp.

Merci pour l'info !
mawuaz
Messages : 9
Inscription : 06 mai 2012, 10:57

Re: Envoi de mail SMTP phpmailer

Message par mawuaz »

Bonsoir cyli,

Ayant un peu de mal à configurer les paramètres smtp; je préfère blinder.
As-tu conservé d'autres éléments du fichier divers.inc.php? A priori le phpmailer s'occupe de la rédaction de mails donc les parties "Header", "Messages HTML", "Message HTML + Fichiers joint" et " Envoi du Mail" du fichier divers.inc.php ne sont plus utiles. Me trompes-je?

Dans mon cas, l'appel à la fonction phpmailer ne s'effectue pas bien. Pourtant le fichier est autonome, non? Il n'y a aucune modification à lui apporter?

Merci de prendre le temps de répondre à ces petites questions.
mawuaz
Messages : 9
Inscription : 06 mai 2012, 10:57

Re: Envoi de mail SMTP phpmailer

Message par mawuaz »

Bonjour,
J'ai réussi à faire fonctionne le phpmailer. Il s'agissait, semble-t-il d'un problème de version php. Je le fait fonctionner en 5.2.
C'est une aiguille en moins dans le pied. Ce script permet de passer outre les limitations sendmail des hebergeurs. Merci.

Néanmoins, cela demeure un peu du bricolage, alors je continue à travailler sur ce code.
Les notifications de message, je peux passer dessus mais la mise en forme demeure problématique.
Comme le laisse suggérer mon message précédent, j'ai des scrupules à laisser le phpmailer "gerer" le contenu du mail.
Notamment les notifications du forum qui n'ont pas de lien vers le site. Il serait intéressant, à minima, de pouvoir réinjecter ces données dans le contenu du mail.
C'est ce que j'essaie de faire depuis quelques heures déjà. Si quelqu'un a une bonne idée sur ce sujet, je suis preneur.

Bonne journée.
Répondre