Accueil > > > CLASS MAILEUR
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
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
|
Derniers Blogs
GESTION D'EXCEPTION AVEC LES TASKSGESTION D'EXCEPTION AVEC LES TASKS par richardc
Nous avons vu dans un précédent article comment utiliser Task pour effectuer des opérations dans un autre thread.
Malheureusement, comme tout le monde n'est pas parfait, il se peut que cette exécution se passe mal et qu'une exception se produise.
La...
Cliquez pour lire la suite de l'article par richardc DéMARRONS AVEC LES TASKSDéMARRONS AVEC LES TASKS par richardc
Que vous le vouliez ou non, le développement multi-tâche est maintenant une obligation pour toute nouvelle application. Il est donc vital d'en comprendre les mécanismes et de s'y mettre le plus tôt possible.
En attendant le .NET Framework 4.5 avec le...
Cliquez pour lire la suite de l'article par richardc SLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPSSLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPS par Vko
Retrouvez les slides et les démo de ma session Fast & Furious XAML Apps. A ceux qui se posent la question : "est-ce que le code de la DataGrid est disponible?", je vous répondrais "pas encore". Je vais mettre en place un projet codeplex pour part...
Cliquez pour lire la suite de l'article par Vko XNA IS DEAD!XNA IS DEAD! par richardc
Depuis la semaine dernière (et grâce aux TechDays 2012), je me penche activement sur la nouvelle version de Windows, aka Windows 8. Vous me direz, il était temps puisque la première preview date de Septembre dernier.
OK. Remarquez, on n'en est qu'aux...
Cliquez pour lire la suite de l'article par richardc TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 !TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 ! par ROMELARD Fabrice
Speakers: Fabrice Meillon et Stanislas Quastana Cette session est basée entièrement sur celle donnée lors de la BUILD cet hiver. Il n'y a pas d'ajout d'information en rapport avec cet évènement passé. Windows 8 Server sera intégralem...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
CHAMPS TIMECHAMPS TIME par vargas
Cliquez pour lire la suite par vargas
Logiciels
DocTranslate (V3.1.0.0)DOCTRANSLATE (V3.1.0.0)DocTranslate est un traducteur de document Microsoft Word, PowerPoint et Excel. Il permet d'autom... Cliquez pour télécharger DocTranslate Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System
|