Debug phpmail()

Paperino78

Utente Attivo
30 Giu 2012
409
0
16
Milano
Qualcuno di voi sa dirmi se c'è il modo di capire con debug quale errore mi potrebbe dare l'invio di mail con la funzione php mail()?

Purtroppo ho un sito su altervista che non permette l'utilizzo di phpmailer ma solo la funzione mail() di php. Soltanto che dopo aver scritto correttamente il codice la mail non la invia e non ottengo nessun errore. qua il codice che ho scritto
PHP:
if($formok){

		$denis 		= "[email protected]"; //Mail di Denis
		$alessio	= "[email protected]"; //Mail di Alessio
		
		//Se è tutto OK preparo la mail con la funzione mail() di php
		//Preparo la mail per l'utente in HTML
		$messaggiohtml	= "<html><body style='background: #DCCE6D;'><head>
				<div style='width:100%; margin:0 auto; padding:20px 10px;'>
				<h1>Grazie!</h1><br>Ho ricevuto la tua richiesta<p>Qui di seguito troverai un resoconto di quello che mi hai scritto.
				Ti contatterò il prima possibile per definire i dettagli e magari per incontrarci.</p><br>Denis</div><br><br>
				<div style='padding:10px;'>
				Ciao Denis,<br> mi chiamo <span style='text-transform:uppercase;'>".$nome."</span> e sto cercando uno showman per l'evento che si terrà il ".$dataevento.",
				sarà un " .implode(", ",$richiesta).".	Questa è la mia richiesta:<br> ".$testo."<br><br>
				Chiamami al numero ".$cell_1."-".$cell_2."<br><br> <h4>Grazie</h4><span style=\"text-transform:uppercase;\">".$nome."</span><br><br>
				Questa richiesta te l'ho inviata oggi ".$oggi." alle ".$time." con questo indirizzo IP ".$ip." e sto utilizzando ".$browser."<br><br>
				</div>
				</head></body></html>";
		
		//Intestazioni generali
		$header		=	"From: DenisLive.it" .$denis;
		$header		.=	"Reply-To: Denis ".$denis;
		$header		.=	"Bcc:" .$alessio;
		$header		.=	"X-Mailer: PHP/" . phpversion();
		
		//Stringa che funge da separatore
		$boundary	=	"==String_Boundary_x" .md5(time()). "x";
		
		// costruiamo le intestazioni specifiche per un messaggio
		// con parti relazionate
		$header .= "MIME-Version: 1.0\n";
		$header .= "Content-Type: multipart/related;\n";
		$header .= " boundary=\"$boundary\";\n\n";

		// questa parte del messaggio viene visualizzata
		// solo se il programma non sa interpretare
		// i MIME poiché è posta prima della stringa boundary
		$header .= "Se visualizzi questo testo il tuo programma non supporta i MIME\n\n";
		
		// inizia la prima parte del messaggio in testo puro
		$header .= "–$boundary\n";
		$header .= "Content-Type: text/plain; charset=\"iso-8859-1\"\n";
		$header .= "Content-Transfer-Encoding: 7bit\n\n";
		$header .= "Nome: . $nome ";
		$header .= "E-mail: ". "\n\" . $email . \"\n\r";
		$header .= 'Telefono:' . "\n" . $cell_1 . "-" . $cell_2 . "\n\n";
		$header .= 'Richiesta:' . "\n" . $richiesta . "\n\n";
		$header .= 'Testo:' . "\n" . $testo . "\n\n";
		$header .= $data . "\n";
		$header .= $time . "\n";
		$header .= $ip . "\n";
		
		// inizia la seconda parte del messaggio in formato html
		$header .= "–$boundary\n";
		$header .= "Content-Type: text/html; charset=\"iso-8859-1\"\n";
		$header .= "Content-Transfer-Encoding: 7bit\n\n";
		$header .= ".$messaggiohtml.\n";
		
		//Chiusura della stringa di Boundary
		$header	.=	"-boundary-\n";

		$oggetto	=	"Richiesta Informazioni dal sito Denis Live";
		

		
		
		if (!mail($email,$oggetto,$messaggiohtml,$header)){
			//Messaggio che appare se clicco invio e tutti i campi sono vuoti
			echo '<div>
			<p><h3>C\'è stato un errore nell\'invio della mail</h3></p>
			Cortesemente riprova e se vedi che il problema persiste, contattami direttamente</div>'; //	Messaggio di errore invio mail
			echo "<meta http-equiv='Refresh' content='3; URL=contatti3.php'>";
		}else {
			header('location: contatti4.php');
			echo '<div class="testo">Grazie, ti contatterò nei prossimi giorni. Denis Topino</div>';
			exit(0);
			//echo "Grazie, ti contatterò nei prossimi giorni. Denis Topino";  //Messaggio invio riuscito
			//echo "<meta http-equiv='Refresh' content='3; URL=contatti3.php'>";
		}
	}

qualcuno sa aiutarmi?
 

Longo8

Utente Attivo
28 Mar 2011
1.694
0
36
Controlla nella posta indesiderata e molto spesso (per non dire sempre) agli indirizzi gmail non vengono inviate le mail.
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
se poi abbandoni mail() e passi alla classe phpmailer (o simile) il difetto segnalato da longo, non sparisce, ma si attenua notevolmente

dimenticavo, verifica anche come hai scritto messaggio, cosa c'entra il tag <head> interno ala tag <body>?
la forma hyml
<html>
<head>
</head>
<body>
</body>
</html>
 
Ultima modifica:

Paperino78

Utente Attivo
30 Giu 2012
409
0
16
Milano
Ciao borgo, lo so che phpmailer() e' meglio, purtroppo altervista, come ho scritto, non lo supporta e accetta solamente la funzione mail() di php. Quindi o converto phomailer in mail() oppure devo utilizzare quella, mio malgrado. Proverò a configurare anche sendmail di xampp per vedere se cambia qualcosa.
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
intanto non capisco questo
$header .= ".$messaggiohtml.\n";
perchè aggiungi di nuovo il messaggio nell'header?
poi formatta il messaggio html in modo adeguato, i vari tag al posto giusto.
poi dai un occhio a imap_mail()
http://it1.php.net/manual/en/function.imap-mail.php
visto che usi un bcc
Questa funzione consente l'invio di messaggi di posta elettronica con la corretta gestione della Cc e Ccn ricevitori.
da manuale php
poi prova a modificare (a che ti serve l' <head></head>?)
stai attento inoltre che i client di posta sono rudimentali ed è facile che non capiscano cosa vuol dire
<span style='text-transform:uppercase;'>
quindi farei l'uppercase prima via php
e es il mio (vecchio) non capisce i div e style=, io l'ho formattato usando le vecchie tabelle (<table><tr><td></td></tr></table>)
e usando <body bgcolor='#DCCE6D;'>
e prova per il testo a usare la sintassi eredoc

PHP:
<?php
//.....
//Preparo la mail per l'utente in HTML
        $imploso=implode(", ",$richiesta);
		$nome=strtoupper($nome);
		$messaggiohtml = <<<EOD
		<html><body style='background: #DCCE6D;'>
                <div style='width:100%; margin:0 auto; padding:20px 10px;'>
                <h1>Grazie!</h1><br>Ho ricevuto la tua richiesta<p>Qui di seguito troverai un resoconto di quello che mi hai scritto.
                Ti contatterò il prima possibile per definire i dettagli e magari per incontrarci.</p><br>Denis</div><br><br>
                <div style='padding:10px;'>
                Ciao Denis,<br> mi chiamo $nome e sto cercando uno showman per l&acute;evento che si terrà il $dataevento,
                sarà un $imploso. Questa è la mia richiesta:<br> $testo<br><br>
                Chiamami al numero $cell_1 - $cell_2.<br><br> <h4>Grazie</h4>$nome<br><br>
                Questa richiesta te l&acute;ho inviata oggi $oggi alle $time con questo indirizzo IP $ip e sto utilizzando $browser<br><br>
                </div>
                </body></html>
EOD;
//attento la chiusura dell'eredoc DEVE essere alla prima colonna (nemmono uno spazio prima
//....
?>
prova, al massimo sei al punto di prima
 

Paperino78

Utente Attivo
30 Giu 2012
409
0
16
Milano
Ciao, ho eliminato alcune volci inutili come il messaggio nell'header, corretto alcuni errori, per ora non ho errori d'invio, anzi riesco a mandare le mail dal form con la funzione mail(), che ho scoperto di odiare! quanto all'invio del checkbox ho risolto parzialmente così
PHP:
$richiesta	=	$_POST['checkbox'];
	$richiesta_array	=	array('Matrimonio', 'Eventi', 'Karaoke', 'Altro');

	if (isset($_POST['checkbox'])) {
		foreach ($richiesta as $key => $value) {
			echo "";
		}
	}
Nella mail di invio associo la variabile $value e mi inserisce le scelte fatte nella checkbox

Ora dovrò dedicarmi alla configurazione dell'invio della mail in html che purtroppo ricevo come testo e con tutto in chiaro.

Grazie a tutti
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
credo che mail() non abbia la possibulità di avere il Bcc (almeno credo ma verifico meglio), so che supporta più indirizzi ma tutti nel $to separati dalla virgola e quindi visibili
 

Paperino78

Utente Attivo
30 Giu 2012
409
0
16
Milano
ciao, io credo che il bcc funzioni bene, almeno nella configurazione che ho mi ha inviato la mail sia al mittente sia a me per conoscenza. però il codice devo migliorarlo, e di molto. Non riesco a separare l'invio della mail html e testo.
 

Paperino78

Utente Attivo
30 Giu 2012
409
0
16
Milano
Ciao, allora il problema ora sorge perchè ho tolto la parte che doveva inviare la mail sia in html sia in testo. Il problema era che quando in php costruisci la mail x html credo che tu debba creare una sorta di filtro che a seconda della possibilità del ricevente riceverà la mail o in html o in testo. Il mio problema è che quando inviava la mail ricevevo tutto in charo. Cioè la mai che ricevevo mi faceva vedere apici variabili etc che avevo inserito nella mia pagina del form. Ho quindi cambiato tutto e creato solo la modalità testo in questo modo
PHP:
//Mail in formato testo
$messaggiotxt = "Ho ricevuto la tua richiesta. Qui di seguito troverai un resoconto di quello che mi hai scritto.
Ti contatterò il prima possibile per definire i dettagli e magari per incontrarci.\r\n Denis.\r\n
Mi chiamo ".$NOME." sto cercando uno showman per l'evento che si terrà il ".$data.", sarà un ".$value.".
Questa è la mia richiesta:\r\n\n ".$testo." .\r\n
Il mio numero è " .$cell_1. "-" .$cell_2.". Grazie. \r\n\n\"
Richiesta inviata il ".$time." da questo indirizzo IP ".$ip." e sto utilizzando ".$browser."";


		//Intestazioni generali
		$header	=	"From: DenisLive \r\n";
		$header	.=	"Reply-To:" .$denis. "\r\n";
		$header	.=	"Bcc:" .$alessio. "\r\n";
		$header	.=	"X-Mailer: PHP/" . phpversion();

		$messaggio = "$messaggiotxt";

		$oggetto	=	"Richiesta Informazioni dal sito Denis Live";

		if (!mail($email, $oggetto, $messaggio, $header)){ etc etc

Rimango sempre con il cruccio mio di voler e poter inviare due mail distinte senza Bcc. Una al cliente con alcune parole, ed una a me con altre parole ed informazioni. Purtroppo con la funzione mail() non riesco.
 

Paperino78

Utente Attivo
30 Giu 2012
409
0
16
Milano
ciao, dopo alcuni tentativi e sbattimenti di un intero pomeriggio, sono riuscito a risolvere il problema e a configurare anche l'invio della mail in html. Ora mi rimane solo il problema di riuscire a esportare i valori di una serie di checkbox in una mail. Ma c'è un thread apposito. Chiunque abbia suggerimenti è il benvenuto. Grazie a tutti per il supporto.
 

Discussioni simili