Funzione (mail) PHP5

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
samiel
Staff
Staff
Messaggi: 5511
Iscritto il: ven 16 gen 2004, 0:00
Nome Cognome: Mauro Sacchetto
Slackware: 13.0
Kernel: 2.26
Desktop: KDE
Distribuzione: anche Debian
Località: Venezia

Funzione (mail) PHP5

Messaggio da samiel »

I raffinati potrebbero obiettare che PHP non è propriamente un linguaggio
di programmazione, ma credo comunque che questo sia il forum più adatto,
visto che adesso ce l'abbiamo... Ma veniamo al dunque. Ho caricato
un piccolo sito su Netsons è vi ho inserito una pagina con un form php
per inviare e-mail. E fin qui nulla di strano. Però, cosa che mi risulta
incomprensibile: se attraverso questo form invio mail dove il mittente
dichiara come suo un indirizzo e-mail appartenente a certo domini
(tele2, netsons) oppure se ne inventa uno falso, allora le mail arrivano.
Se invece l'indirizzo inserito è di gmail o di virgilio, allora non arriva
nulla. Di che si tratta secondo voi? Liste bianche e liste nere?

Grazie
M.

Avatar utente
conraid
Staff
Staff
Messaggi: 13630
Iscritto il: gio 14 lug 2005, 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Desktop: kde
Località: Livorno
Contatta:

Re: Funzione (mail) PHP5

Messaggio da conraid »

Anche se andrebbe visto il form, solitamente non si guarda il mittente, ma l'IP. Altrimenti addio. Quindi
Magari è la stessa netsons ad avere qualche blocco, ma mi sembra strano.
A quale indirizzo dovrebbero arrivare?

Avatar utente
aschenaz
Staff
Staff
Messaggi: 4623
Iscritto il: mer 28 lug 2004, 0:00
Nome Cognome: Nino
Slackware: current
Kernel: 5.4.x
Desktop: KDE
Località: Reggio Calabria
Contatta:

Re: Funzione (mail) PHP5

Messaggio da aschenaz »

Succede anche a me: da alcuni hosting le mail su gmail arrivano regolarmente, da altri no...

Avatar utente
conraid
Staff
Staff
Messaggi: 13630
Iscritto il: gio 14 lug 2005, 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Desktop: kde
Località: Livorno
Contatta:

Re: Funzione (mail) PHP5

Messaggio da conraid »

ninobi ha scritto:Succede anche a me: da alcuni hosting le mail su gmail arrivano regolarmente, da altri no...
Lui parlava di mittente non di destinatario.

samiel
Staff
Staff
Messaggi: 5511
Iscritto il: ven 16 gen 2004, 0:00
Nome Cognome: Mauro Sacchetto
Slackware: 13.0
Kernel: 2.26
Desktop: KDE
Distribuzione: anche Debian
Località: Venezia

Re: Funzione (mail) PHP5

Messaggio da samiel »

Il codice è questo:

Codice: Seleziona tutto

<?php
if(isset($_POST['name']) && isset($_POST['email']) && isset($_POST['subject']) && isset($_POST['messaggio'])){
// indirizzo e-mail destinatario
$receiverMail   = "teatroinfolle@netsons.org";
// pulizia dei dati inseriti
$name   = ltrim(rtrim(strip_tags(stripslashes($_POST['name']))));
$email = ltrim(rtrim(strip_tags(stripslashes($_POST['email']))));
$subject = ltrim(rtrim(strip_tags(stripslashes($_POST['subject']))));
$messaggio = ltrim(rtrim(strip_tags($_POST['messaggio'])));
// lettura dell'indirizzo IP
$ip = getenv("REMOTE_ADDR");
// formattazione del messaggio ( \n per le messe a capo )
$msgformat   = "Messaggio da: $name ($ip)\nEmail: $email\n\n$messaggio";
// verifica campi obbligatori
if(empty($name) || empty($email) || empty($subject) || empty($messaggio)) {
echo "<br /><br /><h3>Il messaggio non &#232; stato inviato</h3>
<h3>Sei pregato di compilare tutti i campi</h3><br /> <br /> <br />  <br />  <br /> <br /> <br /> <br /><br />"; }
//verifica l'indirizzo mail
elseif(!ereg("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $email)) {
echo "<br /><br /><h3>Il messaggio non &#232; stato inviato</h3>
<h3>L'indirizzo e-mail indicato non &#232; valido</h3><br /> <br /> <br />  <br />  <br /> <br /> <br /><br /> <br />"; }
else{
//invio del messaggio
mail($receiverMail, $subject, $msgformat, "From: $name <$email>");echo "<br /><br /><h3>Il messaggio &#232; stato inviato correttamente</h3>
<h3>Risponderemo il pi&#249; presto possibile</h3>
<h3>Grazie di averci scritto!</h3><br /> <br /> <br />  <br />  <br /> <br /> <br />"
;
}
}
else{
//metti il form
$self=$_SERVER['PHP_SELF'];
echo <<<FRM
<h3>Puoi inviare una comunicazione <br /> a <span class="white">TEATRO IN F<span class="emph">O</span>LLE</span> <br /> direttamente da questo form</h3>
<h3>Riempi i campi richiesti <br /> e premi il pulsante "Invia"</h3>
<br /><br />
<form action="$self" method="post">
Nome:<br /><br />
<input name="name" size="50" maxlength="40" />
<br /><br /><br />
Indirizzo e-mail:<br /><br />
<input name="email" size="50" maxlength="40" />
<br /><br /><br />
Oggetto:<br /><br />
<input name="subject" size="50" maxlength="40" />
<br /><br /><br />
Messaggio:<br /><br />
<textarea name="messaggio" cols="50" rows="8"></textarea>
<br /><br /><br />
<input type="submit" value="Invia" />
<input type="reset" value="Cancella" />
</form>
FRM;
}
?>
Ho scritto all'assistenza Netsons, vediamo se ne sanno qualcosa...
L'indirizzo è quello di Netsons. Adesso provo a cambiarlo con uno
dei miei account, vediamo se funge...

M.

Avatar utente
conraid
Staff
Staff
Messaggi: 13630
Iscritto il: gio 14 lug 2005, 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Desktop: kde
Località: Livorno
Contatta:

Re: Funzione (mail) PHP5

Messaggio da conraid »

A parte che è bruttino, l'ho provato e funziona con mittente gmail su altro server
Nel senso che mi arriva una mail

tu devi capire se parte. Scrivi in qualche log.
Se parte, se cioè la funzione mail fa il suo lavoro, a quel punto è il server di netsons che blocca per chissà quale motivo.

samiel
Staff
Staff
Messaggi: 5511
Iscritto il: ven 16 gen 2004, 0:00
Nome Cognome: Mauro Sacchetto
Slackware: 13.0
Kernel: 2.26
Desktop: KDE
Distribuzione: anche Debian
Località: Venezia

Re: Funzione (mail) PHP5

Messaggio da samiel »

A parte che è bruttino
Si accettano consigli... Considera che sto muovendo
i miei primissimi passi in php. Hai migliori da propormi?

Ho fatto un esperimento, sostituendo $receiverMail
con un altro account, e le mail arrivano tutte.
Dunque il form spedisce regolarmente e, a quanto
pare, le mail vengono in effetti inoltrate.
Sembra che il blocco sia a livello ricezione... boh...

Grazie
M.

Avatar utente
conraid
Staff
Staff
Messaggi: 13630
Iscritto il: gio 14 lug 2005, 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Desktop: kde
Località: Livorno
Contatta:

Re: Funzione (mail) PHP5

Messaggio da conraid »

samiel ha scritto:
A parte che è bruttino
Si accettano consigli... Considera che sto muovendo
i miei primissimi passi in php. Hai migliori da propormi?
Domani te ne mando uno che uso io. Premetto che non è OOP, nuitari se legge si arrabbierà :-)

Per l'altro discorso problema di loro allora.
Ma bloccare per dominio è una scelta orribile

Avatar utente
nuitari
Linux 3.x
Linux 3.x
Messaggi: 777
Iscritto il: dom 14 ott 2007, 12:51
Slackware: 12.0
Località: San Colombano al Lambro
Contatta:

Re: Funzione (mail) PHP5

Messaggio da nuitari »

AHHHHHH NON E' OOOOOOOOPPPPPPPPPPPP!!!!!!!!! E' IL MAAAAAAAALEEEEEEEEEEEEEEE .

scherzo, mica sono così fanatico dell'oop =) se no non programmerei in C .

Comunque, ti consiglio di usare e scaricare phpmailer. E' una classe per l'invio delle mail che supporta pienamente il formato mime/multipart e permette anche di usare l'autenticazione SMTP. Ho scritto anche un mod per incorporare le immagini, se la usi te lo passo.

Avatar utente
conraid
Staff
Staff
Messaggi: 13630
Iscritto il: gio 14 lug 2005, 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Desktop: kde
Località: Livorno
Contatta:

Re: Funzione (mail) PHP5

Messaggio da conraid »

nuitari ha scritto:AHHHHHH NON E' OOOOOOOOPPPPPPPPPPPP!!!!!!!!! E' IL MAAAAAAAALEEEEEEEEEEEEEEE .

scherzo, mica sono così fanatico dell'oop =) se no non programmerei in C .
in Object-C :-)
nuitari ha scritto: Comunque, ti consiglio di usare e scaricare phpmailer. E' una classe per l'invio delle mail che supporta pienamente il formato mime/multipart e permette anche di usare l'autenticazione SMTP. Ho scritto anche un mod per incorporare le immagini, se la usi te lo passo.
A volte mi serve una cosa più semplice.
comunque samiel potrebbe risolvere con l'smtp esterno in effetti, sempre che netsons gli permetta di farlo
no, correggo cavolata, perché è in ricezione ha detto.

@samiel
MA se ti mandi le mail da un client di posta con mittente gmail ti arrivano a quell'indirizzo?

samiel
Staff
Staff
Messaggi: 5511
Iscritto il: ven 16 gen 2004, 0:00
Nome Cognome: Mauro Sacchetto
Slackware: 13.0
Kernel: 2.26
Desktop: KDE
Distribuzione: anche Debian
Località: Venezia

Re: Funzione (mail) PHP5

Messaggio da samiel »

Domani te ne mando uno che uso io
Ok, vedi tu se mandarmelo con un PM
o se ti serva le mia e-mail. Grazie!
Per l'altro discorso problema di loro allora.
Ma bloccare per dominio è una scelta orribile
Ho il sospetto che sia così. Ho mandato a quell'indirizzo
una email da gmail lasciando stare il form e non è arrivata.
Adesso scrivo all'assistenza. Però mi pare una follia!

M.

samiel
Staff
Staff
Messaggi: 5511
Iscritto il: ven 16 gen 2004, 0:00
Nome Cognome: Mauro Sacchetto
Slackware: 13.0
Kernel: 2.26
Desktop: KDE
Distribuzione: anche Debian
Località: Venezia

Re: Funzione (mail) PHP5

Messaggio da samiel »

No, che idiota... Avevo scritto netsons.com...
Dal web le mail di gmail arrivano alla casella di netsons.
Ma dal form no... Mistero!!!!!

M.

Avatar utente
aschenaz
Staff
Staff
Messaggi: 4623
Iscritto il: mer 28 lug 2004, 0:00
Nome Cognome: Nino
Slackware: current
Kernel: 5.4.x
Desktop: KDE
Località: Reggio Calabria
Contatta:

Re: Funzione (mail) PHP5

Messaggio da aschenaz »

Prima avevo letto in fretta (chiedo venia).

Il tuo problema io l'ho risolto inserendo un mittente fisso e aggiungendo l'e-mail del contatto in "reply-to".

Questo è lo script che ho fatto io - ho modificato parecchie cose (non escludo qualche errore, perciò), perché l'originale richiama dei metodi della classe che uso io - ho tolto anche qualche parte di cui parlerò dopo:

Codice: Seleziona tutto

// modifica queste variabili
$to="destinatario-email"; 
$mitt="mittente"; // inserisci un'email fissa: es. admin@dominio
$site="nomesito";
$paginaform="indirizzopaginadelform";

$nm=trim($_POST["nome"]);
$cg=trim($_POST["cognome"]);
$em=trim($_POST["email"]);
isset($_POST["telefono"]) ? $tl=trim($_POST["telefono"]) : $tl=0;
$tx=trim($_POST["testo"]);
if($nm=="" | $em=="" | $cg=="" | $tx=="") {
   $paginaform.="&messaggio=campo-richiesto";
   // devi impostare la visualizzazione del messaggio nel form
   // naturalmente io ho messo & perché suppongo ci sia già un ? nella querystring
   // altrimenti sostituisci (qui e sotto) & con ?
   header("Location: $paginaform"); 
   exit();
} elseif(!eregi("^[a-z0-9][_\.a-z0-9-]+@([a-z0-9][0-9a-z-]+\.)+([a-z]{2,4})",$em)) {
   $paginaform.="&messaggio=email-non-valida";
   header("Location: $paginaform"); 
   exit();
} else {
// poi spiego perché uso mysql...
   $qry=sprintf("INSERT INTO contatti  VALUES('','%s','%s','%s','%s','%s')",addslashes($nm),addslashes($cg),$em,$tl,addslashes($tx));
   $res=mysql_query($qry) or die("inserimento fallito");
   $id=mysql_insert_id();

   $mrq="SELECT * FROM contatti WHERE ID='$id'";
   $mrr=mysql_query($mrq);
   $mrw=mysql_fetch_object($mrr);

   $sub="Contatti sito $site";
   $mnm=stripslashes($mrw->Nome);
   $mcg=stripslashes($mrw->Cognome);
   $mrw->Testo!="" ? $mtx=wordwrap(stripslashes($mrw->Testo),70) : $mtx="&nbsp;";
   //$headers  = 'MIME-Version: 1.0' . "\r\n";
   //$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
   $headers = 'From: $mitt\r\n";
   $headers .= 'Reply-To: '.$mrw->Email. "\r\n";
$message=<<<EOM

Hai ricevuto un contatto dal sito $site
-------------------------------------------------------------------
Da:\t$mnm $mcg
E-mail:\t$mrw->Email
Telefono:\t$mrw->Telefono
-------------------------------------------------------------------
Contenuto del messaggio:
-------------------------------------------------------------------
$mtx
EOM;

if(mail($to,$sub,$message,$headers)) {
   $paginaform.="&messaggio=messaggio-inviato";
   header("Location: $paginaform"); 
   exit();
} else {
   $paginaform.="&messaggio=invio-fallito";
   header("Location: $paginaform"); 
   exit();
}
Non sarà il massimo, ma funziona abbastanza bene.

Avevo fatto una versione che creava un messaggio in html, ma non sempre veniva visualizzato correttamente ed ho preferito rinunciarci.

Io utilizzo da un po' anche un sistema di anti-spam testuale accessibile che fa capo a delle domande-risposte in una tabella mysql. Preferisco non usare il captcha (che personalmente odio). In ogni caso, qualcosa bisogna fare, altrimenti si viene sommersi dallo spam.

Uso mysql perché voglio lasciare traccia dei contatti e anche perché, così, ho risolto definitivamente il noioso problema delle vocali accentate (coi soliti sistemi avevo esiti diversi in base alle diverse versioni di php).

Rimane, comunque, il problema che segnalavo prima: se inserisco come destinatario un indirizzo gmail, con alcuni hosting funziona, con altri no.

Avatar utente
conraid
Staff
Staff
Messaggi: 13630
Iscritto il: gio 14 lug 2005, 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Desktop: kde
Località: Livorno
Contatta:

Re: Funzione (mail) PHP5

Messaggio da conraid »

ninobi ha scritto: Rimane, comunque, il problema che segnalavo prima: se inserisco come destinatario un indirizzo gmail, con alcuni hosting funziona, con altri no.
Ed il problema è relativo solo ai form php da quel che mi dite. Strano.

Per le lettere accentate devi dire cosa usi nell'intestazione della mail, che naturalmente deve essere lo stesso che hai nella pagine html. Tanto in php non elabori la cosa.
Io ho fatto form anche per siti in giapponese usando l'utf-8

Metti sia l'header http sia il content-type nella pagina html in utf-8, e poi nella mail ci aggiungi qualcosa tipo

Codice: Seleziona tutto

$header .= "Content-type: text/plain; charset=UTF-8\n";
e poi mandi con

Codice: Seleziona tutto

mail($to, $oggetto, $messaggio, $header);
arrivano in giapponese senza fare nient'altro.

Fai finta di essere un client mail, devi settare anche il content-type altrimenti prende quello di default che spesso è ASCII

@samiel
Se quello mandato da ninobi ti funziona non ti mando il mio, fammi sapere
alla fine fanno tutti la stessa cosa più o meno, ed io non ho soluzioni per netsons

Avatar utente
nuitari
Linux 3.x
Linux 3.x
Messaggi: 777
Iscritto il: dom 14 ott 2007, 12:51
Slackware: 12.0
Località: San Colombano al Lambro
Contatta:

Re: Funzione (mail) PHP5

Messaggio da nuitari »

Vedi perchè è utile usare una classe all-purpose? Se hai delle librerie (che siano classi o meno) programmate come si deve, non ha scopo riscrivere ed inventare ogni volta l'acqua calda.. è già tutto li dentro. E non è che usi chissà quali risorse immani.....

Rispondi