Italian SMF

Oltre SMF => Supporto Web => Discussione aperta da: Flavio93Zena il Giovedì - 07 Aprile 2016 - 07:40

Titolo: Form con e-mail, dove sbaglio?
Inserito da: Flavio93Zena il Giovedì - 07 Aprile 2016 - 07:40
<?php 
$action
=$_REQUEST['action']; 
if (
$action=="")    /* display the contact form */ 
    

    
?>

    <form  action="http://virtualinteractivege.com/index.php?page=page4264" method="POST" enctype="multipart/form-data">
    <input type="hidden" name="action" value="submit">
    Your name:<br />
    <input name="name" type="text" value="" size="30"/><br />
    Your email:<br />
    <input name="email" type="text" value="" size="30"/><br />
Select your preferred hosting plan:
<select name="hostplan">
<option value="">Select...</option>
<option value="Standard">Standard</option>
<option value="Ultimate">Ultimate</option>
</select><br />
    Domain name (ex. yourdomain.com):<br />
    <textarea name="domain" rows="1" cols="50"></textarea><br />
* If you currently do not have a domain, you need to register one before your account can be set up.<br />
PayPal Transaction Number<br />
Or Promotion Code<br />
<input name="transactioncode" type="text" value="" size="30"/><br />
    <input type="submit" value="Send email"/>
    </form>
    <?php 
    
}  
else                
/* send the submitted data */ 
    

    
$name=$_REQUEST['name']; 
    
$email=$_REQUEST['email']; 
    
$domain=$_REQUEST['domain']; 
$hostplan=$_REQUEST['hostplan'];
$transactioncode=$_REQUEST['transactioncode'];
    if ((
$name=="")||($email=="")||($domain=="")||($hostplan=="")||($transactioncode==""))
        { 
        echo 
"All fields are required, please fill <a href=\"\">the form</a> again."
        } 
    else{         
        
$from="From: $name<$email>\r\nReturn-path: $email"
        
$subject="Message sent using your contact form"
        
mail("miamail@yahoo.com"$from$subject$email$hostplan$domain$transactioncode); 
        echo 
"Email sent!"
        }
    }   
?>

Lo scopo è inviare una mail con le informazioni dei campi citati. Dove sbaglio? Non invia una mazza ;D
Uso in pagina di simpleportal http://virtualinteractivege.com/index.php?page=page4264 in php.
Grazie in anticipo ::)

Nota: non è che devo per forza farla simile a quella di pastebin..? :/ Non mi piace il back-end :-X Ah, dovrà funzionare fuori da SMF, nel caso ci siano differenze (e credo di sì).
Titolo: Re:Form con e-mail, dove sbaglio?
Inserito da: emanuele il Giovedì - 07 Aprile 2016 - 08:58
Citazione di: Flavio93Zena il Giovedì - 07 Aprile 2016 - 07:40
Nota: non è che devo per forza farla simile a quella di pastebin..? :/ Non mi piace il back-end :-X
/me non ha idea di cosa Flavio stia parlando, quindi con fare accondiscendente cambia discorso

Citazione di: Flavio93Zena il Giovedì - 07 Aprile 2016 - 07:40
Dove sbaglio?
Prima cosa nell'ordine di formulazione delle domande: chiedere "dove sbaglio" prima di aver dato la spiegazione di cosa non funziona non serve. :P

Citazione di: Flavio93Zena il Giovedì - 07 Aprile 2016 - 07:40
Non invia una mazza ;D
Seconda cosa non son sicuro di cosa effettivamente significhi questo "non invia una mazza": non invia ma dice di averlo fatto, oppure non arriva nemmeno all'invio?

Io opterei per la prima, anche solo perché i parametri delle funzioni di php non si inventano a muzzo, perché non è così che funzionano i linguaggi di programmazione, si guarda il manuale (o si usa un IDE con autocompletamento) e si mettono le informazioni richieste nella posizione richiesta.
Lascio a te la pagina del manuale di mail e il compitino di scoprire come la tua funzione è sbagliata:
http://php.net/manual/en/function.mail.php
Titolo: Re:Form con e-mail, dove sbaglio?
Inserito da: Flavio93Zena il Sabato - 09 Aprile 2016 - 19:06
Citazione di: emanuele il Giovedì - 07 Aprile 2016 - 08:58
Citazione di: Flavio93Zena il Giovedì - 07 Aprile 2016 - 07:40
Nota: non è che devo per forza farla simile a quella di pastebin..? :/ Non mi piace il back-end :-X
/me non ha idea di cosa Flavio stia parlando, quindi con fare accondiscendente cambia discorso
Che memoria  ;D :-X http://www.italiansmf.net/forum/index.php?topic=1876.0

Citazione di: emanuele il Giovedì - 07 Aprile 2016 - 08:58
Citazione di: Flavio93Zena il Giovedì - 07 Aprile 2016 - 07:40
Dove sbaglio?
Prima cosa nell'ordine di formulazione delle domande: chiedere "dove sbaglio" prima di aver dato la spiegazione di cosa non funziona non serve. :P
E' un titolo...

Citazione di: emanuele il Giovedì - 07 Aprile 2016 - 08:58
Citazione di: Flavio93Zena il Giovedì - 07 Aprile 2016 - 07:40
Non invia una mazza ;D
Seconda cosa non son sicuro di cosa effettivamente significhi questo "non invia una mazza": non invia ma dice di averlo fatto, oppure non arriva nemmeno all'invio?
Che torna all'indice senza far nulla.

Citazione di: emanuele il Giovedì - 07 Aprile 2016 - 08:58
Io opterei per la prima, anche solo perché i parametri delle funzioni di php non si inventano a muzzo, perché non è così che funzionano i linguaggi di programmazione, si guarda il manuale (o si usa un IDE con autocompletamento) e si mettono le informazioni richieste nella posizione richiesta.
Lascio a te la pagina del manuale di mail e il compitino di scoprire come la tua funzione è sbagliata:
http://php.net/manual/en/function.mail.php
Più tardi guardo, thx.
Titolo: Re:Form con e-mail, dove sbaglio?
Inserito da: Flavio93Zena il Lunedì - 02 Maggio 2016 - 18:23
Ho avuto un sacco da fare e sono stato dalla mia ragazza (tornato un'ora fa), ma pur avendo guardato non ne ho idea, sinceramente. So qualcosa di template, ma il sorgente lo detesto :/
Titolo: Re:Form con e-mail, dove sbaglio?
Inserito da: emanuele il Lunedì - 02 Maggio 2016 - 23:53
Allora, vediamo un po':
Codice (definizione della funzione da http://php.net/manual/en/function.mail.php) Seleziona

bool mail ( string $to , string $subject , string $message [, string $additional_headers [, string $additional_parameters ]] )

Già solo guardando i nomi delle variabili si capisce cosa ci va: il primo parametro è l'indirizzo email di destinazione ($to), il secondo è l'oggetto della mail ($subject), poi il messaggio ($message), poi altri opzionali che presumibilmente possiamo ignorare a meno di avere altre necessità.

Ora vediamo il tuo codice:
Codice (tuo codice) Seleziona
mail("miamail@yahoo.com", $from, $subject, $email, $hostplan, $domain, $transactioncode);
come primo parametro hai messo il destinatario. Come secondo hai messo qualcosa che sembra l'header del mittente. Poi l'oggetto, quindi l'email del mittente, e per finire una serie di parametri presi dalla tua form.

Quindi, leggendo le specifiche della funzione mail, "semplicemente" devi:
0) passare a mail solo i valori che effettivamente accetta,
1) mettere in ordine corretto le variabili,
2) (conseguenza di 1) creare un testo del messaggio.

Quindi il finale sarà qualcosa tipo:

$body = 'Messaggio da: ' . $email . '
domain: ' . $domain . '
hostplan: ' . $hostplan . '
transactioncode: ' . $transactioncode;

mail("miamail@yahoo.com", $subject, $body);
Titolo: Re:Form con e-mail, dove sbaglio?
Inserito da: Flavio93Zena il Martedì - 03 Maggio 2016 - 00:12
Ew, sì ho invertito il valore xD Non credevo importasse l'ordine, per qualche strana ragione che nemmeno io stesso comprendo :P
Ad ogni modo, come faccio allora a passare quelle variabili $additional? Vanno (più o meno) bene come le ho scritte io?
Titolo: Re:Form con e-mail, dove sbaglio?
Inserito da: emanuele il Martedì - 03 Maggio 2016 - 08:46
Ora sai che l'ordine conta e "quello" che passi conta, fai uno sforzo e desumi da questo che anche il numero dei parametri che passi ad una funzione conti.
Da queste informazioni sai che mail accetta "solo" 5 parametri, non i 7 che gli passi tu.

Ora passiamo alla domanda: perché vuoi aggiungere certe cose come header aggiuntivi?
Titolo: Re:Form con e-mail, dove sbaglio?
Inserito da: Flavio93Zena il Martedì - 03 Maggio 2016 - 13:32
Non li voglio come header aggiuntivi, mi van bene in qualsiasi modo, basta farli passare per la mail @_@ Mi sembra strano che ci possano essere solo 5 parametri però...
Titolo: Re:Form con e-mail, dove sbaglio?
Inserito da: emanuele il Martedì - 03 Maggio 2016 - 13:49
Io ho l'impressione netta che non hai voglia di capire come funziona l'invio della mail, quindi suppongo che scrivere il codice direttamente sia la soluzione che fa perdere meno tempo a tutti. :P
<?php 
$action
=$_REQUEST['action']; 
if (
$action=="")    /* display the contact form */ 
    

    
?>

    <form  action="http://virtualinteractivege.com/index.php?page=page4264" method="POST" enctype="multipart/form-data">
    <input type="hidden" name="action" value="submit">
    Your name:<br />
    <input name="name" type="text" value="" size="30"/><br />
    Your email:<br />
    <input name="email" type="text" value="" size="30"/><br />
Select your preferred hosting plan:
<select name="hostplan">
<option value="">Select...</option>
<option value="Standard">Standard</option>
<option value="Ultimate">Ultimate</option>
</select><br />
    Domain name (ex. yourdomain.com):<br />
    <textarea name="domain" rows="1" cols="50"></textarea><br />
* If you currently do not have a domain, you need to register one before your account can be set up.<br />
PayPal Transaction Number<br />
Or Promotion Code<br />
<input name="transactioncode" type="text" value="" size="30"/><br />
    <input type="submit" value="Send email"/>
    </form>
    <?php 
    
}  
else                
/* send the submitted data */ 
    

    
$name=$_REQUEST['name']; 
    
$email=$_REQUEST['email']; 
    
$domain=$_REQUEST['domain']; 
$hostplan=$_REQUEST['hostplan'];
$transactioncode=$_REQUEST['transactioncode'];
    if ((
$name=="")||($email=="")||($domain=="")||($hostplan=="")||($transactioncode==""))
        { 
        echo 
"All fields are required, please fill <a href=\"\">the form</a> again."
        } 
    else{         
        
$body 'Messaggio da: ' $email '
domain: ' 
$domain '
hostplan: ' 
$hostplan '
transactioncode: ' 
$transactioncode;

        
mail("miamail@yahoo.com"$subject$body);

        echo 
"Email sent!"
        }
    }   
?>
Titolo: Re:Form con e-mail, dove sbaglio?
Inserito da: Flavio93Zena il Martedì - 03 Maggio 2016 - 16:51
Se ti dicessi che non voglio leggerlo per cercare di capirlo mi crederesti quando ti dico che ci sto provando? ;) Ma non è così facile, non ho mai lavorato attorno al codice delle email prima, per cui ci capisco più o meno poco :-[
Non capisco come funzionano i parametri aggiuntivi, non si può i qualche modo infilare un array di variabili dentro alla quinta variabile o qualcosa di simile?
Titolo: Re:Form con e-mail, dove sbaglio?
Inserito da: emanuele il Martedì - 03 Maggio 2016 - 22:55
Proviamo con un'altra domanda: tu devi inviare una mail, la funzione richiede tre parametri obbligatori, tu non hai idea di cosa servano gli altri. Perché vuoi usarli?
Una mail è composta da:
1) mittente,
2) destinatario,
3) oggetto,
4) corpo.

Posto che di default il server imposta un mittente quando una mail viene inviata, quello che resta sono 3 parametri, che guarda caso sono anche quelli obbligatori della funzione "mail" di php.
Perché ti servono i parametri aggiuntivi?
Titolo: Re:Form con e-mail, dove sbaglio?
Inserito da: Flavio93Zena il Mercoledì - 04 Maggio 2016 - 00:45
Ew, wait, posso spedire diverse variabili nel corpo allora! Io avevo capito che fossero solo variabili fisse (una ed una soltanto).
Cioè tipo:
1) mittente,
2) destinatario,
3) oggetto,
4) variabile1,
5) variabile2.
Comincio a capirci qualcosa, anche se non saprei bene come mettere le diverse variabili nel body @_@
Titolo: Re:Form con e-mail, dove sbaglio?
Inserito da: emanuele il Mercoledì - 04 Maggio 2016 - 00:46
Te l'ho scritto sopra nell'esempio.
Te l'ho scritto sopra nel codice "finale".

Il corpo è una stringa, come costruisci una stringa in PHP?
Titolo: Re:Form con e-mail, dove sbaglio?
Inserito da: Flavio93Zena il Venerdì - 06 Maggio 2016 - 23:54
Dopo un po' di "lavori" per così dire ;D Sono giunto a questo:
<?php 
$action
=$_REQUEST['action']; 
if (
$action=="")    /* display the contact form */ 
    

    
?>

    <form  action="https://www.allpoints.host/premiumsignup.php" method="POST" enctype="multipart/form-data">
    <input type="hidden" name="action" value="submit">
    Your name:<br />
    <input name="name" type="text" value="" size="30" style="color: #000;"/><br /><br />
    Your email:<br />
    <input name="email" type="text" value="" size="30" style="color: #000;"/><br /><br />
Select your preferred hosting plan:
<select name="hostplan" style="color: #000;">
  <option value="">Select...</option>
  <option value="Standard">Standard</option>
  <option value="Ultimate">Ultimate</option>
</select><br /><br />
    Domain name (ex. yourdomain.com):<br /><br />
    <input name="domain" type="text" value="" size="30" style="color: #000;"></textarea><br />
* If you currently do not have a domain, you need to register one before your account can be set up.<br /><br />
PayPal Transaction Number<br />
Or Promotion Code<br />
    <?php 
    
}  
else                
/* send the submitted data */ 
    

    
$name=$_REQUEST['name']; 
    
$email=$_REQUEST['email']; 
    
$domain=$_REQUEST['domain']; 
// $hostplan=$_REQUEST['hostplan'];
$transactioncode=$_REQUEST['transactioncode'];
    if ((
$name=="")||($email=="")||($domain=="")||($hostplan=="")||($transactioncode=="")!!($g-recaptcha-response==""))
        { 
        echo 
"All fields are required, please fill <a href=\"\">the form</a> again."
        } 
    else{         
$headers  'MIME-Version: 1.0' "\r\n";
$headers .= 'Content-type: text/html; charset=UTF-8' "\r\n";
$headers .= 'From: $name <$email>' "\r\n";
$subject 'All Points Web Hosting: Premium Signup Application: ' $name '';
        
$body 'Message from: ' $name '
Domain: ' 
$domain '
Hostplan: ' 
$hostplan '
Transactioncode: ' 
$transactioncode;

        
mail("censored@gmail.com"$subject$body$headers);
        
header("Location: https://www.allpoints.host/success.php");
        }
    }   
?>

Funziona tutto tranne i maledetti headers, non riesco a capire cosa ci sia di sbagliato :/ Purtroppo, non essendo corretti, le mail finiscono invariabilmente nella cartella spam. Ho consultato il manuale di php ma sinceramente mi sembra di fare giusto :(

Un'altra cosa, ho provato ad aggiungere il recaptcha di google, fallendo miseramente. Ma come diavolo sono fatti i doc di google?!?! Un cretino lo spiegherebbe meglio, non si capisce un accidente!!! (https://www.italiansmf.net/forum/Themes/premiummgc/images/post/thumbdown.gif)
Titolo: Re:Form con e-mail, dove sbaglio?
Inserito da: emanuele il Sabato - 07 Maggio 2016 - 00:01
Del problema delle mail che vanno nello spam devi parlarne con Spuds. xD

Comunque, prima di guardare il manuale di php per le mail, dovresti guardare nel manuale di php la differenza tra single quote e double quote in relazione alle stringhe:
$headers .= 'From: $name <$email>' . "\r\n";
Quello che tu vuoi, in verità è:
$headers .= "From: $name <$email>\r\n";

RTFM! FTW! :P
Titolo: Re:Form con e-mail, dove sbaglio?
Inserito da: Flavio93Zena il Sabato - 07 Maggio 2016 - 04:49
Nope, pagina bianca :P
Nota: nel caso non fosse chiaro se tolgo le 3 righe di headers funziona.
Titolo: Re:Form con e-mail, dove sbaglio?
Inserito da: emanuele il Sabato - 07 Maggio 2016 - 11:58
Ribadisco, imparare per tentativi va bene, ma non è che si può pretendere che gli altri ti correggano ogni riga di codice. ;)

if (($name=="")||($email=="")||($domain=="")||($hostplan=="")||($transactioncode=="")!!($g-recaptcha-response==""))

da dove hai preso la sintassi "!!"?
Secondo me l'intenzione era "||".
Titolo: Re:Form con e-mail, dove sbaglio?
Inserito da: Flavio93Zena il Sabato - 07 Maggio 2016 - 14:11
-->Inserisci due righe di imprecazioni<--
Ecco cosa ottengo a scrivere codice a certi orari -_- Il fatto che ! sia accanto a | e che siano similissimi fra loro NON aiuta.

Comunque sì stupido io ho dimenticato di toglierlo quando ho tolto recaptcha, oltretutto.
<?php 
$action
=$_REQUEST['action']; 
if (
$action=="")    /* display the contact form */ 
    

    
?>

    <form  action="https://www.allpoints.host/premiumsignup.php" method="POST" enctype="multipart/form-data">
    <input type="hidden" name="action" value="submit">
    Your name:<br />
    <input name="name" type="text" value="" size="30" style="color: #000;"/><br /><br />
    Your email:<br />
    <input name="email" type="text" value="" size="30" style="color: #000;"/><br /><br />
Select your preferred hosting plan:
<select name="hostplan" style="color: #000;">
  <option value="">Select...</option>
  <option value="Standard">Standard</option>
  <option value="Ultimate">Ultimate</option>
</select><br /><br />
    Domain name (ex. yourdomain.com):<br /><br />
    <input name="domain" type="text" value="" size="30" style="color: #000;"></textarea><br />
* If you currently do not have a domain, you need to register one before your account can be set up.<br /><br />
PayPal Transaction Number<br />
Or Promotion Code<br />
<input name="transactioncode" type="text" value="" size="30" style="color: #000;"/><br /><br />
    <input type="submit" value="Send email" style="color: #000;"/>
</form>
    <?php 
    
}  
else                
/* send the submitted data */ 
    

    
$name=$_REQUEST['name']; 
    
$email=$_REQUEST['email']; 
    
$domain=$_REQUEST['domain']; 
// $hostplan=$_REQUEST['hostplan'];
$transactioncode=$_REQUEST['transactioncode'];
    if ((
$name=="")||($email=="")||($domain=="")||($hostplan=="")||($transactioncode==""))
        { 
        echo 
"All fields are required, please fill <a href=\"\">the form</a> again."
        } 
    else{         
$headers  'MIME-Version: 1.0' "\r\n";
$headers .= 'Content-type: text/html; charset=UTF-8' "\r\n";
$headers .= "From: $name <$email>\r\n";
$subject 'All Points Web Hosting: Premium Signup Application: ' $name '';
        
$body 'Message from: ' $name '
Domain: ' 
$domain '
Hostplan: ' 
$hostplan '
Transactioncode: ' 
$transactioncode;

        
mail("censored"$subject$body$headers);
        
header("Location: https://www.allpoints.host/success.php");
        }
    }   
?>

Questo funziona, ma continua ad essere spam - questo è un report: http://isnotspam.com/newlatestreport.php?email=ins-3ewgpsnr%40isnotspam.com
In particolare:
Citazione* 3.5 BAYES_99 BODY: Bayes spam probability is 99 to 100%
Bs.

Potrei notare che le mail vengono spedite con la scritta "via" e il nome del server.
CitazioneI'm a sender and I don't want my recipients to see the "via" link. What can I do?

Gmail checks whether emails are correctly authenticated. If your messages are sent by a bulk mailing vendor or by third-party affiliates, please publish an SPF record that includes the IPs of the vendor or affiliates which send your messages and sign your messages with a DKIM signature that is associated with your domain.
Potrebbe avere a che fare anche questo?
Titolo: Re:Form con e-mail, dove sbaglio?
Inserito da: emanuele il Sabato - 07 Maggio 2016 - 19:51
Citazione* 3.5 BAYES_99 BODY: Bayes spam probability is 99 to 100%
Prova a leggere tutta la riga e fare 2+2: "BAYES_99 BODY", tu come lo interpreti?
Titolo: Re:Form con e-mail, dove sbaglio?
Inserito da: Flavio93Zena il Sabato - 07 Maggio 2016 - 21:13
Che il body fa schifo e c'è qualcosa che non va, a quanto ho trovato è una regola di spamassassin, ma non mi dice un accidente di più :(
Titolo: Re:Form con e-mail, dove sbaglio?
Inserito da: emanuele il Sabato - 07 Maggio 2016 - 23:07
Appunto.
Il corpo del messaggio, per come è impostato (nel senso proprio del contenuto della mail) è riconosciuto dai filtri bayesiani (i.e. probabilistici) come spam.
A livello "php" non c'è niente che puoi fare.

Le possibilità sono due:
1) se la mail arriva a te e basta, metti l'indirizzo di provenienza white list (se ti è possibile, ad esempio con gmail) e te ne freghi,
2) se la mail deve arrivare a qualcun altro... crea un corpo del messaggio che assomigli meno ad un messaggio di spam.

Tutto qui.
Titolo: Re:Form con e-mail, dove sbaglio?
Inserito da: radu81 il Lunedì - 09 Maggio 2016 - 01:17
Forse il miglior strumento per testare le mail mail-tester.com.

Buona fortuna!