|
Trouver une ressource
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
CLASS MAILEUR
Information sur la source
Description
Comment envoyer un mail sans la fonction mail ? (elle est parfois désactivée) j'ai aussi pris le temps de gérer les envois à de multiples personnes, les surnoms, le changement possible de la date, les pièces jointes... l'entête est rédigée automatiquement, on n'a juste à choisir le type de contenu. Sachant que CC est un champ inutile, je ne l'ai pas mis ici. Pour faire plaisir à certaines personnes, j'ai fait une class...
Source
- <?php
-
- class Mail_{
- function coupe($str, $l){
- /*
- coupe la chaine $str en n lignes de $l caractères
- */
- $retour='';
- while(($a=substr($str,0,$l))){
- $str=substr($str,$l);
- $retour.=$a.'
- ';
- }
- return $retour;
- }
- function set($serveur, $timeout=15, $port=25, $auth=false){
- $this->serveur=$serveur;
- $this->timeout=$imeout;
- $this->port=$port;
- $this->auth=$auth;
- }
- function setFrom($from, $namefrom){
- $this->from=$from;
- $this->namefrom=$namefrom;
- }
- function send($toar, $nameto ,$message, $prioritee, $subject, $type='plain', $piece_jointes=false, $date=false){
- /*
- Cette fonction envoi un mail par le protocol SMTP, elle renvoi un tableau qui contient :
- true or false selon le fait qu'il y ai eu une erreur ou non
- puis les différentes phases de l'intervention : soit le message d'erreur et le code, soit
- ce que le maileur à dit.
- Elle permet :
- de choisir son serveur, son port,
- destinataire, nom du destinataire, sous forme de tableaux pour pouvoir en mettre plusieurs
- destitinateur, nom du destinateur,
- message,
- prioritée,
- sujet,
- les pièces jointes sous formes de tableau (ou false, mais c'est un paramètre optionnel)
- la date (ou false, mais c'est un paramètre optionnel)
- le temps d'attente maximal pour la connexion (15 par défaut, c'est un paramètre optionnel)
- le port réseau (25 par défaut, c'est un paramètre optionnel)
- */
- //effectue un prétraitement du message :
- $sock=fsockopen($this->serveur, $this->port, $errno, $errstr, $this->timeout);
- if (!$sock) {
- return array(false, $errstr, $errno);
- }else{
- if ($date===false){
- $date=date('r');
- }
- $r="\r\n";
- $message=str_replace("\n.","\n..",$message);
- if ($piece_jointes===false)
- $message='Content-Type: text/'.$type.'; charset=ISO-8859-1; format=flowed'.$r.
- 'Content-Transfer-Encoding: 7bit'.$r.
- $message.$r;
- else{
- $boundary='------------000505030409000304030606';
- $message='Content-Type: multipart/mixed;'.$r.
- ' boundary="'.$boundary.'"'.$r.$r.
- 'This is a multi-part message in MIME format.'.$r.
- '--'.$boundary.$r.
- 'Content-Type: text/'.$type.'; charset=ISO-8859-1; format=flowed'.$r.
- 'Content-Transfer-Encoding: 7bit'.$r.
- $message.$r.$r.
- '--'.$boundary.$r;
- $end=count($piece_jointes)-1;
- foreach ($piece_jointes as $n=>$a){
- $message.='Content-Type: application/'.filetype($a).';'.$r.
- ' name="'.$a.'"'.$r.
- 'Content-Transfer-Encoding: base64'.$r.
- 'Content-Disposition: attachement;'.$r.
- ' filename="'.$a.'"'.$r.
- $r.coupe(base64_encode(file_get_contents($a)),72).'--'.$boundary;
- if ($n==$end)
- $message.='--'.$r;
- else
- $message.=$r;
- }
- }
- $tostr='';
- $msg=array();
- $msg[]=true;
- //les présentations
- $msg[]=fgets($sock, 4096);
- if (substr($msg[count($msg)-1],0,1)=='5'){
- $msg[0]=false;
- return $msg;
- }
- fwrite($sock, 'HELO coucou'.$r);
- $msg[]=fgets($sock, 4096);
- if (substr($msg[count($msg)-1],0,1)=='5'){
- $msg[0]=false;
- return $msg;
- }
- if ($this->auth!==false){
- fwrite($sock, 'AUTH LOGIN'.$r);
- $msg[]=fgets($sock, 4096);
- if (substr($msg[count($msg)-1],0,1)=='5'){
- $msg[0]=false;
- return $msg;
- }
- fwrite($sock, base64_encode($auth[0]).$r);
- $msg[]=fgets($sock, 4096);
- if (substr($msg[count($msg)-1],0,1)=='5'){
- $msg[0]=false;
- return $msg;
- }
- fwrite($sock, base64_encode($auth[1]).$r);
- $msg[]=fgets($sock, 4096);
- if (substr($msg[count($msg)-1],0,1)=='5'){
- $msg[0]=false;
- return $msg;
- }
- }
- //indique le destinateur
- fwrite($sock, 'MAIL FROM: <'.$this->from.'>'.$r);
- $msg[]=fgets($sock, 4096);
- if (substr($msg[count($msg)-1],0,1)=='5'){
- $msg[0]=false;
- return $msg;
- }
- //indique le destinataire
- foreach ($toar as $n=>$to){
- fwrite($sock, 'RCPT TO: <'.$to.'>'.$r);
- $msg[]=fgets($sock, 4096);
- if (substr($msg[count($msg)-1],0,1)=='5'){
- $msg[0]=false;
- return $msg;
- }
- $tostr.=$nameto[$n].' <'.$to.'>,';
- }
- //indique que l'on commence à envoyer le message
- fwrite($sock, 'DATA'.$r);
- $msg[]=fgets($sock, 4096);
- if (substr($msg[count($msg)-1],0,1)=='5'){
- $msg[0]=false;
- return $msg;
- }
- fwrite($sock,'From: '.$this->namefrom.' <'.$this->from.'>'.$r
- .'To: '.substr($tostr,0,strlen($tostr)-1).$r
- .'Subject: '.$subject.$r
- .'X-Priority: '.$prioritee.$r
- .'Date: '.$date.$r
- .$message.'.'.$r);
- $msg[]=fgets($sock, 4096);
- if (substr($msg[count($msg)-1],0,1)=='5'){
- $msg[0]=false;
- return $msg;
- }
- //quitte
- fwrite($sock, 'QUIT'.$r);
- $msg[]=fgets($sock, 4096);
- if (substr($msg[count($msg)-1],0,1)=='5'){
- $msg[0]=false;
- return $msg;
- }
- fclose($sock);
-
- }
- return $msg;
- }
- }
- ?>
<?php
class Mail_{
function coupe($str, $l){
/*
coupe la chaine $str en n lignes de $l caractères
*/
$retour='';
while(($a=substr($str,0,$l))){
$str=substr($str,$l);
$retour.=$a.'
';
}
return $retour;
}
function set($serveur, $timeout=15, $port=25, $auth=false){
$this->serveur=$serveur;
$this->timeout=$imeout;
$this->port=$port;
$this->auth=$auth;
}
function setFrom($from, $namefrom){
$this->from=$from;
$this->namefrom=$namefrom;
}
function send($toar, $nameto ,$message, $prioritee, $subject, $type='plain', $piece_jointes=false, $date=false){
/*
Cette fonction envoi un mail par le protocol SMTP, elle renvoi un tableau qui contient :
true or false selon le fait qu'il y ai eu une erreur ou non
puis les différentes phases de l'intervention : soit le message d'erreur et le code, soit
ce que le maileur à dit.
Elle permet :
de choisir son serveur, son port,
destinataire, nom du destinataire, sous forme de tableaux pour pouvoir en mettre plusieurs
destitinateur, nom du destinateur,
message,
prioritée,
sujet,
les pièces jointes sous formes de tableau (ou false, mais c'est un paramètre optionnel)
la date (ou false, mais c'est un paramètre optionnel)
le temps d'attente maximal pour la connexion (15 par défaut, c'est un paramètre optionnel)
le port réseau (25 par défaut, c'est un paramètre optionnel)
*/
//effectue un prétraitement du message :
$sock=fsockopen($this->serveur, $this->port, $errno, $errstr, $this->timeout);
if (!$sock) {
return array(false, $errstr, $errno);
}else{
if ($date===false){
$date=date('r');
}
$r="\r\n";
$message=str_replace("\n.","\n..",$message);
if ($piece_jointes===false)
$message='Content-Type: text/'.$type.'; charset=ISO-8859-1; format=flowed'.$r.
'Content-Transfer-Encoding: 7bit'.$r.
$message.$r;
else{
$boundary='------------000505030409000304030606';
$message='Content-Type: multipart/mixed;'.$r.
' boundary="'.$boundary.'"'.$r.$r.
'This is a multi-part message in MIME format.'.$r.
'--'.$boundary.$r.
'Content-Type: text/'.$type.'; charset=ISO-8859-1; format=flowed'.$r.
'Content-Transfer-Encoding: 7bit'.$r.
$message.$r.$r.
'--'.$boundary.$r;
$end=count($piece_jointes)-1;
foreach ($piece_jointes as $n=>$a){
$message.='Content-Type: application/'.filetype($a).';'.$r.
' name="'.$a.'"'.$r.
'Content-Transfer-Encoding: base64'.$r.
'Content-Disposition: attachement;'.$r.
' filename="'.$a.'"'.$r.
$r.coupe(base64_encode(file_get_contents($a)),72).'--'.$boundary;
if ($n==$end)
$message.='--'.$r;
else
$message.=$r;
}
}
$tostr='';
$msg=array();
$msg[]=true;
//les présentations
$msg[]=fgets($sock, 4096);
if (substr($msg[count($msg)-1],0,1)=='5'){
$msg[0]=false;
return $msg;
}
fwrite($sock, 'HELO coucou'.$r);
$msg[]=fgets($sock, 4096);
if (substr($msg[count($msg)-1],0,1)=='5'){
$msg[0]=false;
return $msg;
}
if ($this->auth!==false){
fwrite($sock, 'AUTH LOGIN'.$r);
$msg[]=fgets($sock, 4096);
if (substr($msg[count($msg)-1],0,1)=='5'){
$msg[0]=false;
return $msg;
}
fwrite($sock, base64_encode($auth[0]).$r);
$msg[]=fgets($sock, 4096);
if (substr($msg[count($msg)-1],0,1)=='5'){
$msg[0]=false;
return $msg;
}
fwrite($sock, base64_encode($auth[1]).$r);
$msg[]=fgets($sock, 4096);
if (substr($msg[count($msg)-1],0,1)=='5'){
$msg[0]=false;
return $msg;
}
}
//indique le destinateur
fwrite($sock, 'MAIL FROM: <'.$this->from.'>'.$r);
$msg[]=fgets($sock, 4096);
if (substr($msg[count($msg)-1],0,1)=='5'){
$msg[0]=false;
return $msg;
}
//indique le destinataire
foreach ($toar as $n=>$to){
fwrite($sock, 'RCPT TO: <'.$to.'>'.$r);
$msg[]=fgets($sock, 4096);
if (substr($msg[count($msg)-1],0,1)=='5'){
$msg[0]=false;
return $msg;
}
$tostr.=$nameto[$n].' <'.$to.'>,';
}
//indique que l'on commence à envoyer le message
fwrite($sock, 'DATA'.$r);
$msg[]=fgets($sock, 4096);
if (substr($msg[count($msg)-1],0,1)=='5'){
$msg[0]=false;
return $msg;
}
fwrite($sock,'From: '.$this->namefrom.' <'.$this->from.'>'.$r
.'To: '.substr($tostr,0,strlen($tostr)-1).$r
.'Subject: '.$subject.$r
.'X-Priority: '.$prioritee.$r
.'Date: '.$date.$r
.$message.'.'.$r);
$msg[]=fgets($sock, 4096);
if (substr($msg[count($msg)-1],0,1)=='5'){
$msg[0]=false;
return $msg;
}
//quitte
fwrite($sock, 'QUIT'.$r);
$msg[]=fgets($sock, 4096);
if (substr($msg[count($msg)-1],0,1)=='5'){
$msg[0]=false;
return $msg;
}
fclose($sock);
}
return $msg;
}
}
?>
Historique
- 30 novembre 2005 13:41:14 :
- ajouts de mots clefs
- 14 décembre 2005 15:50:48 :
- Débugage, plus transformation de la fonction en class
Sources du même auteur
Sources de la même categorie
Sources en rapport avec celle ci
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
besoin d'aide svp fonction mail() [ par yomm ]
voila, je doit envoyer des mails, pour cela j'utilise la fonction mail.j'utilise le serveur smtp de ifrance , ayant moi meme une adresse chez eux, le
mail en smtp [ par gemelos ]
voici mon code:fputs ($connection , "MAIL FROM: <$email>\n");$result =fgets ($connection ,256 );print("$result<br>");fputs ($connection ,
Serveur SMTP entièrement compatible avec la fonction mail() [ par vsss ]
BonsoirJe cherche un serveur smtp, qui me permet d'envoyer des mail a partir de la fonction mail() en utilisant n'importe quel variable.Merci
fonction mail en local [ par frop01 ]
Salut les phpcsistes.Je sais bien que le thème est dèjà abordé sur ce forum ainsi que d'autres mais j'arrive toujours pas à faire fonctionner mail() e
Gestion commande MAIL [ par electroweb ]
Bonjour à tous.Je dois migrer plusieurs sites ASP en PHP. Les sites sont sur le même serveur. Chaque site utilise une messagerie différ
php.ini [ par henri12 ]
salut je viens d'envoyer un email avec easyephp je trouve pas de fichier php.ini j ai trouver phpsafe.ini dans le repertoire de easyphp es celui la
Socket : Adresse d'un serveur [ par Leneuf8000 ]
Bonjour, voilà, j'ai trouvé des sripts permettant l'envoi de mail et qui utilise la fonction fsockopen, or comme j'ai un problème pour
Envoi de MAIL gros probleme [ par boopette ]
Bonjourjai un gros probleme je narrive pas a envoyer de mailsjai utilise la fonction MAIL() de PHP et des fonction de mail en SMTPjai des erreurs:fonc
Serveur SMTP [ par Marion0904 ]
Bonsoir, J'essai d'nvoyer des mails en utilisant la class phpmailer (disponible sur http://phpmailer.sourceforge.net/). J'incu la class php mail
easyphp et mail() [ par mictif ]
Bonjour... ou bonsoir ;) Je code un site en locale pour ensuite le mettre en ligne une fois terminé.J'utilise easyphp pour cela. J'ai un problem
|
Téléchargements
Logiciels à télécharger sur le même thème :
Comparez les prix Nouvelle version
|