Class maileur

Soyez le premier à donner votre avis sur cette source.

Snippet vu 9 798 fois - Téléchargée 28 fois

Contenu du snippet

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 / Exemple :


<?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; } } ?>

A voir également

Ajouter un commentaire Commentaires
Messages postés
135
Date d'inscription
samedi 18 janvier 2003
Statut
Membre
Dernière intervention
17 avril 2009

je sais pas si j'ai bien compris mais à la place de :

$r.coupe(base64_encode(file_get_contents($a)),72).'--'.$boundary;
if ($n==$end)
$message.='--'.$r;
else
$message.=$r;


j'ai bidouillé:

$tmp=$this->coupe(base64_encode(file_get_contents($a)),72).'--'.$boundary;
if ($n==$end)
$message.=$tmp.'--'.$r;
else
$message.=$tmp;


???????????????????????????
Messages postés
135
Date d'inscription
samedi 18 janvier 2003
Statut
Membre
Dernière intervention
17 avril 2009

bien, juste 1 soucis en cas de PJ :

Fatal error: Call to undefined function coupe() in mail.class.php on line 72
Messages postés
36
Date d'inscription
vendredi 6 janvier 2006
Statut
Membre
Dernière intervention
27 février 2009

Salut bien beau avoir cette source . Mais j'ai pas de tableau pour le faire fonctionner ... Je sais meme pas quoi faire avec cette bout de code ... Éclairsiser moi . Parce que la , j'ai surment un sendmail avec piece join mais rien pour le faire fonctionner


@+
Messages postés
4
Date d'inscription
lundi 29 juillet 2002
Statut
Membre
Dernière intervention
10 mars 2008

Bonjour,

Cette clase marche bien, mais j'ai un probleme avec les pièces jointes, lorsque j'ouvre le message la pièces jointe est afficher dans le corps du message (messagerie lotus). (Il doit surement manquer un petit quelque chose)

(Lorsque j'envoi un mail avec une piece jointe sur hotmail la pièce jointe est bien reconnu)
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
38
ça doit être dans les headers, mais je ne sais plus ou...
Afficher les 44 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.