Invio di e-mail tramite PHP

antonio_oti

Nuovo Utente
14 Mar 2014
11
0
0
Ciao a tutti.
Tempo fa feci un semplice script in php che mi permette di inviare ad una serie di destinatari (come bcc) delle informazioni raccolte da un form che l'utente compila dal nostro sito.
Tutto bene sino a qualche mese fa... poi le mail non arrivavano più, ho fatto alcuni test ed effettivamente compilando il form con il mio nome, la mail non arrivava.
Ho iniziato a modificare il PHP, modifica e ri-modifica ed ora non capisco se è lo script che non va o se è il sito dove è salvato.
Ho anche provato a salvarlo su un altro hosting ma il risultato non cambia.
Datemi una mano, per favore.
Vi incollo il php:

PHP:
<?php
		$nome = $_POST[nome];
		$email = $_POST[email];
		$telefono = $_POST[telefono];
		$arrivo = $_POST[arrivo];
		$pernottamenti = $_POST[pernottamenti];
		$persone = $_POST[persone];		
		$note = $_POST[note];
		$mittente = "MIME-Version: 1.0\r\n";
		$mittente .= "Content-type: text/html; charset=iso-8859-1 \r\n";
		$mittente .= "From: . $_POST[email] . \r\n";
        $mittente .= "Bcc: [email protected], [email protected] \r\n"; 
		$oggetto = "Richiesta pervenuta al sito: www.bedandbreakfastrimini.net";
		$testo = '
		<html><head><title>mailing list del sito bedandbreakfastrimini.net</title>
		<style type="text/css">body {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:14px; font-weight:normal; color:#000000;}
		</style></head><body><br><br><p><img src="http://www.bed-and-breakfast-romagna.it/send/logo_home_page.jpg" alt="Bed and breakfast a Rimini"></p>';
		$testo .= "
		<strong>Richiesta di pernottamento pervenuta da:</strong><br><br>
		nome: ".$nome."<br> 
		e-mail: ".$email. "<br>
		telefono: ".$telefono."<br>
		data di arrivo: ".$arrivo."<br>
		numero pernottamenti: ".$pernottamenti."<br>
		numero di persone: ".$persone."<br>
		note: ".$note."<br><br><br>
		BedandbreakfastRimini.net<br>
		</p></body></html>
		"; 
		$destinatario = "[email protected]"; 
		mail($destinatario, $oggetto, $testo, $mittente); 
		?>

Attendo con impazienza una vostra gentile risposta.

Antonio
 
Ultima modifica di un moderatore:
ciao
due cose
non usare lo short tag <? ma il yag completo <?php
poi abbandona la funzione mail() e passa alla classe phpmailer o una simile
 
ho sostituito nel tuo script le variabili $_POST con delle costanti e ho eseguito lo script,
nel log degli errori php ho trovato

[15-Mar-2014 09:34:02 Europe/Rome] PHP Warning: mail(): Failed to connect to mailserver at &quot;localhost&quot; port 25, verify your &quot;SMTP&quot; and &quot;smtp_port&quot; setting in php.ini or use ini_set() in C:\Web_Sites\__Test\PHP\test\email.php on line 34


tu cosa leggi nel tuo log degli errori ?
ciao
Marino
 
ciao
@marino
la funzione mail() non funziona in locale,
poi da quello che ho capito non gli da errori, ma l'email non arriva, è l'annoso problema della funzione mail() che con certi provider non funziona, es. [email protected] o [email protected] ecc.. dovuto al fatto che l'email viene bloccata.
per quello dicevo di passare alla classe phpmailler che risolve in buona parte tale difetto
 
io so che libero non permette invio di mail con sistemi esterni, se non si è clienti Infostrada
a meno di non abbonarsi al servizio a pagamento,

altri providers pretendono la connessione con ssl, rifiutando tutto ciò che non soddisfa ...

ma in ogni caso, non interessa il risultato del mio invio quanto il controllo del log di Antonio, magari, qualcosa c'è ...

ciao
Marino
 
Provider

Una cosa che non mi è chiara... il provider della posta.
Io attualmente utilizzo FASTWEB, ma a giorni passerò a TELECOM.
Questo potrebbe spiegare alcune cose.
In effetti un anno fa utilizzavo TISCALI e non avevo problemi.
Non riesco a ricollocare temporalmente le cose, in quanto mi sono accorto solo da qualche mese che lo script non funzionava, ma magari erano mesi che non andava.

Fatemi capire, il mio provider, che non è indicato nello script, cosa c'entra con l'invio?
La posta viene inviata tramite lui? Anche se è su un server di POP.it o NIC.ru ?

Questa spiegazione potrebbe fare chiarezza.

Ho anche fatto un test utilizzando PHPmailer 5.2.4 ma con lo stesso, triste risultato.

Attendo risposte.

Grazie mille.
 
quando invii le mail con un'applicazione, ti appoggi ad un server che gestisce questo servizio,
il server può essere sul tuo computer se hai installato il software necessario,
oppure può essere nella tua rete se appartenendo ad una organizzazione (azienda) esiste questo servizio,
oppure ti rivolgi ad uno det tanti provider esistenti, tiscali, fasteb, libero, tin, gmail, web.de ... ecc.

a qualunque server tu ti rivolga, devi indicare,nella tua applicazione, l'indirizzo del servizio SMTP di invio delle mail
e qualche volta anche la "porta" di accesso, soprattutto se con accesso protetto

per renderti conto, questo è un elenco che ho trovato con tutti gli indirizzi SMTP dei provider italiani
http://www.dominioweb.org/smtp.html

ora nella configurazione delle tue applicazioni questo indirizzo deve essere indicato,
lo potresti trovare in php.ini oppure in qualche ini_set
esempio

ini_set('SMTP','out.alice.it');
ini_set('smtp_port',25);

per quanto riguarda il blocco, quando cambi provider (tiscali -> fastweb), ti viene bloccata la possibilità
di inviare mail con applicazioni ( ... decinaia di esperienze ... ) ma ti lasciano accedere al portale web
per invio e ricezione della posta, in ogni caso non ti bloccano la ricezione della posta con applicazioni

non credo inoltre ad una differenza funzionale tra mail() e phpmail() ma sono più propenso a pensare ... come sopra

che dire ... poche idee e ben confuse ma spero ti aiutino a risolvere
fatti vivo, ciao
Marino

ps : ovviamente devi avere un account attivo su qualsiasi provider utilizzi
 
Ultima modifica:
Ciao Antonio,
ho voluto imparare qualcosa ... non ho mai spedito un formato html
ebbene come vedrai dalla "png" funziona inviando al server di alice,
ma guardati le impostazioni, ovviamente determinanti
come vedi anche la funzione mail non ha problemi, se i parametri sono corretti
ciao
Marino

PHP:
<?php

# http://localhost/test_site/php/test/email_orig.php

error_reporting(E_ALL);				// per segnalare un eventuale errore a video senza guardare il log
ini_set('display_errors', '1');

$mail_username = "[email protected]";	// account ID registrato con il provider in uso
$mail_password = "mia_password";		// password
$mail_SMTP     = "out.alice.it";		// indirizzo SMTP del provider
$mail_SMTPport = "25";				// porta del servizio di invio
$mail_from     = "From: ".$mail_username;	// mittente, può essere diverso da account ID,
						// per sicurezza però qualche provider lo vuole uguale
ini_set("SMTP"     ,$mail_SMTP);
ini_set("smtp_port",$mail_SMTPport);
ini_set("username" ,$mail_username);
ini_set("password" ,$mail_password);

        $nome		= "nome ospite";
        $email		= "email ospite";
        $telefono	= "telefono ospite";
        $arrivo		= "data arrivo";
        $pernottamenti	= "pernottamenti";
        $persone	= "persone";        
        $note		= "note note note note note note note";

        $mittente = "MIME-Version: 1.0\r\n";
        $mittente .= "Content-type: text/html; charset=iso-8859-1 \r\n";
        $mittente .= $mail_from." \r\n";	// <<<<<<<<<<<<<<< ATTENZIONE tu hai messo l'indirizzo dell'ospite
//      $mittente .= "Bcc: [email protected], [email protected] \r\n"; 

        $oggetto = "Richiesta pervenuta al sito: www.bedandbreakfastrimini.net";
        $testo = '
        <html><head><title>mailing list del sito bedandbreakfastrimini.net</title>
        <style type="text/css">body {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:14px; font-weight:normal; color:#000000;}
        </style></head><body><br><br><p><img src="http://www.bed-and-breakfast-romagna.it/send/logo_home_page.jpg" alt="Bed and breakfast a Rimini"></p>';
        $testo .= "
        <strong>Richiesta di pernottamento pervenuta da:</strong><br><br>
        nome: ".$nome."<br> 
        e-mail: ".$email. "<br>
        telefono: ".$telefono."<br>
        data di arrivo: ".$arrivo."<br>
        numero pernottamenti: ".$pernottamenti."<br>
        numero di persone: ".$persone."<br>
        note: ".$note."<br><br><br>
        BedandbreakfastRimini.net<br>
        </p></body></html>
        ";

//      $destinatario = "[email protected]"; 
        $destinatario = "[email protected]"; 
        mail($destinatario, $oggetto, $testo, $mittente); 
?>
BandB.PNG
 
Caro [Marino51] ti ringrazio per il tuo aiuto.
Ma ancora non ho risolto la cosa.
Ho utilizzato il tuo script, personalizzando i campi di accesso al server SMTP di FASTWEB.
Ma ora la pagina mi rimane bianca:
http://www.bed-and-breakfast-romagna.it/send/spedisci_richiesta.php
come se non riuscisse a chiudere lo script,
non da messaggi di nessun tipo.

Dove sbaglio????

Quali test posso fare???

Tieni conto che il mio sito http://www.bedandbreakfastrimini.net/ non ha il php quindi per far girare questo script ho usato l'hosting di pop.it
di http://www.bed-and-breakfast-romagna.it ma come ho scritto in precedenza sino a qualche tempo fa tutto funzionava bene.

Ho fatto anche un test spostando lo script su un altro hosting, ma non cambia nulla. Pagina bianca.

Non capisco.

Attendo la vostra luce, per potermi illuminare la strada.

Grazie in anticipo.


//a
 
ho inserito dei dati nel form e poi ho cliccato invio
ma ho ricevuto il messaggio che mi viene restituito, di solito, quando c'è un errore nello script e che riporto nell'immagine allegata,
se possibile scarica lo script "spedisci_richiesta.php" dal host e postalo ancora
ciao
Marino
err.PNG
 
ok
Questo è lo script integrale:

PHP:
<?php 
# [url]http://localhost/test_site/php/test/email_orig.php[/url] 
error_reporting(E_ALL);                // per segnalare un eventuale errore a video senza guardare il log 
ini_set('display_errors', '1'); 
$mail_username = "tonti.antonio";    // account ID registrato con il provider in uso 
$mail_password = "xxyxyxyxyxy";        // password 
$mail_SMTP     = "smtp.fastwebnet.it";        // indirizzo SMTP del provider 
$mail_SMTPport = "25";                // porta del servizio di invio 
$mail_from     = "From: ".$mail_username;    // mittente, può essere diverso da account ID, 
                        // per sicurezza però qualche provider lo vuole uguale 
ini_set("SMTP"     ,$mail_SMTP); 
ini_set("smtp_port",$mail_SMTPport); 
ini_set("username" ,$mail_username); 
ini_set("password" ,$mail_password); 
        $nome        = $_REQUEST[nome]; 
        $email        = $_REQUEST[email]; 
        $telefono    = $_REQUEST[telefono; 
        $arrivo        = $_REQUEST[arrivo]; 
        $pernottamenti    = $_REQUEST[pernottamenti]; 
        $persone    = $_REQUEST[persone];         
        $note        = $_REQUEST[note]; 
        $mittente = "MIME-Version: 1.0\r\n"; 
        $mittente .= "Content-type: text/html; charset=iso-8859-1 \r\n"; 
        $mittente .= $mail_from." \r\n";     
        $mittente .= "Bcc: [email protected], [email protected] \r\n";  
        $oggetto = "Richiesta pervenuta al sito: www.bedandbreakfastrimini.net"; 
        $testo = ' 
        <html><head><title>mailing list del sito bedandbreakfastrimini.net</title> 
        <style type="text/css">body {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:14px; font-weight:normal; color:#000000;} 
        </style></head><body><br><br><p><img src="http://www.bed-and-breakfast-romagna.it/send/logo_home_page.jpg" alt="Bed and breakfast a Rimini"></p>'; 
        $testo .= " 
        <strong>Richiesta di pernottamento pervenuta da:</strong><br><br> 
        nome: ".$nome."<br>  
        e-mail: ".$email. "<br> 
        telefono: ".$telefono."<br> 
        data di arrivo: ".$arrivo."<br> 
        numero pernottamenti: ".$pernottamenti."<br> 
        numero di persone: ".$persone."<br> 
        note: ".$note."<br><br><br> 
        BedandbreakfastRimini.net<br> 
        </p></body></html> 
        "; 
        $destinatario = "[email protected]";  
        mail($destinatario, $oggetto, $testo, $mittente);  
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style type="text/css">
body,td,th {
	font-family: Verdana, Geneva, sans-serif;
	font-size: 16px;
	color: #09C;
	text-align: center;
}
a:link {
	color: #09C;
	text-decoration: none;
}
a:visited {
	text-decoration: none;
	color: #09C;
}
a:hover {
	text-decoration: underline;
	color: #09C;
}
a:active {
	text-decoration: none;
	color: #09C;
}
</style>
</head>
<body>
<p>&nbsp;</p>
<p>La sua richiesta e' stata inoltrata ai bed and breakfast della provincia di rimini</p>
<p><a href="http://www.bedandbreakfastrimini.net/index.htm">clicchi per ritornare sul portale &quot;Bed and breakfast Rimini&quot;</a></p>
<p><a href="http://www.bedandbreakfastrimini.net/index.htm"><img src="logo_home_page.jpg" alt="logo bed and breakfast rimini" width="450" height="86" border="0" /></a></p>
</body>
</html>

Grazie ancora

//a
 
Ultima modifica di un moderatore:
manca parentesi chiusa ...
$telefono = $_REQUEST[telefono;

$mail_username secondo me dovrebbe avere @fastweb.it o comunque il dominio.it
perché poi viene utilizzato anche come $mail_from che deve avere il dominio

notte
Marino
 
corretta la parentesi, ora ottengo questo:


Notice: Use of undefined constant nome - assumed 'nome' in /var/www/vhosts/bed-and-breakfast-romagna.it/httpdocs/send/spedisci_richiesta.php on line 19

Notice: Use of undefined constant email - assumed 'email' in /var/www/vhosts/bed-and-breakfast-romagna.it/httpdocs/send/spedisci_richiesta.php on line 20

Notice: Use of undefined constant telefono - assumed 'telefono' in /var/www/vhosts/bed-and-breakfast-romagna.it/httpdocs/send/spedisci_richiesta.php on line 21

Notice: Use of undefined constant arrivo - assumed 'arrivo' in /var/www/vhosts/bed-and-breakfast-romagna.it/httpdocs/send/spedisci_richiesta.php on line 22

Notice: Use of undefined constant pernottamenti - assumed 'pernottamenti' in /var/www/vhosts/bed-and-breakfast-romagna.it/httpdocs/send/spedisci_richiesta.php on line 23

Notice: Use of undefined constant persone - assumed 'persone' in /var/www/vhosts/bed-and-breakfast-romagna.it/httpdocs/send/spedisci_richiesta.php on line 24

Notice: Use of undefined constant note - assumed 'note' in /var/www/vhosts/bed-and-breakfast-romagna.it/httpdocs/send/spedisci_richiesta.php on line 25


Cosa significa?

//a
 
Il mittente l'ho modificato con:

PHP:
$mittente .= "From: . $_POST[email] . \r\n";

perchè vorrei che apparisse colui che ha fatto la richiesta.

Notte

e grazie...


//a
 
Ultima modifica di un moderatore:
forse già dormivo ... cambia così,
PHP:
 $nome = $_POST['nome'];
 $email = $_POST['email'];
 $telefono = $_POST['telefono'];
 $arrivo = $_POST['arrivo'];
 $pernottamenti = $_POST['pernottamenti'];
 $persone = $_POST['persone'];        
 $note = $_POST['note'];

non credo che tu possa cambiare il mittente, perchè deve essere consono con l'account (fastweb) che invia
per ora lascia

PHP:
 $mittente .= $mail_from." \r\n";

dopo che abbiamo visto recapitare il primo messaggio lo cambieremo
e vedremo se determinante o no, un passo per volta altrimenti non capiamo ....
fammi sapere, ciao
Marino
 
Ultima modifica di un moderatore:
la risposta al "reale" mittente della mail la ottieni aggiungendo in coda dopo "BCC"

$mittente .= "Reply-To: ".$email." \r\n";

ovvero rispondendo alla mail, viene impostato l'indirizzo giusto
ciao
Marino
 
Funzionaaaaaaaaaaaaaaaaaaaa

Ieri notte poi sono andato a letto, e la mail dopo qualche secondo è arrivata.
Era la parentesi quadra non chiusa.

GRAZIE MILLEEEE

BRAVISSIMI

A presto.

Antonio
 
Ciao, confermo, lo script funziona perfettamente.
Volevo solo aggiungere una cosa, bisognerebbe modificarlo per fare in modo che se non vengono compilati alcuni campi (che ho identificato nel form come obbligatori) la richiesta non parta.
Ho visto che ci sono diversi metodi per farlo, basterebbe inserire quello più semplice.
Non vorrei però riscasinare di nuovo tutto.
Come posso modificare lo script con questi controlli inseriti??
Grazie di nuovo.

Antonio
 

Discussioni simili