Class maileur

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

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.