Envoi d'un mail de confirmation

Eléphant du PHP | 142 Messages

02 mai 2011, 15:36

Bonjour,

Sur mon site, on peut s'inscrire à une formation. Jusque là, tout roule. Mais dans la foulée, j'aimerais que la personne reçoive un mail de confirmation. Pourriez-vous m'aider à y voir plus clair dans ce code (qui ne fonctionne pas...) ?
$objet = "Confirmation d'inscription monentreprise";
    $boundary = '-----=' . md5(uniqid(rand()));
    $headers  = "MIME-Version: 1.0\r\n";
    $headers .= "Content-Type: multipart/mixed; boundary=\"$boundary\"\r\n";
				
$headers .= 'Content-Type:image/jpg; name="barre.jpg"';
$headers .= 'Content-Transfer-Encoding: base64';
$headers .= 'Content-Disposition: attachment; filename="../images/barre.jpg"';
$headers .= "From: monentreprise<[email protected]>\r\nReply-to : [email protected]";
				
$from = 'MIME-Version: 1.0\r\n'; 				
$from .= 'Content-type: text/html; charset=iso-8859-1\r\n'; 	
$from .= 'From: [email protected] <monentreprise>\r\nReply-to : [email protected] <monentreprise>\nX-Mailer:PHP'; 	
$objet = "Confirmation d'inscription monentreprise";				
								
$From  = "From:[email protected]\n";
$From .= "MIME-version: 1.0\n";
$From .= "Content-type: text/html; charset= iso-8859-1\n";
$message = "Mon message";

ini_set("memory_limit",'2000M');
$file = fopen("mail.html","r");
    if ($file){
        while(!feof($file)){
        $message .= $message.fgets($file, 4096);
        }
        fclose($file);
    }

    if (mail($UnEmail,$objet,$message,$From)){
    $_SESSION['inscription'] = $UnPrenom.' '.$UnNom; 
    echo '<meta http-equiv="Refresh" content="0;URL=csc_formation.php">'; 
    }

unset($Sql);
Les messages d'erreurs sont les suivants :
-Warning : Fopen (mail.html) [Function.Fopen] : Failed to open stream : no such file or directory in...
-Warning : Mail() [Function mail] : Failed to connect to mailserver at "localhost" port 80, verify your "SMTP" and "SMTP_port" setting in php.ini or use ini_set in...
-Fatal error : Maximum execution time of 30 seconds exceeded in...

Mammouth du PHP | 672 Messages

02 mai 2011, 15:54

Bonjour.
Les messages d'erreurs sont les suivants :
-Warning : Fopen (mail.html) [Function.Fopen] : Failed to open stream : no such file or directory in...
-Warning : Mail() [Function mail] : Failed to connect to mailserver at "localhost" port 80, verify your "SMTP" and "SMTP_port" setting in php.ini or use ini_set in...
-Fatal error : Maximum execution time of 30 seconds exceeded in...
1. Attention : fopen (mail.html) : Echoue à ouvrir le fichier : le fichier n'existe pas dans ...
=> Vérifier que le fichier mail.htm existe, et qu'il est bien au bon endroit (par rapport au script de base).
// Afficher le répertoire courant
echo dirname($_SERVER["SCRIPT_FILENAME"]);
2. Attention : Mail () : Echoue à se connecter au serveur de mail sur le port 80 de localhost. Vérifiez votre paramètrage 'SMTP' et 'SMTP_PORT' dans php.ini ou utilisez ini_set.
Voir avec l'hébergeur les paramètrages à appliquer...

3. Erreur fatale : Temps d'exécution maximal de 30 sec. dépassé.
Le script est trop long. Peut-être une boucle quelque part ?
Essaye sans la partie "envoi de mail", déjà...

Eléphant du PHP | 142 Messages

02 mai 2011, 16:11

Merci pour ta réponse macgawel. J'ai réglé le problème de fopen (mail.html), mais le script prend encore énormément de temps à s'exécuter. Pour ce qui est du Failed to connect to mailserver, je vais me renseigner.
Je ne parviens pas à comprendre pourquoi il prend tant de temps... C'est pénible pour faire mes tests, je dois attendre plus d'une minute...

Mammouth du PHP | 672 Messages

03 mai 2011, 10:06

Je ne parviens pas à comprendre pourquoi il prend tant de temps... C'est pénible pour faire mes tests, je dois attendre plus d'une minute...
Il n'y a pas de boucle quelque part ?

Tu dois pouvoir trouver des observateurs dévènements, qui pourraient logger ce qui se pase.
Mais je n'en connais pas, donc on va faire ça à la main.
Pour ça, on aura besoin de créer un fichier de log, et de récupérer le temps machine. Ca tombe plutôt bien, l'exemple 2 de la fonction microtime()
1. On crée une fonction qui calcule le temps d'exécution entre deux instructions et l'écrit dans la log.
function gentime() {
	// On utilise des variables statiques pour conserver les valeurs à chaque appel
    static $heure=0,$compteur=1,$log;
    if($heure == 0) {
		// Initialisation
		$heure = microtime(true);
		$log = 'log_'.time().'.log';
	}
	else {
		$nouvelle_heure = microtime(true);
		file_put_contents ( $log, "$compteur\t".sprintf("%01.3f",($nouvelle_heure - $heure))."\n", FILE_APPEND);
		$heure = $nouvelle_heure;
		$compteur++;
	}
}
2. On appelle la fonction régulièrement dans le script (une simple ligne gentime();), en particulier au début et à la fin des boucles, pour voir où est le plantage.

Eléphant du PHP | 142 Messages

03 mai 2011, 11:15

Bonjour mcgawel,

Bizarre, je n'ai rien changé au code, et maintenant il s'exécute à la seconde près... Alors qu'hier il prenait environ 2min. C'est à n'y rien comprendre, mais bon, je ne vais pas m'en plaindre !
Désolé de t'avoir dérangé, et merci de ton aide. A bientôt.