|
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
|