Fonction envoi de mail php qui permet de passer le filtre anti spam

Soyez le premier à donner votre avis sur cette source.

Snippet vu 9 611 fois - Téléchargée 17 fois

Contenu du snippet

Tout est dans le titre :)

C'est une fonction qui vous permettra de passer outre les filtres antispam des hébergeurs de messagerie tels que Hotmail Yahoo ou Gmail.

Source / Exemple :


<?php
date_default_timezone_set("Europe/Paris");
function envoyermail($mail, $emailsubject, $contenu, $fromname, $frommail, $organisation, $textorhtml, $timezone) {
	error_reporting(0);
	if (strtoupper(substr(PHP_OS,0,3)=='WIN')) { $eol="\r\n"; }
	elseif (strtoupper(substr(PHP_OS,0,3)=='MAC')) { $eol="\r"; }
	else { $eol="\n"; }

    $headers = 'Reply-To: '.$fromname.' <'.$frommail.'>'.$eol; 
    $headers .= 'Return-Path: '.$fromname.' <'.$frommail.'>'.$eol; 
	$headers .= 'From: '.$fromname.' <'.$frommail.'>'.$eol;
	$headers .= 'Organization: '.$organisation.$eol;
	if($textorhtml=="0") { $headers .= 'Content-Type: text/plain'.$eol; }
	else { $headers .= "Content-Type: text/html; charset=iso-8859-1".$eol; }
	$headers .= "X-Priority: normal".$eol;
	$headers .= "X-MSMail-Priority: Normal".$eol;
	$headers .= "Importance: High".$eol;
	$headers .= "X-Mailer: PHP v" . phpversion().$eol;
	$headers .= "MIME-Version: 1.0".$eol;
	$headers .= "Delivery-date: ".date("D, j M Y H:i:s ".$timezone).$eol;
	$headers .= "X-Originating-IP: [".getenv("REMOTE_ADDR")."]".$eol;
	$headers .= "X-Sender-IP: " . $_SERVER["REMOTE_ADDR"].$eol;
	$headers .= "Content-Transfer-Encoding: 8bit".$eol; 
	$headers .= 'Sender: '.$frommail.$eol; 

	ob_start();
	echo stripslashes($contenu);
	$body=ob_get_contents(); ob_end_clean();
	
	ini_set(sendmail_from,$frommail);
	mail($mail, $emailsubject, $body, $headers);
	ini_restore(sendmail_from);
	error_reporting(-1);
}
envoyermail("mail@destinataire.tld", "SUJET DU MAIL", "<h3>CONTENU HTML DE L'EMAIL</h3>", "NOM EXPEDITEUR", "mail@expediteur.tld", "Organisation", "1", "+0100");
?>

VOICI UN EXEMPLE PRATIQUE :

<?php
date_default_timezone_set("Europe/Paris");
function envoyermail($mail, $emailsubject, $contenu, $fromname, $frommail, $organisation, $textorhtml, $timezone) {
	error_reporting(0);
	if (strtoupper(substr(PHP_OS,0,3)=='WIN')) { $eol="\r\n"; }
	elseif (strtoupper(substr(PHP_OS,0,3)=='MAC')) { $eol="\r"; }
	else { $eol="\n"; }
	$headers = 'Reply-To: '.stripslashes($fromname).' <'.$frommail.'>'.$eol;
	$headers .= 'Return-Path: '.stripslashes($fromname).' <'.$frommail.'>'.$eol;
	$headers .= 'From: '.stripslashes($fromname).' <'.$frommail.'>'.$eol;
	$headers .= 'Organization: '.$organisation.$eol;
	if($textorhtml=="0") { $headers .= 'Content-Type: text/plain'.$eol; }
	else { $headers .= "Content-Type: text/html; charset=iso-8859-1".$eol; }
	$headers .= "X-Priority: normal".$eol;
	$headers .= "X-MSMail-Priority: Normal".$eol;
	$headers .= "Importance: High".$eol;
	$headers .= "X-Mailer: PHP v" . phpversion().$eol;
	$headers .= "MIME-Version: 1.0".$eol;
	$headers .= "Delivery-date: ".date("D, j M Y H:i:s ".$timezone).$eol;
	$headers .= "X-Originating-IP: [".getenv("REMOTE_ADDR")."]".$eol;
	$headers .= "X-Sender-IP: " . $_SERVER["REMOTE_ADDR"].$eol;
	$headers .= "Content-Transfer-Encoding: 8bit".$eol;
	$headers .= 'Sender: '.$frommail.$eol;
	ob_start();
	echo stripslashes($contenu);
	$body=ob_get_contents(); ob_end_clean();
	ini_set('sendmail_from',$frommail);
	mail($mail, stripslashes($emailsubject), $body, $headers);
	ini_restore('sendmail_from');
	error_reporting(-1);
}
$err=''; $succ="";
if(isset($_POST['envoyer'])) {
	$mailto=trim($_POST['mail']);
	$verif=$mailto; $t1=explode("@",$verif); $t2=explode(".",$t1[1]); $t3=explode(" ",$verif); $t5=explode(".@",$verif); $t6=explode("@.",$verif);
	if((sizeof ($t1) == 2) && (sizeof ($t2) > 1) && (sizeof ($t3) == 1) && (sizeof ($t5) == 1) && (sizeof ($t6) == 1)){
		$subject=addslashes(trim($_POST['sujet']));
		$contenu=addslashes($_POST['message']);
		$nomprenom=addslashes(strtoupper(trim($_POST['nom'])).' '.ucwords(strtolower(trim($_POST['prenom']))));
		envoyermail("MON_MAIL@POUR_LA_RECEPTION.FR", $subject, $contenu, $nomprenom, $mailto, "MA SOCIETE", "1", "+0100");
		$succ="Envoi réussi !";
	}
	else { $err='Le format de l\'E-Mail saisie est incorrect'; }
}
?>

<form action="" method="post">
<?php if($err) { ?><font color="red"><?php echo $err; ?></font><?php } ?>
<?php if($succ) { ?><font color="green"><?php echo $succ; ?></font><?php } ?>
<table cellpadding="0" cellspacing="0" border="0">
<tr><td>Nom</td><td><input type="text" name="nom" /></td></tr>
<tr><td>PrÉnom</td><td><input type="text" name="prenom" /></td></tr>
<tr><td>E-Mail</td><td><input type="text" name="mail" /></td></tr>
<tr><td>Sujet</td><td><input type="text" name="sujet" /></td></tr>
<tr><td valign="top">Message</td><td><textarea name="message"></textarea></td></tr>
<tr><td colspan="2" align="center"><input type="submit" name="envoyer" value="Valider" /></td></tr>
</table>
</form>

Exemple MASS MAILER :

<?php
date_default_timezone_set("Europe/Paris");
function envoyermail($mail, $emailsubject, $contenu, $fromname, $frommail, $organisation, $textorhtml, $timezone) {
	error_reporting(0);
	if (strtoupper(substr(PHP_OS,0,3)=='WIN')) { $eol="\r\n"; }
	elseif (strtoupper(substr(PHP_OS,0,3)=='MAC')) { $eol="\r"; }
	else { $eol="\n"; }
	$headers = 'Reply-To: '.stripslashes($fromname).' <'.$frommail.'>'.$eol;
	$headers .= 'Return-Path: '.stripslashes($fromname).' <'.$frommail.'>'.$eol;
	$headers .= 'From: '.stripslashes($fromname).' <'.$frommail.'>'.$eol;
	$headers .= 'Organization: '.$organisation.$eol;
	if($textorhtml=="0") { $headers .= 'Content-Type: text/plain'.$eol; }
	else { $headers .= "Content-Type: text/html; charset=iso-8859-1".$eol; }
	$headers .= "X-Priority: normal".$eol;
	$headers .= "X-MSMail-Priority: Normal".$eol;
	$headers .= "Importance: High".$eol;
	$headers .= "X-Mailer: PHP v" . phpversion().$eol;
	$headers .= "MIME-Version: 1.0".$eol;
	$headers .= "Delivery-date: ".date("D, j M Y H:i:s ".$timezone).$eol;
	$headers .= "X-Originating-IP: [".getenv("REMOTE_ADDR")."]".$eol;
	$headers .= "X-Sender-IP: " . $_SERVER["REMOTE_ADDR"].$eol;
	$headers .= "Content-Transfer-Encoding: 8bit".$eol;
	$headers .= 'Sender: '.$frommail.$eol;
	ob_start();
	echo stripslashes($contenu);
	$body=ob_get_contents(); ob_end_clean();
	ini_set('sendmail_from',$frommail);

	$emails=split("\n", $mail);
	for($i=0; $i<count($emails); $i++) {
		$verif=trim($emails[$i]); $t1=explode("@",$verif); $t2=explode(".",$t1[1]); $t3=explode(" ",$verif); $t5=explode(".@",$verif); $t6=explode("@.",$verif);
		if((sizeof ($t1) == 2) && (sizeof ($t2) > 1) && (sizeof ($t3) == 1) && (sizeof ($t5) == 1) && (sizeof ($t6) == 1)){
			mail(trim($emails[$i]), stripslashes($emailsubject), $body, $headers);
			echo "Envoyé à ".$emails[$i]."<br />";
		}
	}
	ini_restore('sendmail_from');
	error_reporting(-1);
}
$err=''; $succ="";
if(isset($_POST['envoyer'])) {
	$mailto=trim($_POST['mail']);
	$subject=addslashes(trim($_POST['sujet']));
	$contenu=addslashes($_POST['message']);
	envoyermail($mailto, $subject, $contenu, "NOM PRENOM", "admin@mymail.com", "MA SOCIETE", "1", "+0100");
	$succ="Envoi réussi !";
}
?>

<form action="" method="post">
<?php if($err) { ?><font color="red"><?php echo $err; ?></font><?php } ?>
<?php if($succ) { ?><font color="green"><?php echo $succ; ?></font><?php } ?>
<table cellpadding="0" cellspacing="0" border="0">
<tr><td valign="top">E-Mails</td><td><textarea name="mail"></textarea></td></tr>
<tr><td>Sujet</td><td><input type="text" name="sujet" /></td></tr>
<tr><td valign="top">Message</td><td><textarea name="message"></textarea></td></tr>
<tr><td colspan="2" align="center"><input type="submit" name="envoyer" value="Valider" /></td></tr>
</table>
</form>

Conclusion :


Bon courage :)

A voir également

Ajouter un commentaire

Commentaires

Messages postés
32
Date d'inscription
lundi 6 novembre 2000
Statut
Membre
Dernière intervention
24 janvier 2015

Petite remarque importante concernant l'assimilation des mails aux spam!

Maintenant, pour pouvoir envoyer des mails sur certains domaines, il faut que votre domaine soit équipé d'un enregistrement SPF (Sender Policy Framework)

En gros, l'enregistrement SPF d'un domaine doit contenir les domaines et IP qui sont autorisé à envoyer des mails pour ce domaine
Lorsque l'on envoi le mail à un client protégé par un antispam qui contrôle le SPF, l'antispam va vérifier si l'adresse IP et le domaines d'origine de l'expéditeur se trouve bien dans la liste des adresses autorisées. Si ce n'est pas le cas, le mail est non seulement rejeté, mais l'IP et domaine de l'expéditeur sont communiqué à des serveurs de liste noire.

Quand le domaine n'a pas de SPF, cela dépend de la config du client, certains accepte quand même l'envoi d'autre le refuse.

En dehors de cela, la structure des séquences IP du mail doit être correcte. Si elle est altérées, le mail est systématiquement considéré comme frauduleux

Celà resemble à :

Received: from srv5.serveur2.com (root@localhost)
by domain.be (9.12.7/9.12.7) with ESMTP id o1g3ed2y8k2d3g3
for <moi@skynet.be>; Sat, 21 May 2011 10:42:39 +0200
X-ClientAddr: 10.11.12.63
Received: from mx1.anti-spam.lu (mx1.anti-spam.lu [10.11.12.63])
by srv5.serveur2.com (9.12.7/9.12.7) with ESMTP id o1g3ed2y2f3df5u
for <moi@skynet.be>; Sat, 21 May 2011 10:42:39 +0200

Cette structure est écrite par les serveurs qui reçoivent successivement le mail. Chaque serveur indique son IP et adresses ainsi que l'IP et adresse de celui qui lui à envoyé le mail (X-ClientAddr).

Lorsqu'un serveur reçoit le mail, il vérifie si les entêtes sont dans un ordre temporel croisant et si dans cet ordre les adresses de l'expéditeur jusqu'au serveur lui même est correcte.
La présence d'une entrée non valide ou manquante produit le refus du mail.

Pour l'explication des SPF: Voir les lien suivants:
http://www.falconnet.fr/SPF-Proteger-ses-domaines-du-SPAM.html
http://www.amenwiki.com/index.php/Comment_configurer_le_SPF_%3F
http://www.google.com/support/a/bin/answer.py?hl=fr&answer=33786
Messages postés
1
Date d'inscription
mercredi 15 avril 2009
Statut
Membre
Dernière intervention
12 mai 2011

Bonjour,

Je n'arrive à faire fonctionner ce code. Un message s'affiche en disant que l'email est bien parti mais aucun email n'arrive sur la boîte de réception.
L'envoi en masse affiche que le format de l'email n'est pas correct (avec le code modifié comme spécifié)

Merci pour vos réponses
Messages postés
54
Date d'inscription
dimanche 20 décembre 2009
Statut
Membre
Dernière intervention
8 avril 2013

Bonjour,

sur le 3eme script envoi emailing,le fonctionnement est ok sur 1 émail mais pas sur deux séparés par une virgule

merci d'avance
Messages postés
26
Date d'inscription
vendredi 20 novembre 2009
Statut
Membre
Dernière intervention
1 décembre 2013

Ok je vais voir sa car j'ai essayez plein de script et a chaque fois les emails reviennent non distribuée le plus c'est orange qui ne les distribu pas considéré comme spam
Messages postés
32
Date d'inscription
lundi 6 novembre 2000
Statut
Membre
Dernière intervention
24 janvier 2015

il existe des tas de classe pour envoyer des mails, certaine plus compliquées les unes que les autres

- phplib (http://sourceforge.net/projects/phplib) qui contient une classe d'envoi des mails (très compliquer à utiliser)

- phpMailer (sourceforge.net/projects/phpmailer) qui est une classe assez lourde, mais souvent utilisée, certaine fonctions sont manquantes.

- SendMail : Classe très complète et facile à utiliser en conservant un code php très propre. ( http://www.phpcs.com/codes/CLASSE-MESSAGERIE_44094.aspx ) - Cette classe fut créé pour pallier à l'absence de certaines fonctionnalité et aussi à la lourdeur des usines à gaz comme phpMailer

Toutes ces classe sont sous licence GPL ou équivalent ==> Librement réutilisable

Par contre en ce qui concerne RMAIL (http://rubydoc.info/gems/rmail/1.0.0/RMail ), il est sous licence propriétaire ==> non réutilisable sans avoir acquis la licence.
Afficher les 14 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.