begin process at 2010 03 21 06:45:27
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

E-Mail / Messagerie

 > CLASS D' ENVOIE DE MAIL EN SMTP

CLASS D' ENVOIE DE MAIL EN SMTP


 Information sur la source

Note :
9,75 / 10 - par 4 personnes
9,75 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :E-Mail / Messagerie Classé sous :class, smtp, mail, email, email Niveau :Initié Date de création :02/05/2006 Date de mise à jour :04/10/2008 12:23:52 Vu / téléchargé :24 064 / 2 157

Auteur : ImmortalPC

Ecrire un message privé
Site perso
Commentaire sur cette source (77)
Ajouter un commentaire et/ou une note

 Description

Voilà une class SMTP assez complete.
- Possibilité de s' indentifier
- Possibilité de rentrer les entêtes(header) manuelement
- Possibilité de maintenir la conntection smtp
- Possibilité d' ajouter des pièces jointes
- Possibilité du choix de l' encodage

Types de champs supportés :
- To
- Cc
- Bcc

En version simple, le code d' envoie fait 3 lignes !!!
La version Anglaise est disponible. (traduction faite par Pierre CORBEL : http://www.some-ideas.net/ )

Source

  • <?php
  • /*******************************************************************************
  • *
  • * Nom de la source :
  • * Class SMTP
  • * Nom du fichier par défaut :
  • * Class.SMTP.php
  • * Auteur :
  • * Nuel Guillaume alias Immortal-PC
  • * Site Web :
  • * http://immortal-pc.info/
  • *
  • *******************************************************************************/
  • class SMTP {
  • // Nom du domaine ou nom du serveur
  • var $NomDuDomaine = '';
  • // De Qui
  • var $From = 'root@localhost';// Adresse de l' expéditeur
  • var $FromName = 'Root';// Nom de l' expéditeur
  • var $ReplyTo = 'root@localhost';// Adresse de retour
  • var $org = 'Localhost'; // Organisation
  • // A Qui
  • var $To = '';
  • // Utilisation : $Bcc = 'mail1,mail2,....';
  • var $Bcc = '';// Blind Carbon Copy, c'est à dire que les adresses qui sont contenue ici seront invisibles pour tout le monde
  • var $Cc = '';
  • // Priorité
  • var $Priority = 3;// Priorité accordée au mail (valeur allant de 1 pour Urgent à 3 pour normal et 6 pour bas)
  • // Encodage
  • var $ContentType = 'html';//Contenu du mail (texte, html...) (txt , html, txt/html)
  • var $Encoding = '8bit'; // Ancienne valeur quoted-printable
  • var $ISO = 'iso-8859-15';
  • var $MIME = '1.0';// La version mime
  • var $Encode = false;// Encodage necessaire ou pas
  • var $CHARSET = '';
  • // Confirmation de reception
  • var $Confimation_reception = '';// Entrez l' adresse où sera renvoyé la confirmation
  • // Le mail
  • var $Sujet = '';
  • var $Body = '';
  • var $Body_txt = '';
  • // Fichier(s) joint(s)
  • var $File_joint = array();
  • // Nombre tour
  • var $Tour = 0;
  • //**************************************************************************
  • // Paramètre de connection SMTP
  • //**************************************************************************
  • var $Authentification_smtp = false;
  • var $serveur = '';// Serveur SMTP
  • var $port = 25;// Port SMTP
  • var $login_smtp = '';// Login pour le serveur SMTP
  • var $mdp_smtp = '';// Mot de passe pour le serveur SMTP
  • var $time_out = 10;// Durée de la connection avec le serveur SMTP
  • var $tls = false;// Activation de la connection sécurisée (anciennement ssl)
  • //**************************************************************************
  • // Variables temporaires
  • //**************************************************************************
  • var $smtp_connection = '';// Variable de connection
  • var $erreur = '';
  • var $debug = false;
  • //------------------------------------------------------------------------------
  • //**************************************************************************
  • // Fonction de déclaration de connection SMTP
  • //**************************************************************************
  • function SMTP($serveur='', $user='', $pass='', $port=25, $NomDuDomaine='', $debug=false){
  • if($serveur){
  • $this->serveur = $serveur;
  • }
  • if($user){
  • $this->Authentification_smtp = true;
  • $this->login_smtp = $user;
  • $this->mdp_smtp = $pass;
  • }
  • $this->port = $port;
  • if($NomDuDomaine){
  • $this->NomDuDomaine = $NomDuDomaine;
  • }
  • $this->debug = $debug;
  • }
  • //**************************************************************************
  • // Fonction de connection SMTP
  • //**************************************************************************
  • function Connect_SMTP(){
  • // Definition du charset
  • if(!$this->CHARSET){ $this->CHARSET = mb_internal_encoding(); }
  • // Connection au serveur SMTP
  • $this->smtp_connection = fsockopen($this->serveur, // Serveur
  • $this->port, // Port de connection
  • $num_erreur, // Numéros de l' erreur
  • $msg_erreur, // Message d' erreur
  • $this->time_out); // Durée de la connection en secs
  • if(!$this->smtp_connection){// Vérification de la connection
  • $this->erreur = 'Impossible de se connecter au serveur SMTP !!!<br />'."\r\n"
  • .'Numéro de l&#39; erreur: '.$num_erreur.'<br />'."\r\n"
  • .'Message renvoyé: '.$msg_erreur.'<br />'."\r\n";
  • return false;
  • }
  • // Suppression du message d' accueil
  • $reponce = $this->get_smtp_data();
  • // Debug
  • if($this->debug){
  • echo '<div style="color:#993300;">Connection</div>',"\r\n",str_replace("\r\n", '<br />', $reponce['msg']);
  • }
  • // On règle le timeout du serveur SMTP car parfois, le serveur SMTP peut être un peut lent à répondre
  • // Windows ne comprend pas la fonction socket_set_timeout donc on vérifi que l' on travail sous Linux
  • if(substr(PHP_OS, 0, 3) !== 'WIN'){
  • socket_set_timeout($this->smtp_connection, $this->time_out, 0);
  • }
  • //**********************************************************************
  • // Commande EHLO et HELO
  • if($this->NomDuDomaine === ''){// On vérifit si le nom de domaine à été renseigné
  • if($_SERVER['SERVER_NAME'] !== ''){
  • $this->NomDuDomaine = $_SERVER['SERVER_NAME'];
  • }else{
  • $this->NomDuDomaine = 'localhost.localdomain';
  • }
  • }
  • if(!$this->Commande('EHLO '.$this->NomDuDomaine, 250)){// Commande EHLO
  • // Deusième commande EHLO -> HELO
  • if(!$this->Commande('HELO '.$this->NomDuDomaine, 250, 'Le serveur refuse l&#39; authentification (EHLO et HELO) !!!')){// Commande HELO
  • return false;
  • }
  • }
  • if($this->tls && !$this->Commande('STARTTLS', 220, 'Le serveur refuse la connection sécurisée ( STARTTLS ) !!!')){// Commande STARTTLS
  • return false;
  • }
  • if($this->Authentification_smtp){// On vérifi si l' on a besoin de s' authentifier
  • //******************************************************************
  • // Authentification
  • //******************************************************************
  • if(!$this->Commande('AUTH LOGIN', 334, 'Le serveur refuse l&#39; authentification (AUTH LOGIN) !!!')){
  • return false;
  • }
  • //******************************************************************
  • // Authentification : Login
  • //******************************************************************
  • $tmp = $this->Commande(base64_encode($this->login_smtp), 334, 'Login ( Nom d&#39; utilisateur ) incorrect !!!', 0);
  • if(!$tmp['no_error']){
  • return false;
  • }
  • // Debug
  • if($this->debug){
  • echo '<div style="color:#993300;">Envoie du login.</div>',"\r\n",str_replace("\r\n", '<br />', $tmp['msg']);
  • }
  • //******************************************************************
  • // Authentification : Mot de passe
  • //******************************************************************
  • $tmp = $this->Commande(base64_encode($this->mdp_smtp), 235, 'Mot de passe incorrect !!!', 0);
  • if(!$tmp['no_error']){
  • return false;
  • }
  • // Debug
  • if($this->debug){
  • echo '<div style="color:#993300;">Envoie du mot de passe.</div>',"\r\n",str_replace("\r\n", '<br />', $tmp['msg']);
  • }
  • }
  • //**********************************************************************
  • // Connecté au serveur SMTP
  • //**********************************************************************
  • return true;
  • }
  • //**************************************************************************
  • // Fonctons de set
  • //**************************************************************************
  • function set_from($name, $email='', $org='Localhost'){
  • $this->FromName = $name;
  • if($this->Encode){
  • $this->FromName = $this->encode_mimeheader(mb_convert_encoding($this->FromName, $this->ISO, $this->CHARSET), $this->ISO);
  • }
  • if(!empty($email)){
  • $this->From = $email;
  • }
  • $this->org = $org;
  • unset($name, $email, $org);
  • }
  • function set_encode($ISO, $CHARSET=''){
  • $this->Encode = true;
  • $this->ISO = $ISO;
  • $this->CHARSET = $CHARSET;
  • unset($ISO, $CHARSET);
  • }
  • //**************************************************************************
  • // System d' encodage par Pierre CORBEL
  • //**************************************************************************
  • function encode_mimeheader($string){
  • $encoded = '';
  • $CHARSET = mb_internal_encoding();
  • // Each line must have length <= 75, including `=?'.$this->CHARSET.'?B?` and `?=`
  • $length = 75 - strlen('=?'.$this->CHARSET.'?B?') - 2;
  • $tmp = mb_strlen($string, $this->CHARSET);
  • // Average multi-byte ratio
  • $ratio = mb_strlen($string, $this->CHARSET) / strlen($string);
  • // Base64 has a 4:3 ratio
  • $magic = floor(3 * $length * $ratio / 4);
  • $avglength = $magic;
  • for($i=0; $i <= $tmp; $i+=$magic) {
  • $magic = $avglength;
  • $offset = 0;
  • // Recalculate magic for each line to be 100% sure
  • do{
  • $magic -= $offset;
  • $chunk = mb_substr($string, $i, $magic, $this->CHARSET);
  • $chunk = base64_encode($chunk);
  • $offset++;
  • }while(strlen($chunk) > $length);
  • if($chunk){
  • $encoded .= ' '.'=?'.$this->CHARSET.'?B?'.$chunk.'?='."\r\n";
  • }
  • }
  • // Chomp the first space and the last linefeed
  • return substr($encoded, 1, -2);
  • }
  • //**************************************************************************
  • // Foncton d' ajout de pièce jointe
  • //**************************************************************************
  • function add_file($url_file){
  • if(!$url_file){
  • $this->erreur = 'Champs manquant !!!<br />'."\r\n";
  • return false;
  • }
  • if(!($fp = @fopen($url_file, 'a'))){
  • $this->erreur = 'Fichier introuvable !!!<br />'."\r\n";
  • return false;
  • }
  • fclose($fp);
  • $file_name = explode('/', $url_file);
  • $file_name = $file_name[count($file_name)-1];
  • $mime = parse_ini_file('./mime.ini');
  • $ext = explode('.', $file_name);
  • $ext = $ext[count($ext)-1];
  • if(IsSet($this->File_joint[$file_name])){
  • $file_name = explode('_', str_replace('.'.$ext, '', $file_name));
  • if(is_numeric($file_name[count($file_name)-1])){
  • $file_name[count($file_name)-1]++;
  • $file_name = implode('_', $file_name);
  • }else{
  • $file_name = implode('_', $file_name);
  • $file_name .= '_1';
  • }
  • $file_name .= '.'.$ext;
  • }
  • $this->File_joint[$file_name] = array(
  • 'url' => $url_file,
  • 'mime' => $mime[$ext]
  • );
  • unset($file_name, $mime, $ext);
  • }
  • //**************************************************************************
  • // Entêtes (Headers)
  • //**************************************************************************
  • function headers(){
  • // Id unique
  • $Boundary1 = '------------Boundary-00=_'.substr(md5(uniqid(time())), 0, 7).'0000000000000';
  • $Boundary2 = '------------Boundary-00=_'.substr(md5(uniqid(time())), 0, 7).'0000000000000';
  • $Boundary3 = '------------Boundary-00=_'.substr(md5(uniqid(time())), 0, 7).'0000000000000';
  • $header = '';
  • $No_body = 0;
  • // Adresse de l'expéditeur (format : Nom <adresse_mail>)
  • if(!empty($this->From)){
  • $header .= 'X-Sender: '.$this->From."\n";// Adresse réelle de l'expéditeur
  • }
  • // La version mime
  • if(!empty($this->MIME)){
  • $header .= 'MIME-Version: '.$this->MIME."\n";
  • }
  • $header .= sprintf("Message-ID: <%s@%s>%s", md5(uniqid(time())), $this->NomDuDomaine, "\n")
  • .'Date: '.date('r')."\n"
  • .'Content-Type: Multipart/Mixed;'."\n"
  • .' boundary="'.$Boundary1.'"'."\n"
  • // Logiciel utilisé pour l' envoi des mails
  • .'X-Mailer: PHP '.phpversion()."\n";
  • // Adresse de l'expéditeur (format : Nom <adresse_mail>)
  • if(!empty($this->From)){
  • if(!empty($this->FromName)){
  • $header .= 'From: "'.$this->FromName.'"';
  • }else{
  • $header .= 'From: ';
  • }
  • $header .= '<'.$this->From.">\n";
  • }
  • $header .= 'X-FID: FLAVOR00-NONE-0000-0000-000000000000'."\n";
  • // Priorité accordée au mail (valeur allant de 1 pour Urgent à 3 pour normal et 6 pour bas)
  • if(!empty($this->Priority)){
  • $header .= 'X-Priority: '.$this->Priority."\n";
  • }
  • // To
  • if(!empty($this->To)){// A
  • $header .= 'To: '.$this->To."\n";
  • }else{
  • $No_body++;// Personne
  • }
  • // Cc
  • if(!empty($this->Cc)){// Copie du mail
  • $header .= 'Cc: '.$this->Cc."\n";
  • }else{
  • $No_body++;// Personne
  • }
  • // Bcc
  • if(empty($this->Bcc)){// Blind Carbon Copy, c' est à dire que les adresses qui sont contenue ici seront invisibles pour tout le monde
  • $No_body++;// Personne
  • }
  • // Sujet
  • if(!empty($this->Sujet)){
  • $header .= 'Subject: '.$this->Sujet."\n";
  • }
  • if(!empty($this->Confimation_reception)){// Adresse utilisée pour la réponse au mail
  • $header .= 'Disposition-Notification-To: <'.$this->Confimation_reception.'>'."\n";
  • }
  • // ReplyTo
  • if(!empty($this->ReplyTo) && $this->ReplyTo !== $this->From && $this->ReplyTo !== 'root@localhost'){// Adresse utilisée pour la réponse au mail
  • $header .= 'Reply-to: '.$this->ReplyTo."\n"
  • .'Return-Path: <'.$this->ReplyTo.">\n";
  • }
  • if(!IsSet($_SERVER['REMOTE_ADDR'])){$_SERVER['REMOTE_ADDR'] = '127.0.0.1';}
  • if(!IsSet($_SERVER['HTTP_X_FORWARDED_FOR'])){$_SERVER['HTTP_X_FORWARDED_FOR'] = '';}
  • if(!IsSet($_SERVER['HTTP_USER_AGENT'])){$_SERVER['HTTP_USER_AGENT'] = 'Internet Explorer';}
  • if(!IsSet($_SERVER['HTTP_ACCEPT_LANGUAGE'])){$_SERVER['HTTP_ACCEPT_LANGUAGE'] = 'Fr-fr';}
  • $host = 'localhost';
  • if(function_exists('gethostbyaddr') && $_SERVER['REMOTE_ADDR'] !== '127.0.0.1'){$host = gethostbyaddr($_SERVER['REMOTE_ADDR']);}
  • $header .= 'X-Client-IP: '.$_SERVER['REMOTE_ADDR']."\n"
  • .'X-Client-PROXY: '.$_SERVER['HTTP_X_FORWARDED_FOR']."\n"
  • .'X-Client-Agent: '.$_SERVER['HTTP_USER_AGENT']."\n"
  • .'X-Client-Host: '.$host."\n"
  • .'X-Client-Language: '.$_SERVER['HTTP_ACCEPT_LANGUAGE']."\n"
  • .'Organization: '.$this->org."\n"
  • ."\n\n\n"
  • .'--'.$Boundary1."\n"
  • .'Content-Type: Multipart/Alternative;'."\n"
  • .' boundary="'.$Boundary3.'"'."\n"
  • ."\n\n"
  • .'--'.$Boundary3."\n";
  • if($this->ContentType === 'txt' || $this->ContentType === 'txt/html'){
  • $header .= 'Content-Type: Text/Plain;'."\r\n"
  • .' charset="'.$this->ISO.'"'."\r\n"
  • .'Content-Transfer-Encoding: '.$this->Encoding."\r\n"
  • ."\r\n";
  • if($this->ContentType === 'txt'){
  • $header .= $this->Body."\r\n";
  • }else{
  • $header .= $this->Body_txt."\r\n";
  • }
  • }elseif($this->ContentType === 'html' || $this->ContentType === 'txt/html'){
  • if($this->ContentType === 'txt/html'){
  • $header .= '--'.$Boundary3."\r\n";
  • }
  • $header .= 'Content-Type: Text/HTML;'."\r\n"
  • .' charset="'.$this->ISO.'"'."\r\n"
  • .'Content-Transfer-Encoding: '.$this->Encoding."\r\n"
  • ."\r\n"
  • .'<html><head>'."\r\n"
  • .'<meta http-equiv="Content-LANGUAGE" content="French" />'."\r\n"
  • .'<meta http-equiv="Content-Type" content="text/html; charset='.$this->ISO.'" />'."\r\n"
  • .'</head>'."\r\n"
  • .'<body>'."\r\n"
  • .$this->Body."\r\n"
  • .'</body></html>'."\r\n"
  • .'--'.$Boundary3.'--'."\r\n";
  • }else{
  • $header .= 'Content-Type: '.$this->ContentType.';'."\r\n"
  • .' charset="'.$this->ISO.'"'."\r\n"
  • .'Content-Transfer-Encoding: '.$this->Encoding."\r\n"
  • ."\r\n"
  • .$this->Body."\r\n";
  • }
  • $header .= "\n";
  • // On joint le ou les fichiers
  • if($this->File_joint){
  • foreach($this->File_joint as $file_name => $file){
  • $header .= '--'.$Boundary1."\n"
  • .'Content-Type: '.$file['mime'].';'."\n"
  • .' name="'.$file_name.'"'."\n"
  • .'Content-Disposition: attachment'."\n"
  • .'Content-Transfer-Encoding: base64'."\n"
  • ."\n"
  • .chunk_split(base64_encode(file_get_contents($file['url'])))."\n"
  • ."\n\n";
  • }
  • }
  • $header .= '--'.$Boundary1.'--';
  • if($No_body === 3){
  • $this->erreur = 'Le mail n&#39; a pas de destinataire !!!';
  • return false;
  • }
  • return $header;
  • }
  • //**************************************************************************
  • // Envoie du mail avec le serveur SMTP
  • //**************************************************************************
  • function smtp_mail($to, $subject, $message, $header=''){
  • // Pas de déconnection automatique
  • $auto_disconnect = false;
  • // On vérifit si la connection existe
  • if(empty($this->smtp_connection)){
  • if(!$this->Connect_SMTP()){// Connection
  • $this->erreur .= 'Impossible d&#39; envoyer le mail !!!<br />'."\r\n";
  • return false;
  • }
  • $auto_disconnect = true;// Déconnection automatique activée
  • }
  • // On vérifit Que c' est le premier tour sinon on éfface les anciens paramètres
  • if($this->Tour){
  • if($this->Commande('RSET', 250, 'Envoie du mail impossible !!!')){
  • $this->Tour = 0;
  • }
  • }
  • //**********************************************************************
  • // Variables temporairement modifiées
  • if(!empty($to)){
  • $this->To = $to;
  • }
  • if(!empty($subject)){
  • if($this->Encode){
  • $this->Sujet = $this->encode_mimeheader(mb_convert_encoding($subject, $this->ISO, $this->CHARSET), $this->ISO);
  • }else{
  • $this->Sujet = mb_encode_mimeheader($subject, $this->ISO);
  • }
  • }
  • if(is_array($message)){
  • $this->Body = $message[0];
  • $this->Body_txt = $message[1];
  • if($this->Encode){
  • $this->Body = mb_convert_encoding($this->Body, $this->ISO, $this->CHARSET);
  • $this->Body_txt = mb_convert_encoding($this->Body_txt, $this->ISO, $this->CHARSET);
  • }
  • }else{
  • $this->Body = $message;
  • if($this->Encode){
  • $this->Body = mb_convert_encoding($this->Body, $this->ISO, $this->CHARSET);
  • }
  • }
  • //**********************************************************************
  • // Y a t' il un destinataire
  • if(empty($this->To) && empty($header) && empty($this->Bcc) && empty($this->Cc)){
  • $this->erreur = 'Veuillez entrer une adresse de destination !!!<br />'."\r\n";
  • return false;
  • }
  • //**********************************************************************
  • // Envoie des informations
  • //**********************************************************************
  • //**********************************************************************
  • // De Qui
  • if(!empty($this->From) && !$this->Tour){
  • if(!$this->Commande('MAIL FROM:<'.$this->From.'>', 250, 'Envoie du mail impossible car le serveur n&#39; accèpte pas la commande MAIL FROM !!!')){
  • return false;
  • }
  • $this->Tour = 1;
  • }
  • //**********************************************************************
  • // A Qui
  • $A = array();
  • if(!empty($this->To)){
  • $A[0] = $this->To;
  • }
  • if(!empty($this->Bcc)){
  • $A[1] = $this->Bcc;
  • }
  • if(!empty($this->Cc)){
  • $A[2] = $this->Cc;
  • }
  • foreach($A as $cle => $tmp_to){
  • if(substr_count($tmp_to, ',')){
  • $tmp_to = explode(',', $tmp_to);
  • foreach($tmp_to as $cle => $tmp_A){
  • if(!$this->Commande('RCPT TO:<'.$tmp_A.'>', array(250,251), 'Envoie du mail impossible car le serveur n&#39; accèpte pas la commande RCPT TO !!!')){
  • return false;
  • }
  • }
  • }else{
  • if(!$this->Commande('RCPT TO:<'.$tmp_to.'>', array(250,251), 'Envoie du mail impossible car le serveur n&#39; accèpte pas la commande RCPT TO !!!')){
  • return false;
  • }
  • }
  • }
  • //**********************************************************************
  • // On créer les entêtes ( headers ) si c' est pas fait
  • if(empty($header)){
  • if(!$header = $this->headers()){
  • $this->erreur .= 'Impossible d&#39; envoyer le mail !!!<br />'."\r\n";
  • return false;
  • }
  • }
  • //**********************************************************************
  • // On indique que l' on va envoyer des données
  • if(!$this->Commande('DATA', 354, 'Envoie du mail impossible car le serveur n&#39; accèpte pas la commande DATA!!!')){
  • return false;
  • }
  • //**********************************************************************
  • // Envoie de l' entête et du message
  • fputs($this->smtp_connection, $header);
  • fputs($this->smtp_connection, "\r\n.\r\n");
  • $reponce = $this->get_smtp_data();
  • // Debug
  • if($this->debug){
  • echo '<div style="color:#993300;">Entête et message :<br />',"\r\n",'<div style="padding-left:25px;">',str_replace(array("\r\n","\n"), '<br />', $header),'<br />',"\r\n",$message,'</div>',"\r\n",'</div>',"\r\n",str_replace("\r\n", '<br />', $reponce['msg']);
  • }
  • if($reponce['code'] !== 250 && $reponce['code'] !== 354){
  • $this->erreur = 'Envoie du mail impossible !!!<br />'."\r\n"
  • .'Numéro de l&#39; erreur: '.$reponce['code'].'<br />'."\r\n"
  • .'Message renvoyé: '.$reponce['msg'].'<br />'."\r\n";
  • return false;
  • }
  • //**********************************************************************
  • // Variables temporairement modifiées
  • if($to === $this->To){
  • $this->To = '';
  • }
  • if($subject === $this->Sujet){
  • $this->Sujet = '';
  • }
  • //**********************************************************************
  • // Déconnection automatique
  • //**********************************************************************
  • if($auto_disconnect){// Auto déconnection ?
  • $this->Deconnection_SMTP();// Déconnection
  • }
  • //**********************************************************************
  • // Mail envoyé
  • //**********************************************************************
  • return true;
  • }
  • //**************************************************************************
  • // Lecture des données renvoyées par le serveur SMTP
  • //**************************************************************************
  • function get_smtp_data(){
  • $data = '';
  • while($donnees = fgets($this->smtp_connection, 515)){// On parcour les données renvoyées
  • $data .= $donnees;
  • if(substr($donnees,3,1) == ' ' && !empty($data)){break;}// On vérifi si on a toutes les données
  • }
  • // Renvoie des données : array(Code, message complet)
  • return array('code'=>(int)substr($data, 0, 3), 'msg'=>$data);
  • }
  • //**************************************************************************
  • // Execution des commandes SMTP
  • //**************************************************************************
  • function Commande($commande, $bad_error, $msg_error='', $debug=1){
  • if(!empty($this->smtp_connection)){
  • fputs($this->smtp_connection, $commande."\n");
  • $reponce = $this->get_smtp_data();
  • // Debug
  • if($this->debug && $debug){
  • echo '<div style="color:#993300;">',htmlentities($commande),'</div>',"\r\n",str_replace("\r\n", '<br />', $reponce['msg']);
  • }
  • // Tableau de code valide
  • if((is_array($bad_error) && !in_array($reponce['code'], $bad_error)) || (!is_array($bad_error) && $reponce['code'] !== $bad_error)){
  • if($msg_error){
  • $this->erreur = $msg_error.'<br />'."\r\n"
  • .'Numéro de l&#39; erreur: '.$reponce['code'].'<br />'."\r\n"
  • .'Message renvoyé: '.$reponce['msg'].'<br />'."\r\n";
  • }
  • if(!$debug){
  • return array('no_error'=>false, 'msg'=>$reponce['msg']);
  • }else{
  • return false;
  • }
  • }
  • if(!$debug){
  • return array('no_error'=>true, 'msg'=>$reponce['msg']);
  • }else{
  • return true;
  • }
  • }else{
  • $this->erreur = 'Impossible d&#39; éxecuter la commande <span style="font-weight:bolder;">'.$commande.'</span> car il n&#39; y a pas de connection !!!<br />'."\r\n";
  • if(!$debug){
  • return array('no_error'=>false, 'msg'=>'');
  • }else{
  • return false;
  • }
  • }
  • }
  • //**************************************************************************
  • // Fonction de déconnection SMTP
  • //**************************************************************************
  • function Deconnection_SMTP(){
  • if(!empty($this->smtp_connection)){
  • if(!$this->Commande('QUIT', 221, 'Impossible de se déconnecter !!!')){
  • return false;
  • }
  • @sleep(5);// On laisse 5 seconde au serveur pour terminer toutes les instructions
  • if(!fclose($this->smtp_connection)){
  • $this->erreur = 'Impossible de se déconnecter !!!<br />'."\r\n";
  • return false;
  • }
  • $this->smtp_connection = 0;
  • return true;
  • }
  • $this->erreur = 'Impossible de se déconnecter car il n&#39; y a pas de connection !!!<br />'."\r\n";
  • return false;
  • }
  • }
  • ?>
<?php
/*******************************************************************************
*
* Nom de la source :
*       Class SMTP
* Nom du fichier par défaut :
*       Class.SMTP.php
* Auteur :
*       Nuel Guillaume alias Immortal-PC
* Site Web :
*       http://immortal-pc.info/
*
*******************************************************************************/

class SMTP {
    // Nom du domaine ou nom du serveur
    var $NomDuDomaine = '';

    // De Qui
    var $From = 'root@localhost';// Adresse de l' expéditeur
    var $FromName = 'Root';// Nom de l' expéditeur
    var $ReplyTo = 'root@localhost';// Adresse de retour
    var $org = 'Localhost'; // Organisation

    // A Qui
    var $To = '';
    // Utilisation : $Bcc = 'mail1,mail2,....';
    var $Bcc = '';// Blind Carbon Copy, c'est à dire que les adresses qui sont contenue ici seront invisibles pour tout le monde
    var $Cc = '';

    // Priorité
    var $Priority = 3;// Priorité accordée au mail (valeur allant de 1 pour Urgent à 3 pour normal et 6 pour bas)

    // Encodage
    var $ContentType = 'html';//Contenu du mail (texte, html...) (txt , html, txt/html)
    var $Encoding = '8bit'; // Ancienne valeur quoted-printable
    var $ISO = 'iso-8859-15';
    var $MIME = '1.0';// La version mime
    var $Encode = false;// Encodage necessaire ou pas
	var $CHARSET = '';

    // Confirmation de reception
    var $Confimation_reception = '';// Entrez l' adresse où sera renvoyé la confirmation

    // Le mail
    var $Sujet = '';
    var $Body = '';
    var $Body_txt = '';
    
    // Fichier(s) joint(s)
    var $File_joint = array();
    
    // Nombre tour
    var $Tour = 0;


    //**************************************************************************
    // Paramètre de connection SMTP
    //**************************************************************************
    var $Authentification_smtp = false;
    
    var $serveur = '';// Serveur SMTP
    var $port = 25;// Port SMTP
    var $login_smtp = '';// Login pour le serveur SMTP
    var $mdp_smtp = '';// Mot de passe pour le serveur SMTP
    var $time_out = 10;// Durée de la connection avec le serveur SMTP
    var $tls = false;// Activation de la connection sécurisée (anciennement ssl)


    //**************************************************************************
    // Variables temporaires
    //**************************************************************************
    var $smtp_connection = '';// Variable de connection
    var $erreur = '';
    var $debug = false;

//------------------------------------------------------------------------------

    //**************************************************************************
    // Fonction de déclaration de connection SMTP
    //**************************************************************************
    function SMTP($serveur='', $user='', $pass='', $port=25, $NomDuDomaine='', $debug=false){
        if($serveur){
            $this->serveur = $serveur;
        }
        if($user){
            $this->Authentification_smtp = true;
            $this->login_smtp = $user;
            $this->mdp_smtp = $pass;
        }
        $this->port = $port;
        if($NomDuDomaine){
            $this->NomDuDomaine = $NomDuDomaine;
        }
        $this->debug = $debug;
    }


    //**************************************************************************
    // Fonction de connection SMTP
    //**************************************************************************
    function Connect_SMTP(){
		// Definition du charset
		if(!$this->CHARSET){ $this->CHARSET = mb_internal_encoding(); }
		
        // Connection au serveur SMTP
        $this->smtp_connection = fsockopen($this->serveur, // Serveur
                                     $this->port,          // Port de connection
                                     $num_erreur,    	   // Numéros de l' erreur
                                     $msg_erreur,    	   // Message d' erreur
                                     $this->time_out);     // Durée de la connection en secs
        if(!$this->smtp_connection){// Vérification de la connection
            $this->erreur = 'Impossible de se connecter au serveur SMTP !!!<br />'."\r\n"
            .'Numéro de l&#39; erreur: '.$num_erreur.'<br />'."\r\n"
            .'Message renvoyé: '.$msg_erreur.'<br />'."\r\n";
            return false;
        }
        
        // Suppression du message d' accueil
        $reponce = $this->get_smtp_data();
        // Debug
        if($this->debug){
            echo '<div style="color:#993300;">Connection</div>',"\r\n",str_replace("\r\n", '<br />', $reponce['msg']);
        }

        // On règle le timeout du serveur SMTP car parfois, le serveur SMTP peut être un peut lent à répondre
        // Windows ne comprend pas la fonction socket_set_timeout donc on vérifi que l' on travail sous Linux
        if(substr(PHP_OS, 0, 3) !== 'WIN'){
           socket_set_timeout($this->smtp_connection, $this->time_out, 0);
        }
        
        //**********************************************************************
        // Commande EHLO et HELO
        if($this->NomDuDomaine === ''){// On vérifit si le nom de domaine à été renseigné
            if($_SERVER['SERVER_NAME'] !== ''){
                $this->NomDuDomaine = $_SERVER['SERVER_NAME'];
            }else{
                $this->NomDuDomaine = 'localhost.localdomain';
            }
        }

        if(!$this->Commande('EHLO '.$this->NomDuDomaine, 250)){// Commande EHLO
            // Deusième commande EHLO -> HELO
            if(!$this->Commande('HELO '.$this->NomDuDomaine, 250, 'Le serveur refuse l&#39; authentification (EHLO et HELO) !!!')){// Commande HELO
                return false;
            }
        }

        if($this->tls && !$this->Commande('STARTTLS', 220, 'Le serveur refuse la connection sécurisée ( STARTTLS ) !!!')){// Commande STARTTLS
            return false;
        }
        
        if($this->Authentification_smtp){// On vérifi si l' on a besoin de s' authentifier
            //******************************************************************
            // Authentification
            //******************************************************************
            if(!$this->Commande('AUTH LOGIN', 334, 'Le serveur refuse l&#39; authentification (AUTH LOGIN) !!!')){
                return false;
            }


            //******************************************************************
            // Authentification : Login
            //******************************************************************
            $tmp = $this->Commande(base64_encode($this->login_smtp), 334, 'Login ( Nom d&#39; utilisateur ) incorrect !!!', 0);
            if(!$tmp['no_error']){
                return false;
            }
            // Debug
            if($this->debug){
                echo '<div style="color:#993300;">Envoie du login.</div>',"\r\n",str_replace("\r\n", '<br />', $tmp['msg']);
            }


            //******************************************************************
            // Authentification : Mot de passe
            //******************************************************************
            $tmp = $this->Commande(base64_encode($this->mdp_smtp), 235, 'Mot de passe incorrect !!!', 0);
            if(!$tmp['no_error']){
                return false;
            }
            // Debug
            if($this->debug){
                echo '<div style="color:#993300;">Envoie du mot de passe.</div>',"\r\n",str_replace("\r\n", '<br />', $tmp['msg']);
            }

        }

        //**********************************************************************
        // Connecté au serveur SMTP
        //**********************************************************************
        return true;
    }


    //**************************************************************************
    // Fonctons de set
    //**************************************************************************
    function set_from($name, $email='', $org='Localhost'){
		$this->FromName = $name;
		if($this->Encode){
			$this->FromName = $this->encode_mimeheader(mb_convert_encoding($this->FromName, $this->ISO, $this->CHARSET), $this->ISO);
		}
        if(!empty($email)){
            $this->From = $email;
        }
        $this->org = $org;
        unset($name, $email, $org);
    }

    function set_encode($ISO, $CHARSET=''){
		$this->Encode = true;
		$this->ISO = $ISO;
		$this->CHARSET = $CHARSET;
        unset($ISO, $CHARSET);
    }


    //**************************************************************************
    // System d' encodage par Pierre CORBEL
    //**************************************************************************
	function encode_mimeheader($string){
		$encoded = '';
		$CHARSET = mb_internal_encoding();
		// Each line must have length <= 75, including `=?'.$this->CHARSET.'?B?` and `?=`
		$length = 75 - strlen('=?'.$this->CHARSET.'?B?') - 2;
		$tmp = mb_strlen($string, $this->CHARSET);
		// Average multi-byte ratio 
		$ratio = mb_strlen($string, $this->CHARSET) / strlen($string);
		// Base64 has a 4:3 ratio 
		$magic = floor(3 * $length * $ratio / 4);
		$avglength = $magic;
	
		for($i=0; $i <= $tmp; $i+=$magic) {
			$magic = $avglength;
			$offset = 0;
			// Recalculate magic for each line to be 100% sure
			do{
				$magic -= $offset;
				$chunk = mb_substr($string, $i, $magic, $this->CHARSET);
				$chunk = base64_encode($chunk);
				$offset++;
			}while(strlen($chunk) > $length);
			if($chunk){
				$encoded .= ' '.'=?'.$this->CHARSET.'?B?'.$chunk.'?='."\r\n";
			}
		}
		// Chomp the first space and the last linefeed
		return substr($encoded, 1, -2);
	}


    //**************************************************************************
    // Foncton d' ajout de pièce jointe
    //**************************************************************************
    function add_file($url_file){
    	if(!$url_file){
			$this->erreur = 'Champs manquant !!!<br />'."\r\n";
			return false;
		}
		if(!($fp = @fopen($url_file, 'a'))){
			$this->erreur = 'Fichier introuvable !!!<br />'."\r\n";
			return false;
		}
		fclose($fp);
		
		$file_name = explode('/', $url_file);
		$file_name = $file_name[count($file_name)-1];
		$mime = parse_ini_file('./mime.ini');
		$ext = explode('.', $file_name);
		$ext = $ext[count($ext)-1];

		if(IsSet($this->File_joint[$file_name])){
			$file_name = explode('_', str_replace('.'.$ext, '', $file_name));
			if(is_numeric($file_name[count($file_name)-1])){
				$file_name[count($file_name)-1]++;
				$file_name = implode('_', $file_name);
			}else{
				$file_name = implode('_', $file_name);
				$file_name .= '_1';
			}
			$file_name .= '.'.$ext;
		}
		$this->File_joint[$file_name] = array(
										'url' => $url_file,
										'mime' => $mime[$ext]
										);
		unset($file_name, $mime, $ext);
    }


    //**************************************************************************
    // Entêtes (Headers)
    //**************************************************************************
    function headers(){
		// Id unique
		$Boundary1 = '------------Boundary-00=_'.substr(md5(uniqid(time())), 0, 7).'0000000000000';
		$Boundary2 = '------------Boundary-00=_'.substr(md5(uniqid(time())), 0, 7).'0000000000000';
		$Boundary3 = '------------Boundary-00=_'.substr(md5(uniqid(time())), 0, 7).'0000000000000';       

        $header = '';
        $No_body = 0;
        
        // Adresse de l'expéditeur (format : Nom <adresse_mail>)
        if(!empty($this->From)){
            $header .= 'X-Sender: '.$this->From."\n";// Adresse réelle de l'expéditeur
        }
		// La version mime
        if(!empty($this->MIME)){
            $header .= 'MIME-Version: '.$this->MIME."\n";
        }
        $header .= sprintf("Message-ID: <%s@%s>%s", md5(uniqid(time())), $this->NomDuDomaine, "\n")
        .'Date: '.date('r')."\n"
        .'Content-Type: Multipart/Mixed;'."\n"
        .'  boundary="'.$Boundary1.'"'."\n"
        // Logiciel utilisé pour l' envoi des mails
		.'X-Mailer: PHP '.phpversion()."\n";
		// Adresse de l'expéditeur (format : Nom <adresse_mail>)
        if(!empty($this->From)){
            if(!empty($this->FromName)){
                $header .= 'From: "'.$this->FromName.'"';
            }else{
                $header .= 'From: ';
            }
            $header .= '<'.$this->From.">\n";
		}
		$header .= 'X-FID: FLAVOR00-NONE-0000-0000-000000000000'."\n";
		
		// Priorité accordée au mail (valeur allant de 1 pour Urgent à 3 pour normal et 6 pour bas)		
        if(!empty($this->Priority)){
            $header .= 'X-Priority: '.$this->Priority."\n";
        }
		// To	
        if(!empty($this->To)){// A
            $header .= 'To: '.$this->To."\n";
        }else{
            $No_body++;// Personne
        }
        // Cc
        if(!empty($this->Cc)){// Copie du mail
            $header .= 'Cc: '.$this->Cc."\n";
        }else{
            $No_body++;// Personne
        }
        // Bcc
        if(empty($this->Bcc)){// Blind Carbon Copy, c' est à dire que les adresses qui sont contenue ici seront invisibles pour tout le monde
            $No_body++;// Personne
        }
        // Sujet
        if(!empty($this->Sujet)){
            $header .= 'Subject: '.$this->Sujet."\n";
        }
        if(!empty($this->Confimation_reception)){// Adresse utilisée pour la réponse au mail
            $header .= 'Disposition-Notification-To: <'.$this->Confimation_reception.'>'."\n";
        }
		// ReplyTo
		if(!empty($this->ReplyTo) && $this->ReplyTo !== $this->From && $this->ReplyTo !== 'root@localhost'){// Adresse utilisée pour la réponse au mail
            $header .= 'Reply-to: '.$this->ReplyTo."\n"
            .'Return-Path: <'.$this->ReplyTo.">\n";
        }
        if(!IsSet($_SERVER['REMOTE_ADDR'])){$_SERVER['REMOTE_ADDR'] = '127.0.0.1';}
        if(!IsSet($_SERVER['HTTP_X_FORWARDED_FOR'])){$_SERVER['HTTP_X_FORWARDED_FOR'] = '';}
        if(!IsSet($_SERVER['HTTP_USER_AGENT'])){$_SERVER['HTTP_USER_AGENT'] = 'Internet Explorer';}
        if(!IsSet($_SERVER['HTTP_ACCEPT_LANGUAGE'])){$_SERVER['HTTP_ACCEPT_LANGUAGE'] = 'Fr-fr';}
        $host = 'localhost';
        if(function_exists('gethostbyaddr') && $_SERVER['REMOTE_ADDR'] !== '127.0.0.1'){$host = gethostbyaddr($_SERVER['REMOTE_ADDR']);}
        $header .= 'X-Client-IP: '.$_SERVER['REMOTE_ADDR']."\n"
		.'X-Client-PROXY: '.$_SERVER['HTTP_X_FORWARDED_FOR']."\n"
		.'X-Client-Agent: '.$_SERVER['HTTP_USER_AGENT']."\n"
		.'X-Client-Host: '.$host."\n"
		.'X-Client-Language: '.$_SERVER['HTTP_ACCEPT_LANGUAGE']."\n"
		.'Organization: '.$this->org."\n"
		."\n\n\n"
		.'--'.$Boundary1."\n"
		.'Content-Type: Multipart/Alternative;'."\n"
		.'  boundary="'.$Boundary3.'"'."\n"
		."\n\n"
		.'--'.$Boundary3."\n";
		if($this->ContentType === 'txt' || $this->ContentType === 'txt/html'){
			$header .= 'Content-Type: Text/Plain;'."\r\n"
			.'  charset="'.$this->ISO.'"'."\r\n"
			.'Content-Transfer-Encoding: '.$this->Encoding."\r\n"
			."\r\n";
			if($this->ContentType === 'txt'){
				$header .= $this->Body."\r\n";
			}else{
				$header .= $this->Body_txt."\r\n";
			}
		}elseif($this->ContentType === 'html' || $this->ContentType === 'txt/html'){
			if($this->ContentType === 'txt/html'){
				$header .= '--'.$Boundary3."\r\n";
			}
			$header .= 'Content-Type: Text/HTML;'."\r\n"
			.'  charset="'.$this->ISO.'"'."\r\n"
			.'Content-Transfer-Encoding: '.$this->Encoding."\r\n"
			."\r\n"
			.'<html><head>'."\r\n"
			.'<meta http-equiv="Content-LANGUAGE" content="French" />'."\r\n"
			.'<meta http-equiv="Content-Type" content="text/html; charset='.$this->ISO.'" />'."\r\n"
			.'</head>'."\r\n"
			.'<body>'."\r\n"
			.$this->Body."\r\n"
			.'</body></html>'."\r\n"
			.'--'.$Boundary3.'--'."\r\n";
		}else{
			$header .= 'Content-Type: '.$this->ContentType.';'."\r\n"
			.'  charset="'.$this->ISO.'"'."\r\n"
			.'Content-Transfer-Encoding: '.$this->Encoding."\r\n"
			."\r\n"
			.$this->Body."\r\n";	
		}
		$header .= "\n";
		
		// On joint le ou les fichiers
		if($this->File_joint){
			foreach($this->File_joint as $file_name => $file){
		        $header .= '--'.$Boundary1."\n"
				.'Content-Type: '.$file['mime'].';'."\n"
				.'  name="'.$file_name.'"'."\n"
				.'Content-Disposition: attachment'."\n"
				.'Content-Transfer-Encoding: base64'."\n"
				."\n"
				.chunk_split(base64_encode(file_get_contents($file['url'])))."\n"
				."\n\n";
			}
		}
		$header .= '--'.$Boundary1.'--';
        
        if($No_body === 3){
            $this->erreur = 'Le mail n&#39; a pas de destinataire !!!';
            return false;
        }
        return $header;
    }


    //**************************************************************************
    // Envoie du mail avec le serveur SMTP
    //**************************************************************************
    function smtp_mail($to, $subject, $message, $header=''){
        // Pas de déconnection automatique
        $auto_disconnect = false;
        // On vérifit si la connection existe
        if(empty($this->smtp_connection)){
            if(!$this->Connect_SMTP()){// Connection
                $this->erreur .= 'Impossible d&#39; envoyer le mail !!!<br />'."\r\n";
                return false;
            }
            $auto_disconnect = true;// Déconnection automatique activée
        }
        
        // On vérifit Que c' est le premier tour sinon on éfface les anciens paramètres
        if($this->Tour){
            if($this->Commande('RSET', 250, 'Envoie du mail impossible !!!')){
                $this->Tour = 0;
            }
        }
        
        //**********************************************************************
        // Variables temporairement modifiées
        if(!empty($to)){
            $this->To = $to;
        }
        if(!empty($subject)){
			if($this->Encode){
				$this->Sujet = $this->encode_mimeheader(mb_convert_encoding($subject, $this->ISO, $this->CHARSET), $this->ISO);
			}else{
				$this->Sujet = mb_encode_mimeheader($subject, $this->ISO);
			}
        }
        
        if(is_array($message)){
			$this->Body = $message[0];
			$this->Body_txt = $message[1];
			if($this->Encode){
				$this->Body = mb_convert_encoding($this->Body, $this->ISO, $this->CHARSET);
				$this->Body_txt = mb_convert_encoding($this->Body_txt, $this->ISO, $this->CHARSET);
			}
		}else{
        	$this->Body = $message;
			if($this->Encode){
				$this->Body = mb_convert_encoding($this->Body, $this->ISO, $this->CHARSET);
			}
        }

        //**********************************************************************
        // Y a t' il un destinataire
        if(empty($this->To) && empty($header) && empty($this->Bcc) && empty($this->Cc)){
            $this->erreur = 'Veuillez entrer une adresse de destination !!!<br />'."\r\n";
            return false;
        }
        
        //**********************************************************************
        // Envoie des informations
        //**********************************************************************

        //**********************************************************************
        // De Qui
        if(!empty($this->From) && !$this->Tour){
            if(!$this->Commande('MAIL FROM:<'.$this->From.'>', 250, 'Envoie du mail impossible car le serveur n&#39; accèpte pas la commande MAIL FROM !!!')){
                return false;
            }
            $this->Tour = 1;
        }

        //**********************************************************************
        // A Qui
        $A = array();
        if(!empty($this->To)){
            $A[0] = $this->To;
        }
        if(!empty($this->Bcc)){
            $A[1] = $this->Bcc;
        }
        if(!empty($this->Cc)){
            $A[2] = $this->Cc;
        }
        foreach($A as $cle => $tmp_to){
            if(substr_count($tmp_to, ',')){
                $tmp_to = explode(',', $tmp_to);
                foreach($tmp_to as $cle => $tmp_A){
                    if(!$this->Commande('RCPT TO:<'.$tmp_A.'>', array(250,251), 'Envoie du mail impossible car le serveur n&#39; accèpte pas la commande RCPT TO !!!')){
                        return false;
                    }
                }
            }else{
                if(!$this->Commande('RCPT TO:<'.$tmp_to.'>', array(250,251), 'Envoie du mail impossible car le serveur n&#39; accèpte pas la commande RCPT TO !!!')){
                    return false;
                }
            }
        }
        
        //**********************************************************************
        // On créer les entêtes ( headers ) si c' est pas fait
        if(empty($header)){
            if(!$header = $this->headers()){
                $this->erreur .= 'Impossible d&#39; envoyer le mail !!!<br />'."\r\n";
                return false;
            }
        }


        //**********************************************************************
        // On indique que l' on va envoyer des données
        if(!$this->Commande('DATA', 354, 'Envoie du mail impossible car le serveur n&#39; accèpte pas la commande DATA!!!')){
            return false;
        }


        //**********************************************************************
        // Envoie de l' entête et du message
        fputs($this->smtp_connection, $header);
        fputs($this->smtp_connection, "\r\n.\r\n");

        $reponce = $this->get_smtp_data();
        // Debug
        if($this->debug){
            echo '<div style="color:#993300;">Entête et message :<br />',"\r\n",'<div style="padding-left:25px;">',str_replace(array("\r\n","\n"), '<br />', $header),'<br />',"\r\n",$message,'</div>',"\r\n",'</div>',"\r\n",str_replace("\r\n", '<br />', $reponce['msg']);
        }
        if($reponce['code'] !== 250 && $reponce['code'] !== 354){
            $this->erreur = 'Envoie du mail impossible !!!<br />'."\r\n"
            .'Numéro de l&#39; erreur: '.$reponce['code'].'<br />'."\r\n"
            .'Message renvoyé: '.$reponce['msg'].'<br />'."\r\n";
            return false;
        }


        //**********************************************************************
        // Variables temporairement modifiées
        if($to === $this->To){
            $this->To = '';
        }
        if($subject === $this->Sujet){
            $this->Sujet = '';
        }

        //**********************************************************************
        // Déconnection automatique
        //**********************************************************************
        if($auto_disconnect){// Auto déconnection ?
            $this->Deconnection_SMTP();// Déconnection
        }

        //**********************************************************************
        // Mail envoyé
        //**********************************************************************
        return true;
    }


    //**************************************************************************
    // Lecture des données renvoyées par le serveur SMTP
    //**************************************************************************
    function get_smtp_data(){
        $data = '';
        while($donnees = fgets($this->smtp_connection, 515)){// On parcour les données renvoyées
            $data .= $donnees;

            if(substr($donnees,3,1) == ' ' && !empty($data)){break;}// On vérifi si on a toutes les données
        }
        // Renvoie des données : array(Code, message complet)
        return array('code'=>(int)substr($data, 0, 3), 'msg'=>$data);
    }


    //**************************************************************************
    // Execution des commandes SMTP
    //**************************************************************************
    function Commande($commande, $bad_error, $msg_error='', $debug=1){
        if(!empty($this->smtp_connection)){
            fputs($this->smtp_connection, $commande."\n");
            $reponce = $this->get_smtp_data();
            // Debug
            if($this->debug && $debug){
                echo '<div style="color:#993300;">',htmlentities($commande),'</div>',"\r\n",str_replace("\r\n", '<br />', $reponce['msg']);
            }

            // Tableau de code valide
            if((is_array($bad_error) && !in_array($reponce['code'], $bad_error)) || (!is_array($bad_error) && $reponce['code'] !== $bad_error)){
                if($msg_error){
                    $this->erreur = $msg_error.'<br />'."\r\n"
                    .'Numéro de l&#39; erreur: '.$reponce['code'].'<br />'."\r\n"
                    .'Message renvoyé: '.$reponce['msg'].'<br />'."\r\n";
                }
                if(!$debug){
                    return array('no_error'=>false, 'msg'=>$reponce['msg']);
                }else{
                    return false;
                }
            }

            if(!$debug){
                return array('no_error'=>true, 'msg'=>$reponce['msg']);
            }else{
                return true;
            }
        }else{
            $this->erreur = 'Impossible d&#39; éxecuter la commande <span style="font-weight:bolder;">'.$commande.'</span> car il n&#39; y a pas de connection !!!<br />'."\r\n";
            if(!$debug){
                return array('no_error'=>false, 'msg'=>'');
            }else{
                return false;
            }
        }
    }


    //**************************************************************************
    // Fonction de déconnection SMTP
    //**************************************************************************
    function Deconnection_SMTP(){
        if(!empty($this->smtp_connection)){
            if(!$this->Commande('QUIT', 221, 'Impossible de se déconnecter !!!')){
                return false;
            }

            @sleep(5);// On laisse 5 seconde au serveur pour terminer toutes les instructions
            if(!fclose($this->smtp_connection)){
                $this->erreur = 'Impossible de se déconnecter !!!<br />'."\r\n";
                return false;
            }
            $this->smtp_connection = 0;
            return true;            
        }
        $this->erreur = 'Impossible de se déconnecter car il n&#39; y a pas de connection !!!<br />'."\r\n";
        return false;
    }
}
?>

 Conclusion

Pour envoyer un mail :
<?php
include('./Class.SMTP.php');

// Remplissez le champs login et pass si vous avez besoin de vous identifier
// SMTP('smtp.serveur.fr', 'login', 'pass');

// SMTP sans authentification
// SMTP('smtp.serveur.fr');

$smtp = new SMTP('smtp.serveur.fr', 'login', 'pass');

$smtp->smtp_mail('to@you.com', 'sujet', 'message');// Envoie du mail

if(!$smtp->erreur){
    echo '<div style="text-align:center; color:#008000;">Votre mail a bien été envoyé.</div>',"\r\n";
}else{// Affichage des erreurs
    echo $smtp->erreur;
}
?>

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

04 mai 2006 23:02:16 :
Petit bug :-/
26 novembre 2006 21:43:15 :
Ajout de la fonction "pièce jointe" ;-)
27 novembre 2006 10:23:00 :
oublis ^^
02 décembre 2006 17:38:37 :
Correction d' un petit bug et ajout d' un exmple complet
04 décembre 2006 16:10:46 :
Petites erreurs corrigées ^^
23 février 2007 01:50:31 :
Suppression de quelque bug. Maintenant on peut envoyer des copies cachée (Bcc) et des copies simple (Cc) Meilleur gestion des erreurs
10 mars 2008 11:03:10 :
- Ajout de la fonction d' encodage - Traduction en anglais - Introduction du support tls (ssl)
04 octobre 2008 12:23:53 :
- Correction d' un bug qui fermait partiellement la connection, empêchant un autre envoie direct via la même connection. - Ajout d' un exemple pour envoyer à de multiple adresses -emails

 Sources du même auteur

Source avec Zip Source avec une capture STATS FAI
Source avec Zip Source avec une capture SAVOIR LE FOURNISSEUR D'ACCÈS INTERNET (FAI) DU VISITEUR
Source avec Zip Source avec une capture PHP ML : PHP MAILING LISTE V2.3.1
Source avec Zip Source avec une capture PRIVATE -> PROTECTION DE PAGES PERSONNELLES

 Sources de la même categorie

Source avec Zip AJOUT D'UN RENDEZ-VOUS DANS UN CALENDRIER EXCHANGE 2003 par SachaWolf
TRANSFORMER DU TEXTE OU DE L'HTML EN TEXTE CONFORME À LA NOR... par fyav
Source avec Zip FORMULAIRE EMAIL AVEC PIECE JOINTE REPRIS DE LITTLEBUBU par cfndiaye
Source avec Zip Source avec une capture MESSAGERIE INTERNE AVEC FICHIER TEXTE par polly19
Source avec Zip FORMULAIRE EVOIE ET PLUS par florentinul

 Sources en rapport avec celle ci

Source avec Zip [PHP5] - SIMPLE CLASSE D'ENVOI D'EMAIL par codefalse
Source avec Zip CLASS MAIL GESTION COMPLÈTE par cerede2000
Source avec Zip CLASS PERMETTANT DE LIRE SES MAILS MSN ET DE SE REDIRIGER DA... par codefalse
Source avec Zip CLASSE PHP PERMETTANT D'ENVOYER UN MAIL À PARTIR D'UN TEXTE ... par toutou78
CLASS MAILEUR par coucou747

Commentaires et avis

Commentaire de coucou747 le 03/05/2006 12:03:46

selon ce que j'ai vu, t'as fait du php4 de base, alors dans ce cas, une fonction suffisait...

sinon, j'ai lu vaguement ton code, et j'ai rien vu pour les pièces jointes...

Commentaire de ImmortalPC le 03/05/2006 15:24:45

Salut,
"selon ce que j'ai vu, t'as fait du php4 de base, alors dans ce cas, une fonction suffisait..."
>> j'ai fait le code d' une tel façon que l' on peut maintenir une connection active pour pouvoir envoyer plusieur mail.
Il est vrais que l'on aurait pu traduir cette class en plusieur fonctions, mais une class est plus partique.

"sinon, j'ai lu vaguement ton code, et j'ai rien vu pour les pièces jointes..."
>> je n' ai pas cherché à faire un prog pour les pièces jointes.
Une ligne dans l' entête peut arranger ça.

@+

Commentaire de ffert le 04/05/2006 03:01:15

Bonjour,

j'avais déjà trouvé une source pour envoyer des mails, mais elle contient un PB, qui fait que le mail part, mais le contenu est vide. Il y a juste le nom du destinataire et le sujet qui sont renseignés.

J'ai donc essayé ta source. et là, je ne suis pas arrivé à envoye un seul mail !!! mon code PHP est sur un serveur de OVH, y a t'il des restrictions. j'envois les mails (de contenu vide), dans le même script, j'ai mis les deux dans une page pour comparer. Mais apparement ça ne marche pas avec le tien. (j'ai tout essayé, authentifié, pas authentifié sur un serveur ns0.ovh.net, et même sur smtp.wanadoo.fr...) rien n'y fait..

please help me !!!

thank you.

(PS un lien interressant pour les commandes telnet d'envois de mail : http://www.kit-jussieu.org/support/node12.html )

merci.

Commentaire de coucou747 le 04/05/2006 09:03:21

je suis chez wanadoo, et chez moi, ça le smtp marche parfaitement (j'ai pas testé cette source...)
j'en avais posté une il y a quelques mois qui faisait la même chose, mais en plus, elle permettait l'envoi de pièces jointes

Commentaire de ImmortalPC le 04/05/2006 11:01:52

Salut,
Moi j' ai aucun problème avec wanadoo ou mon serveur smtp ou un autre serveur.
Quel erreur cela te renvoie t' il ?

@+

Commentaire de ffert le 05/05/2006 07:51:57

voilà : ce code sert à Envoyer un mail rappelant le mot de passe du compte de l'utilisateur

j'utilise ce code :

$smtp = new SMTP('ns0.ovh.net');
$smtp->From = 'postmaster@monsite.org';
$smtp->smtp_mail("$authmail", "$sujet", "$mdpmailcontent1 : $mdpass <br> $mdpmailcontent2 . \r\n.");

Le résultat renvoyé me dis :
"Envoie du mail impossible car le serveur n' accèpte pas la commande RCPT TO !!!
Numéro de l' erreur: 553
Message renvoyé: 553 sorry, that domain isn't allowed to be relayed thru this MTA (#5.7.1)"

Si je m'authentifie mon code est (j'ai trouvé sur un forum que le port utilisé par ns0.ovh.net était le port 5025, mais ça ne fonctionne pas mieux avec le port 25 je vous rassure) :
$smtp = new SMTP('ns0.ovh.net', 'postmaster@monsite.org', 'xxxxxx', 5025, 'monsite.org', 0);
$smtp->From = 'postmaster@monsite.org';
$smtp->FromName = 'no-reply';
$smtp->smtp_mail("$authmail", "$sujet", "$mdpmailcontent1 : $mdpass <br> $mdpmailcontent2 . \r\n.");

l'erreur est : "Authentification Failure" alors que mes identifiants et mot de passes sont correct.

Si j'écris un autre type de serveur ex : $smtp = new SMTP('smtp.ovh.net', 'postmaster@monsite.org', 'xxxxxx', 5025, 'monsite.org', 0);

L'erreur est : "Bad server"

Sinon Coucou747, peut tu me donner un lien ou je pourrais trouver ta classe ? pour la tester ?

merci pour votre aide. à bientôt.

Commentaire de coucou747 le 05/05/2006 12:00:43

ici, elle fait la même chose, mais permet l'envoi de fichiers aussi

http://www.phpcs.com/codes/CLASS-MAILEUR_32034.aspx

Commentaire de ImmortalPC le 05/05/2006 20:20:57

Salut,
ton serveur ne veux pas relayer les mails !!!
ça veux dire que tu peux écrire qu' a des personnes local :-(

Mais essaye avec la source de Coucou747 ;-)
Tiens moi au courant ;-)

@+

Commentaire de ffert le 06/05/2006 12:30:35

Bon, je pense que je vais plutôt essayer de trouver pourquoi la classe que j'utilisais précédement n'envois plus le contenu des messages, plutôt que d'essayer de nouveaux codes....

J'ai déjà envoyé plein de mails avec cette fonction, à mon avis les fait qu'il n'affiche aucun contenu, viens du contenu que je lui donne en paramètre, je pense. à voir...

Elle permet l'envois de pièces jointes, multi destinataire, avec gestion des To, BCC, CC, etc... un outil d'envois de mail complet.

Voici cette classe : (écrite à la base par un allemand)

<?
/**
* Fichier :       class_send_email.inc
* description :   class for sending HTML mails with attachments
* created :       21.02.2003
* last change :   19.12.2003
* author :        Günther Bauer <guenni1981@lycos.de>
*  * modifications décembre 2003: Alain BOURDEAU <alain.bourdeau@wanadoo.fr>
*  * Pour l'utilisation sur la plateforme de la coopérative http://www.ouvaton.org. Les \r ont été éliminés et la blise MIME---- a été mise en tète du Header
*  *  * traduction en français
*  * copyright:    Günther Bauer
*  *  *
*  *  *
*  *  * How to use :
*  include("class_send_email.inc");  // include du fichier contenant la classe send_mail
*  $mail = new sendmail();           // instanciation de la classe sendmail
*  $mail->SetCharSet("ISO-8859-1");  // identification de la page de caractères
*  $mail->from("Expeditor","Expeditor@wanadoo.fr"); // nom et adresse de l'expéditeur
*  $mail->to("recipient@wanadoo.com");   // adresses des destinataires
*  $mail->to("recipient@toto.org");        // adresses des destinataires
*  $mail->cc("recipient@toto.de"); // adresses des destinataires Cc - Copie
*  $mail->cc("recipient@toto.de"); // adresses des destinataires Cc - Copie
*  $mail->bcc("recipient@toto.de"); // adresses des destinataires Bcc - Copie cachée
*  $mail->bcc("recipient@toto.de"); // adresses des destinataires Bcc - Copie cachée
*  $mail->subject("Le sujet de l'email"); // l'objet du message
*  $mail->text("Le texte du message qui se trouve mis en texte et en html");  // texte ascii puis en html, les balises HTML sont automatiquement mises en place
*  $mail->attachment("message.html");  // plusieurs fichiers mis en pièces jointes
*  $mail->attachment("message.txt");   // plusieurs fichiers mis en pièces jointes
*  $mail->send();                      // expédie le mail
*
*/

class sendmail
{
// Variable deklarieren = declaration des variables
var $emailheader = "";
                var $createur = "";  // ajout du 5em argument de l'e-mail
var $textheader = "";
var $textboundary = "";
var $emailboundary = "";
var $charset = "";
var $betreff = "";
var $empfaenger = array();  // transformation en array
var $attachment = array();
var $cc = array();
var $bcc = array();

// Konstruktor = construction des parametres fonctionnels
function sendmail()
{
$this->textboundary = uniqid(time());
$this->emailboundary = uniqid(time());
$this->charset = "ISO-8859-1";
}

// Funktion zum setzen des CharSet´s = la fonction de traduction des caractères
function SetCharSet($char)
{
$this->charset = $char;
}

// Von wem die Email kommt in den Header setzen = initialisation de l'émeteur
function from($name,$email)
{
$this->emailheader .= "From: ".$name."<".$email.">\n";
                        $this->createur = "-F $email";
}

// Funktion um den Adressaten anzugeben = la prise en compte des destinataires individuels (tranformé en tableau-array)
function to($to)
{
$this->empfaenger[] = $to;
}

// Funktion zum senden einer Kopie an Cc Empfänger = la prise en compte des destinataires Cc
function cc($kopie_an_empfaenger)
{
$this->cc[] = $kopie_an_empfaenger;
}

// Funktion zum senden einer Kopie an Bcc Empfänger = la prise en compte des destinataires Bcc
function bcc($kopie_an_empfaenger)
{
$this->bcc[] = $kopie_an_empfaenger;
}

// Erstellt den Header der Mime-Mail = intégration des destinataires Cc et-ou Bcc dans le Header Mime-Mail
function makeMimeMail()
{
if(count($this->cc) > 0)
{
$this->emailheader .= "Cc: ";
for($i=0;$i<count($this->cc);$i++)
{
if($i > 0) $this->emailheader .= ",";
$this->emailheader .= $this->cc[$i];
}
$this->emailheader .= "\n";
}

if(count($this->bcc) > 0)
{
$this->emailheader .= "Bcc: ";
for($j=0;$j<count($this->bcc);$j++)
{
if($j > 0) $this->emailheader .= ",";
$this->emailheader .= $this->bcc[$j];
}
$this->emailheader .= "\n";
}
                        // la balise MIME-Version: 1.0\nContent-Type: multipart/mixed; boundary a été mise dans le emailheader
$this->emailheader .= "MIME-Version: 1.0\n";
// $this->emailheader .= "MIME-Version: 1.0\nContent-Type: multipart/mixed;\n\tboundary=\"".$this->emailboundary."\"\r\n";
}

// Funktion für den Betreff anzugeben = prise en compte de l'objet du message
function subject($subject)
{
$this->betreff = $subject;
}

// Textdaten in Email Header packen = intégration du texte du message dans le Header et crétion du double en html
function text($text, $tout)
{
$this->textheader .= "Content-Type: multipart/alternative; \n\tboundary=\"".$this->textboundary."\"\n";
$this->textheader .= "--".$this->textboundary."\n";
$this->textheader .= "Content-Type: text/plain; charset=\"".$this->charset."\"\n";
$this->textheader .= "Content-Transfer-Enconding: quoted-printable\n \n";
                        $text2 = str_replace('<BR>','\n', $text);  // \\n
                        $text2 = str_replace('<Br>','\n', $text);  // \\n
                        $text2 = str_replace('<br>','\n', $text);  // \\n
$this->textheader .= strip_tags($text2)."\n";  // strip_tags()$text)."\n \n";
$this->textheader .= "--".$this->textboundary."\n";
$this->textheader .= "Content-Type: text/html; \n       charset=\"".$this->charset."\"\n";
$this->textheader .= "Content-Transfer-Enconding: 8bit\n \n";
if($tout<>0){
   $this->textheader .= "<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 3.2//EN'><html><head><meta HTTP-EQUIV='CONTENT-TYPE' CONTENT='text/html; charset=iso-8859-1'><title>mail</title></head><body>\n \n ".$text."\n</body></html>\n";  //"<html><body>".$text."</body></html>\n"; // ajout \r\n.  au lieu de \n
   }else{
   $this->textheader .= $text;  //"<html><body>".$text."</body></html>\n.";  // ajout \r\n.  au lieu de \n
}

$this->textheader .= "--".$this->textboundary."--\n";
//echo $this->textheader;   // désactiver l'affichage : envois en mode silencieux
}


// Funktion zum anhängen für Attachments in der Email = prise en compte des fichiers attachés-joints au message
function attachment($datei)
{
// Überprüfen ob File Existiert = vérification de l'existence du fichier
if(is_file($datei))
{
// Header für Attachment erzeugen = création de l'entète de l'attachement
$attachment_header = "--".$this->emailboundary."\n" ;
$attachment_header .= "Content-Type: application/octet-stream;\n name=\"".$this->GetFileName($datei)."\"\n";
$attachment_header .= "Content-Transfer-Encoding: base64\n";
$attachment_header .= "Content-Disposition: attachment;\n filename=\"".$this->GetFileName($datei)."\"\n\n";

// Daten der Datei einlesen, in das BASE64 Format formatieren und auf max 72 Zeichen pro Zeile = transcodage BASE64 et formatage 72 caractères par ligne
// aufteilen
$file['inhalt'] = fread(fopen($datei,"rb"),filesize($datei));
$file['inhalt'] = base64_encode($file['inhalt']);
$file['inhalt'] = chunk_split($file['inhalt'],72);

// Attachment mit Header in der Klassenvariable speichern = intégration de la mise en forme dans la variable idoine
$this->attachment[] = $attachment_header.$file['inhalt']."\n";
}
else
{
// echo "Ce document $datei n'existe pas\n";   // désactiver l'affichage : envois en mode silencieux
}
}

// Funktion die den Dateinamen aus einer Angabe mit Pfad herausfiltert = traitement de l'adresse absolue du fichier
function GetFileName($PathWithFile)
{
if(preg_match("/\//i",$PathWithFile))
{
return substr(strrchr($PathWithFile,"/"),1);
}
else
{
return $PathWithFile;
}
}

// Funktion zum erstellen des Kompletten Headers der Email = mise en forme du Header des E-mail
// Senden der Email = expédition des e-mail
function send()
{
$this->makeMimeMail();
$header = $this->emailheader;
// Überprüfen ob Attachments angehängt wurden = ajout des différents attachements pris en compte
if(count($this->attachment)>0)
{
// $header .= "Content-Type: multipart/mixed;\n\tboundary=\"".$this->emailboundary."\"\n";
$header .= "--".$this->emailboundary."\n";
$header .= $this->textheader;

if(count($this->attachment) > 0) $header .= implode("",$this->attachment);

$header .= "--$this->emailboundary--";
}
else
{
$header .= $this->textheader;
}
// Versenden der Mail = mise en expédition individuelles des mails
      if(count($this->empfaenger) >0)
      {
        foreach($this->empfaenger as $pour)
        {
          mail("$pour",$this->betreff,"",$header,"$this->createur");
//          echo "Mail : ".$pour."<br>";    // désactiver l'affichage : envois en mode silencieux
    // Versenden gemacht fur ".$pour.
        }
      }else{
        mail("$this->empfaenger",$this->betreff,"",$header,"$this->createur");
//        echo "Mail : ".$this->empfaenger."<br>";  // désactiver l'affichage : envois en mode silencieux
// Versenden gemacht fur ".$pour."
      }

$this->deletememory();
}

// Diese Funktion ist nur zum testen = C'est une fonction en test
function deletememory()
{
unset($this->emailheader);
unset($this->textheader);
unset($this->attachment);
}
}
?>

Commentaire de lamane le 21/08/2006 22:47:43

salut les mecs , ben je suis débutaent , frenchement je ne sais pas ou j epeut commancé, voilaj'ai une base de données mysql qui à une table
Message(id(auto inc ), message(text),consulter(boulean false par default));

dit moi de quoi j'oré besoidn comme classe et fonction svp j'ai besoind d'aid

svp

Commentaire de lamane le 21/08/2006 22:48:39

mon mail est    othbel1@hotmail.com

Commentaire de ImmortalPC le 23/08/2006 16:05:12

Salut,
c' est quoi exactement le problème ??
C' est pour faire quoi la table sql ??

++

Commentaire de codomolo le 21/11/2006 02:41:09

c'est quoi la ligne à ajouté en entête pour envoyer une pièce jointe zippé ???

merci !

Commentaire de ImmortalPC le 21/11/2006 10:36:52

Salut,

Comme ça il me semble :

<?php

$boundary = md5(uniqid(time()));;
$file = 'monfichier';
$sujet = 'Mon sujet';
$message = 'salut';
$nom_envoyeur = 'toto';
$evoyeur = 'moi@toto.com';

include('./Class.SMTP.php');

// Remplissez le champs login et pass si vous avez besoin de vous identifier
// SMTP('smtp.serveur.fr', 'login', 'pass');

// SMTP sans authentification
// SMTP('smtp.serveur.fr');
$head = 'From: "'.$nom_envoyeur.'"<'.$evoyeur.'>'."\n"
.'X-Mailer: PHP '.phpversion()."\n"
.'Date: '.date('l j F Y, G:i')."\n"
'Subject: '.$sujet."\n"
.'Content-Type: multipart/mixed;'."\n"
.'boundary="'.$boundary.'"'."\n\n"
.'This is a multi-part message in MIME format.'."\n"
.'--'.$boundary."\n"
.'Content-Type: text/plain; charset=ISO-8859-1; format=flowed'."\n"
.'Content-Transfer-Encoding: 7bit'."\n"
.$message."\n\n"
.'--'.$boundary."\n"
'Content-Type: application/'.filetype($file).';'."\n"
' name="'.$file.'"'."\n"
'Content-Transfer-Encoding: base64'."\n"
'Content-Disposition: attachement;'."\n"
' filename="'.$file.'"'."\n\n"
.base64_encode(file_get_contents($file)).'--'.$boundary;

$smtp = new SMTP('smtp.serveur.fr', 'login', 'pass');

$smtp->smtp_mail('to@you.com', 'sujet', '', $head);// Envoie du mail

if(!$smtp->erreur){
echo '<div style="text-align:center; color:#008000;">Votre mail a bien été envoyé.</div>',"\r\n";
}else{// Affichage des erreurs
echo $smtp->erreur;
}
?>

@+

Commentaire de codomolo le 21/11/2006 15:33:08

désolé ca ne fonctionne pas ca met erreur dans filetype(), il arrive pas à ouvrir le file_get_contents

ca semble compliqué à intégrer...

Commentaire de ImmortalPC le 24/11/2006 20:08:01

Salut,
zarb moi ça marche :S


"ca semble compliqué à intégrer..."
>> Un peu ^^

Et là ?
$head = 'From: "'.$nom_envoyeur.'"<'.$evoyeur.'>'."\n"
.'X-Mailer: PHP '.phpversion()."\n"
.'Date: '.date('l j F Y, G:i')."\n"
.'Subject: '.$sujet."\n"
.'Content-Type: multipart/mixed;'."\n"
.'boundary="'.$boundary.'"'."\n\n"
.'This is a multi-part message in MIME format.'."\n"
.'--'.$boundary."\n"
.'Content-Type: text/plain; charset=ISO-8859-1; format=flowed'."\n"
.'Content-Transfer-Encoding: 7bit'."\n"
.$message."\n\n"
.'--'.$boundary."\n"
.'Content-Type: application/'.filetype($file).';'."\n"
.' name="'.$file.'"'."\n"
.'Content-Transfer-Encoding: base64'."\n"
.'Content-Disposition: attachement;'."\n"
.' filename="'.$file.'"'."\n\n"
.base64_encode(file_get_contents($file)).'--'.$boundary;

++

Commentaire de codomolo le 25/11/2006 05:50:10

voici les erreurs que ca me donne:

Warning: filetype(): Lstat failed for (null) (errno=2 - No such file or directory) in /home/monsite/domains/monsite.com/private_html/SMTP/Attach/formmail.SMTP.php on line 42

Warning: file_get_contents(C:\\Documents and Settings\\Administrateur\\Mes documents\\testfile.txt): failed to open stream: No such file or directory in /home/monsite/domains/monsite.com/private_html/SMTP/Attach/formmail.SMTP.php on line 47

P.S
file a été remplacé par fichier (ca change tu qq chose ???)

Ligne 42: .'Content-Type: application/'.filetype($fichier).';'."\n"

Ligne 47: .base64_encode(file_get_contents($fichier)).'--'.$boundary;

à noter que le nom de fichier apparaît avec 2 \\ dans le chemin du fichier au lieu de 1 seul comme il devrait (je pense que ca peut faire planter le script)

Va-t-on s'en sortir pensez-vous ???

++

Commentaire de ImmortalPC le 26/11/2006 21:45:14

Salut,

Pour faire plus simple j' ai réécrit les entêtes et ajouté une fonction.

Donc ça devrai être bon ;-)

@+

Commentaire de codomolo le 27/11/2006 01:05:26

J'ai fais du copier/coller pour la class et j'ai ceci comme erreurs :

Warning: fputs(): 3 is not a valid stream resource in /home/zone/domains/zone-international.com/private_html/ticket/reply/SMTP/Attach/Class.SMTP.php on line 509

Warning: fgets(): 3 is not a valid stream resource in /home/monsite/domains/monsite.com/private_html/SMTP/Attach/Class.SMTP.php on line 494

Warning: fputs(): 3 is not a valid stream resource in /home/monsite/domains/monsite.com/private_html/SMTP/Attach/Class.SMTP.php on line 509

Warning: fgets(): 3 is not a valid stream resource in /home/monsite/domains/monsite.com/private_html/SMTP/Attach/Class.SMTP.php on line 494

Commentaire de coucou747 le 27/11/2006 09:31:32

... ton fichier n'exiiste pas...

Commentaire de ImmortalPC le 27/11/2006 10:23:51

Salut,

t' es sur que tu entres les bons paramètres ??

Essaie ça : ( n' oublis pas de remplir les champs ;-)

PS : c' est le dernier paramètre (1) qui est important ->
$smtp = new SMTP('smtp.serveur.fr', 'login', 'pass', 25, 'immortal-pc', 1);

Le code :
<?php
include('./Class.SMTP.php');

// Remplissez le champs login et pass si vous avez besoin de vous identifié
// SMTP('smtp.serveur.fr', 'login', 'pass');

// SMTP sans authentification
// $smtp = new SMTP('smtp.serveur.fr');



$smtp = new SMTP('smtp.serveur.fr', 'login', 'pass', 25, 'immortal-pc', 1);

$smtp->set_from('Immortal-PC', 'me@serveur.com');

// Ajout des fichiers
$smtp->add_file('./Fichier_test.gif');
$smtp->add_file('./Fichier_test.txt');

$smtp->smtp_mail('to@you.com', 'sujet', 'message');// Envoie du mail
// Pour avoir un mail en html et en texte simple :
//$smtp->ContentType = 'txt/html';
//$smtp->smtp_mail('www.immortalpc@free.fr', 'Sujet', array($msg_html, $msg_txt));// Envoie du mail

if(!$smtp->erreur){
    echo '<div style="text-align:center; color:#008000;">Votre mail a bien été envoyé.</div>',"\r\n";
}else{// Affichage des erreurs
    echo $smtp->erreur;
}
?>


@+

Commentaire de codomolo le 28/11/2006 02:21:00

voilà mainternant qu'il dit que le mail a été envoyé, mais il n'arrive rien à la destination et l'adresse est bien valide ?????????

la guigne se poursuit !

oui coucou le fichier et tout existe, c'est juste le chemin qui a été volontairement inventé pour pas ouvrir une porte de pandore aux abus...

Commentaire de ImmortalPC le 28/11/2006 10:22:29

Salut,

On a la poisse a donf !!
Tu renseigne bien les paramètres minimum ?

$smtp = new SMTP('smtp.serveur.fr', 'login', 'pass', 25, 'nom de domaine', 1);

$smtp->add_file('./Fichier_test.txt');

$smtp->smtp_mail('to@you.com', 'sujet', 'message');// Envoie du mail


Ton serveur à besoin d' une autotentification ? Son port est bien 25 ?
L' adresse de destination (to@you.com ici) est bonne ??

Car là j' ai plus d'idée :S

@+

Commentaire de codomolo le 01/12/2006 18:35:17

salut,

poisse on dirait bien...
le script antérieur avant lka pièce joint lui fontionne sans pb...
celui avaec pièce jointe est une vrai galère et je songe à laisser tomber...

donc qq questions :

1. $smtp->add_file($url_file); // ca fonctionne ??? c'est la seule façon de récupérer ce que j'ai parcouru avec mon formulaire...

2. le formulaire, justement, a-til besoin de qq chose d eparticulier dans on action ou post ou je ne sais pas pour que ca fonctionne ??? // j'ai juste mis un hidden pour url_file et renseigné le email envoyeur, le email destinataire et le sujet $Subject et le message $msg)

à partir de là, je ne sais plus ce qui peut clocher... la pi`ce jointe n'est pas essentiel, c'était juste un +

ce que je trouve curieux c'est que j'ai testé un autre script (encore + compliqué qui avait un test inclus et il envoyait correctement le contenu et la pièce jointe)

Si j'ose une dernière suggestion c'est de me zipper un exemple concret et fonctionnel et à partir de là je verrai à l'adapter à mon serveur (donc le formulaire qui post et le traitement d'envoi)...

après ça je ferme le livre  :-(

@+

Commentaire de ImmortalPC le 02/12/2006 17:42:20

Salut,

"$smtp->add_file($url_file); // ca fonctionne ??? c'est la seule façon de récupérer ce que j'ai parcouru avec mon formulaire..."
>> Uniquement si tu as déjà uploadé ton fichier

"le formulaire, justement, a-til besoin de qq chose d eparticulier dans on action ou post ou je ne sais pas pour que ca fonctionne ??? // j'ai juste mis un hidden pour url_file et renseigné le email envoyeur, le email destinataire et le sujet $Subject et le message $msg)"
>> Aucune importance pour ma classe du momment que tu lui donnes les bon paramètres

Pour l'exemple J' ai mit à jour le zip ;-)

@+

Commentaire de codomolo le 03/12/2006 16:03:17

ok je vais tester le zip...
si ca marche je reviens dire merci, sinon je ferme le livre pour de bon...

@+

Commentaire de codomolo le 04/12/2006 01:15:06

je ne sais pas si vous allez me croire, mais finalement j'ai un succès !  :-D

je ne sais pas pouquoi, mais ca marche à l'envers deu script sans pièce jointe et c'est là le pourquoi que ca ne fonctionnait pas...

l'exemple était requis sinon ca aurait jamais fonctionné...

mon formulaire, ses champs sont pour la destination et non pas pour l'envoyeur... en modifiant le traitement smtp->from() et smtp->mail(), ca finit par fonctionner... j'ai aussi enlever le "nom" des champs du formulaire, mais ca se peut que je le remette pour personnaliser le nom du client... il est rare que j'utilise le format brut, j'ai donc mis html comme défaut...

je souhaiterais aussi ajouter des balises dans le header (puis-je le faire en ajoutant la personnalisation des headers dans la page du traitement ???)

admettons que j'offre à mes clients la possibilité d'envoyer une pièce jointe, est-il possible d'envoyer le formulaire SI il ne m'envoit pas de pièce jointe ET sans utiliser un autre formulaire ???

merci bcp pour le coup de main pour mon moi néophyte en la matière...  :-S

Bon, bien je vais faire une série de tests pour adapté ce succès dans ma page réelle...

++

Commentaire de codomolo le 04/12/2006 02:14:02

une dernière chose que je viens de remarquer...

>>> admettons que j'écrive au préalable mon message avec outlook express et que je copie la source pour la coller dans mon message que je veux envoyer avec ma pièce jointe... eh bien mon message html sort tout croche à la réception dont voici un exemple: des balises du genre <tr> deviennent <tr > (pas tous) et la même chose pour d'autres balises <font> -> <font > c'est toujours la même chose il met des espaces et rend la balise inopérante ce qui déforme complètement le message... commet régler ce bug qui n'existe pas dans la version sans pièce jointe ???

Je vous invite à faire un test et vous me direz si ca fait la même chose que moi... j'ai preis outlook express, mais n'importe lequel éditeur html fera la même chose...

++

Commentaire de ImmortalPC le 04/12/2006 16:14:36

Salut,

"Je souhaiterais aussi ajouter des balises dans le header (puis-je le faire en ajoutant la personnalisation des headers dans la page du traitement ???)"
>> Dans le "header" !? Le <head> .... </head> ?? Ou dans l' entête du mail ??
- Pour le <head> .... </head> il faudra modifier le fichier Class_SMTP.php le <head> est ligne 328 et le </head> ligne 331.
- Pour l' entête du mail j' ai ajouté toute les fonctions possible donc il suffit de modifier une variable et non plus passer par l' ajout du 4ème champs dans la fonction mail_smtp()
ex pour ajouter un mail en Bcc :
$smtp->Bcc = 'adressemail@serveur.com';


"Admettons que j'offre à mes clients la possibilité d'envoyer une pièce jointe, est-il possible d'envoyer le formulaire SI il ne m'envoit pas de pièce jointe ET sans utiliser un autre formulaire ???"
>> Absolument ;-)
Ce cas de figure est dans l' exemple ;-)


"admettons que j'écrive au préalable mon message avec outlook express et que je copie la source pour la coller dans mon message que je veux envoyer avec ma pièce jointe... eh bien mon message html sort tout croche à la réception dont voici un exemple: des balises du genre <tr> deviennent <tr > (pas tous) et la même chose pour d'autres balises <font> -> <font > c'est toujours la même chose il met des espaces et rend la balise inopérante ce qui déforme complètement le message... commet régler ce bug qui n'existe pas dans la version sans pièce jointe ???"
>> Oups :S petite erreur de ma part. Voilà c' est réglé avec cette nouvelle version ;-)
Mille excuses.

@+

Commentaire de codomolo le 04/12/2006 20:13:31

ok le chamgement c dans la classe ou ailleurs ???
je suppose que c'est la classe...

merci mon pot tu es très très patient  :-D

++

Commentaire de ImmortalPC le 04/12/2006 21:44:21

Re,

J' ai modifié la class (Class_SMTP.php) et l' exemple (Exemple_avec_pièce_jointe.php)

"merci mon pot tu es très très patient  :-D"
>> De rien ;-)
Je suis là pour ça ;-)

@+

Commentaire de codomolo le 05/12/2006 01:59:43

excellent le message html a bien été envoyé sans cassure, sizure ou autre affaire...

la pièce joint était affiché. en bas du message et présente en attachement avec le nom du fichier comme il se doit...

chapeau, c'est une excellente source et je met maintenant ta note de 10 bien mérité...

Bonne continuation !

Commentaire de codomolo le 05/12/2006 02:01:55

Ah zut avant de lancer les fleurs, je devrais tester si je peux envoyer sans pièce jointe...

le suspens continue...

Commentaire de codomolo le 05/12/2006 02:04:03

ah ben voilà il y aun petit bug sans le fichier joint...
ca me dit "champs manquant" mais le message est envoyé quand même...
je fais quoi, j'efface la ligne de la classe qui écrit ce message ???

Commentaire de codomolo le 05/12/2006 02:15:51

J'ai ajouté un if($_POST['file_up']) dans le traitement et la classe et là ca semble correcte...

Commentaire de codomolo le 05/12/2006 02:30:34

csa marchait pas mon affaire alors j'ai mis
if($url_file) //pour la classe
et
if($file_up) //pour le traitement et supprimé le fichier temporaire

et on dirait bioen que c'est 100% fonctionnel :D))

bon bien la voici la note de 10 maintenant lool !

Commentaire de ImmortalPC le 05/12/2006 10:16:41

Salut,
Merci beaucoup ;-)

Pour le petit bug il était corrigé dans la dernière version ;-)

@+ et encors merci :D

Commentaire de ImmortalPC le 23/02/2007 01:53:06

Salut,

petite mise à jour :
Suppression de quelques bugs.
Maintenant on peut envoyer des copies cachée (Bcc) et des copies simple (Cc).
Et une meilleur gestion des erreurs.

@+

Commentaire de kamal101 le 21/03/2007 14:55:06

Est-ce qu'il y a qqn qui a une idée d'une libraire pour envoyer des courriels en relay
qui n'utilise pas la fonction fsockopen, car on peut l'utiliser sur certains serveurs pour des raisons de securité.

Commentaire de ImmortalPC le 22/03/2007 14:08:16

Salut,

Je n' ai jamais entendu dire que l' on pouvait faire sans la fonction fsockopen.
Je vois pas comment faire sans :S

@+

Commentaire de kamal101 le 22/03/2007 18:07:50

Mais pourtant en asp.net c,est tres simple. Il faut juste créer un objet, lui dire quel serveur smtp appeler, le login et mot de passe.

Commentaire de ImmortalPC le 22/03/2007 18:59:10

Salut,

En PHP il n' y a pas de support natif pour le SMTP.
C' est pour quoi les fonctions fsockopen et mail existent

@+

Commentaire de coucou747 le 22/03/2007 22:38:32

par "support natif pour le SMTP" t'entends quoi ??

parceque pour moi, mail c'est ca...

Commentaire de kamal101 le 22/03/2007 23:09:43

Je pense qu'il veut juste dire que le framework .net est natif.
En fait je fait appel a la classe MailMessage.
C'est du code natif, précompilé de .Net
qu'on appele directement.

const string SERVER = "MON SERVEUR RELAIS";
            MailMessage oMail = new System.Web.Mail.MailMessage();
            oMail.From = "email";
            oMail.To = "email";
            oMail.Subject = "Nouveau message -- page Contact";
            oMail.BodyFormat = MailFormat.Html; // enumeration
            oMail.Priority = MailPriority.High; // enumeration
            oMail.Body = "Sent at: " + DateTime.Now;
            SmtpMail.SmtpServer = SERVER;
            SmtpMail.Send(oMail);

En php, il n'y a pas de framework précompilé, on utilise que des include ou des require_once.

Je crois que c'est cela qu'il voulait dire.
Veuillez me rectifier.

Commentaire de ImmortalPC le 24/03/2007 17:22:28

Salut,

>>Coucou747
La fonction mail n' est pas vraiment un support natif pour les connections avec les serveurs SMTP.
Un support natif permettrait d' utiliser les fonctions usuelles SMTP sans a avoir à passer par une autre fonction.
Avec un support natif on pourrait choisir le serveur SMTP, etc...

@+

Commentaire de sayruscs le 19/04/2007 13:25:45

Bonjour,

Ce script marche très bien en local avec le smtp de mon FAI.

Par contre, lorsque j'upload ce script sur mon hébergement OVH, pas moyen d'utiliser le SMTP de mon serveur OVH.

Voici l'erreur qui m'est retournée...

Quel est le problème? Merci

Connection
220 nsxxxxx.ovh.net ESMTP
EHLO mwp-downloads.be
250-nsxxxxx.ovh.net
250-PIPELINING
250-STARTTLS
250-8BITMIME
250 SIZE 0
MAIL FROM:<toto@monsite.be>
250 ok
RCPT TO:<toto2@autresite.be>
250 ok
RCPT TO:<toto@monsite.be>
250 ok
DATA
354 go ahead
Entête et message :
X-Sender: toto@monsite.be
MIME-Version: 1.0
Message-ID: <98985fab3d1719a908feec7f9797f1b9@mwp-downloads.be>
Date: Thu, 19 Apr 2007 13:24:57 +0200
Content-Type: Multipart/Mixed;
boundary="------------Boundary-00=_deb5abf0000000000000"
X-Mailer: PHP 5.1.4
From: "toto@monsite.be"
X-FID: FLAVOR00-NONE-0000-0000-000000000000
X-Priority: 1
To: toto2@autresite.be
Subject: MESSAGE AUTOMATIQUE: dqzdqzd



--------------Boundary-00=_deb5abf0000000000000
Content-Type: Multipart/Alternative;
boundary="------------Boundary-00=_30efe060000000000000"


--------------Boundary-00=_30efe060000000000000
Content-Type: text/html;
charset="iso-8859-1"
Content-Transfer-Encoding: 8bit

dzq

Voici le lien du fichier

--------------Boundary-00=_deb5abf0000000000000--
dzq

Voici le lien du fichier
Envoie du mail impossible !!!
Numéro de l' erreur: 0
Message renvoyé:

Commentaire de ImmortalPC le 20/04/2007 12:46:08

Salut,

Es que tu reçois le mail ?
Je vais me renseigner sur le protocole ESMTP utilisé par ovh.

@+

Commentaire de sayruscs le 20/04/2007 13:05:15

Salut,

Non je ne reçois malheureusement pas le mail.

Je précise que j'ai un serveur dédié OVH donc normalement le SMTP de mon serveur devrait fonctionner :/ (Gentoo release2)



Commentaire de sayruscs le 23/04/2007 16:34:58

Toujours pas trouvé d'où pouvait venir l'erreur?

Car ca m'intéresse vraiment cette classe...

Commentaire de ImmortalPC le 24/04/2007 17:08:09

Salut,

Apparemment ça vient de ton serveur :
http://forum.kimsufi.com/showthread.php?t=234

Ton serveur n' pas de vrais serveur SMTP il n' a que sendmail

2 solutions :
- Utiliser un autre script
- Utiliser un autre serveur SMTP

@+

Commentaire de XelectroX le 26/02/2008 22:14:07

Super et fonctionnel !!

Commentaire de XelectroX le 26/02/2008 23:03:06 9/10

Quelqu'un saurait-il comment faire pour un serveur smtp avec sécurité TLS ??

Commentaire de ImmortalPC le 10/03/2008 11:21:53

Salut !

"Super et fonctionnel !!"
>> Merci :p

"Quelqu'un saurait-il comment faire pour un serveur smtp avec sécurité TLS ??"
>> Je travail dessus :-)

@+

Commentaire de XelectroX le 10/03/2008 21:17:22

Ok merci à toi et pour info, gmail n'utilise pas le système avec STARTTLS ;)
Si ca peut permettre de compléter ta source ...

Commentaire de 0azzeddine le 04/09/2008 17:34:07

thanks guy but i dont enderstood enything

Commentaire de 0azzeddine le 04/09/2008 17:36:54

je né pas comprite se .......................
svp envoier moi se exemple au mon email

black.beard38@gmail.com
svp l'exemple de envoier email php

et merci a tout
a bientot
....................................................

Commentaire de freemaul le 21/12/2008 19:47:46 10/10

Fonctionne trés bien, merci pour cette source qui va m'être trés utile

Commentaire de tsimba le 14/01/2009 12:51:45

Bonjour, j'ai essayé cette classe et j'ai obtenu le message d'erreur :
Le serveur refuse l' authentification (EHLO et HELO) !!!
Numéro de l' erreur: 0
Message renvoyé:
Impossible d' envoyer le mail !!!

Comment remedier à ça?

Commentaire de julkien60 le 16/01/2009 15:23:28

Salut,

Il y'a effectivement un souci chez OVH avec cette class.

Pour y remédier a priori, il faudrait une authentification sur le pop3 avant (dixit ovh)

mail ovh :


============================================================================
EMAIL

Pour récupérer vos e-mails via un client messagerie (outlook, the bat, etc.),
utilisez les informations suivantes :

  Serveur pop:  pop3.xxx.com ou mail.xxxx.com ou ns0.ovh.net
  Serveur smtp: smtp.xxxx.com ou ns0.ovh.net
  (pour envoyer un email il faut d'abord vous identifier via le pop3)

=========================================================================

Serait-il possible d'inclure cette possibilité ?

Je te remercie par avance.


Commentaire de ImmortalPC le 16/01/2009 18:40:17

Salut,

Il faut s' identifier sur le pop avant d' utiliser le smtp !? ( c' est des fous de la sécurité chez ovh ^^ )
http://guides.ovh.com/EmailSmtpPop3Imap

Je vais voir ce que je peux faire ;-)

@+

Commentaire de tsimba le 17/01/2009 08:54:39

Je vais essayer de s'identifier avec POP d'abord avant SMTP. C'est à partir d'une compte yahoo que j'essaie d'envoyer un mail.
Merci de votre réponse.

Commentaire de julkien60 le 17/01/2009 12:06:02

Merci bien,

D'autre part pour ce qui utilise OVH sachez qu'il n'est pas possible de rejoindre un autre SMTP (d'un autre hébergeur) donc la seule solution c'est l'identification par le pop3...

Merci de te donner la peine pour nous, pauvre petits utilisateurs d'OVH,

à bientôt.

Commentaire de tsimba le 19/01/2009 09:41:54

Je n'ai pu trouver par où s'authentifier via POP sur ces codes?

Commentaire de ImmortalPC le 19/01/2009 12:08:49

Salut,

normal étant donné que cette fonction n' existe pas sur ces fichiers ^^
Je code actuellement cette fonction.
Je metterai mon code ici soit cette après midi soit demain après midi.

@+

Commentaire de tsimba le 20/01/2009 06:16:55

Merci

Commentaire de ImmortalPC le 21/01/2009 14:44:59

Salut,

Voilà j' ai ajouté l' option "connection et déconnection à un serveur POP3 avant l' envoie du / des mails".
( j' ai grave galéré => j' ai mit 1H pour trouver qu'un serveur pop n' accèpte une requete que si on lui envoie \r\n ( en temps normal c' est juste \n ))
Pour info, j' ai mit a dispo 2 types de connections à un serveur POP3 :
- Une connection qui utilise les fonctions imap
- Une connection qui utilise fsockopen ( je trouve que c' est plus lent... )

Je ne sais pas si ça permettera de faire marcher le serveur smtp de OVH donc je ne met pas à jour ma source. Voilà le lien qui contient les modifs avec un exemple :
http://immortal-pc.info/CodeS-SourceS/Class.SMTP.rar

Donc a tester sur OVH ^^
Tenez moi au courant ;-)

@+
Immortal-PC

Commentaire de julkien60 le 22/01/2009 03:57:19

Vraiment réactif ça fait plaisir !

Je rentre du taf là.. je vais me coucher et promis demain tu auras un compte rendu d'un OVHien :D

Merci beaucoup ;)

Commentaire de tsimba le 22/01/2009 07:40:57

Je n'arrive pas à me connecter, j'obtiens le message d'erreur:
Login ( Nom d' utilisateur ) incorrect !!!
j'ai vérifié mon login et mot de passe mais non.

Commentaire de ImmortalPC le 22/01/2009 12:19:04

Salut !

"Vraiment réactif ça fait plaisir !
Je rentre du taf là.. je vais me coucher et promis demain tu auras un compte rendu d'un OVHien :D
Merci beaucoup ;)"
>> De rien ;)

"Je n'arrive pas à me connecter, j'obtiens le message d'erreur:
Login ( Nom d' utilisateur ) incorrect !!!
j'ai vérifié mon login et mot de passe mais non."
>> Et en débug ? Là le problème c'est => mais quel est le login qui n'a pas été accèpté ?
J' ai fait une petite mise à jour -> Les erreurs sont plus précises.
http://immortal-pc.info/CodeS-SourceS/Class.SMTP.rar

Il faudrait que vous passiez en mode debug :
//$smtp = new SMTP('smtp.serveur.fr', '', '', 25, 'nom de domaine', 'Debug; 0 désactivé, 1 activé');
$smtp = new SMTP('smtp.serveur.fr', 'login', 'mot de passe', 25, 'immortalpc.info', 1);

( le 1 à la fin )

@+
Immortal-PC

Commentaire de julkien60 le 22/01/2009 12:51:30

Salut,

je t'est envoyé deux MPs avec un test en local, et un test sur mon hébergement OVH (avec la même configuration), je suis passer par les mps car je pouvais plus commenter ...

Pour les deux, c'est erreur ...

Commentaire de ImmortalPC le 22/01/2009 14:04:24

Salut !

Grâce à julkien60 je pense avoir trouver le problème.

Il faut que mettre le Login et le Passe que pour le serveur POP3
Pour résumer :
$smtp = new SMTP('smtp.serveur.fr', '', '', 25, 'immortalpc.info', 0);
$smtp->set_pop3('pop.serveur.fr', 'login', 'mot de passe', 110, 30);

Tenez moi au courant ;-)
@+
Immortal-PC

PS: Perso je me connecte plus vite sur le serveur ns0.ovh.net ( 0=zéro ) port 587.
$smtp = new SMTP('smtp.serveur.fr', '', '', 587, 'immortalpc.info', 0);

Commentaire de ImmortalPC le 23/01/2009 18:49:34

Salut !

Il me semblait qu' il y avait un message qui rapportait un problème :: http://cr.yp.to/docs/smtplf.html
Donc pour info, j' ai modif la class SMTP là ::
http://immortal-pc.info/CodeS-SourceS/Class.SMTP.rar
Enfaite, certain serveurs veulent un \n et d' autres \r\n ( fin de commande )
Pour config ça :
$smtp->set_PO3_cmd_EndLine( $endl )
$smtp->set_SMTP_cmd_EndLine( $endl )

Valeurs autorisées pour $endl :
cr || \r || lf || \n || crlf || \r\n

@+
Immortal-PC

Commentaire de BencoAndCo le 06/08/2009 00:20:30

Super ton script m'a aidé !


Seulement j'ai essayé pour Gmail et ça ne marche pas ça bug à cause des SSL !

Apparement ta méthode reprend les commandes telnet pour se connecter à un smtp et envoyer un mail j'ai trouver une page où l'on dit qu'il faut utiliser " openssl s_client -crlf -connect smtp.gmail.com:465 " pour se connecter à smtp.gmail.com... saurais tu comment intégrer cela à ton script ? le lien est http://www.forumdz.com/showthread.php?t=14991

Commentaire de ImmortalPC le 27/08/2009 19:53:29

Salut !

Oui, ça reprend les commandes telnet. Le lien est très intéressant, mais on ne peux effectuer une connexion directement comme cela en php.

Je cherche une solution.
Je te tiens au courant
@+
ImmortalPC

Commentaire de lcomb le 14/09/2009 23:20:54 10/10

Salut grace au passage a PHP 5 Des serveurs ont fait begguer ma solution web pour le mail je recherche un groupe de travail pour codevelloper une solution d entreprise pour le mail

Merci de me repondre a plus tard  

Commentaire de era le 27/09/2009 19:59:03

hello,

la methode authentification a un probleme, j ai lu la rfc
mais je n arrive pas a m authentifier sur mon serveur smtp prive
il jette des que je fais AUTH LOGIN
si quelqu un peut m aider

merci

Commentaire de TheBestFear le 18/12/2009 13:17:06

Bonjour,
j'ai essayer d'utiliser ton code mais un petit problème que je ne comprend pas viens de se poser,

au moment de l'authentification sur le serveur il me dit sa :

Le serveur refuse l' authentification (AUTH LOGIN) !!!
Numéro de l' erreur: 530
Message renvoyé: 530 5.7.0 Must issue a STARTTLS command first. 16sm1877405ewy.6
Impossible d' envoyer le mail !!!

si vous avez une idée de se qui faut rajouter dans le code, je suis preneur !

sinon j'utilise la version simple car la version complexe est impossible a mettre en marche, des que j'envoie un email sa ne s'active même pas aucun message de retour


merci de repondre

bonne journée

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Mail et formulaire [ par Jackboy ] J'aimerai créer un formulaire, assez complexe (pas seulement email, nom, message,...) et j'aimerai avoir ce formulaire envoyer dans un email et format formulaire pour e-mail invisible [ par pyranhaz ] Bonjour,Je cherche à élaborer un formulaire php afin que les clients de mes petites annonces puissent envoyer leur réponse sans connaître le e-mail du Envoi d'un email via smtp [ par Bruto ] J'aurais besoin d'envoyer des emails via mon serveur smtp ayant l'adresse 172.16.10.111 et donc totalement indépendant de mon serveur apache.J'utilise Problème de compatibilité de script [ par Chris54 ] Bonjour,J'ai un problème d'execution d'un script javascript sous netscape alors qu'il fonctionne parfaitement sous IE mais je ne sais pas pourquoi.Que aidez moi pb avec email !! [ par anisbs ] Salut je suis débutant en phpje commence a essayer quelques trucs mais la fonction mail ne fonctionne pas Il me sort un truc comme :Warning: mail(): envoie d'Email :Je dois avoir de la merde dans les yeux [ par Wam0106 ] Voila chez Online.net il me dise qu'il y a une erreure a la ligne 3 mais je ne vois pas ou est le pb si qq'un peu me dire ce qui ne va pas:&lt;? $head Pb avec Mail() [ par faluma972 ] Slt,j'ai un pb avk la fonction Mail()!je veux pouvoir envoyer un mail à kelk1 en ayant son email en paramètre $email mais ca ne fonctionne pas!Que doi fonction mail ? [ par badjouane ] comment puis evité le "/" qui jalone les mail que j'envoi à partir de la section administration de mon site.Par exemple, si j'écri :Mes c'est quoi ce Capter l'email une fois lu. [ par zzzzzz ] Salutj'aimerai savoir si il y a un moyen de "capter" l'email d'un destinataire. Si par exemple j'envoie un mail à bidon@hotmail.comj'aimerai appellé u Envoyer bcp de email avec mail() [ par ImmortalPC ] Salut, Je me pose &#224; un gros probl&#232;me sur un de mes scripts, envoyer beaucoup d'email ( environs 20 000 ). Le probl&#232;me c'est le time ou


Nos sponsors


Sondage...

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,764 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales