Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    Domanda sulla funzione mail() di PHP

    Salve a tutti!
    Da buona programmatrice in erbissima... ho scritto un piccolo script che potesse consentire ad un utente di inviarmi una e-mail tramite il mio sito per ottenere come informazione l'e-mail dell'utente in questione al fine di poterla inserire all'interno di una mia personale lista per le newsletter.
    Ho così implementato i seguenti codici:

    1) in un file PHP ho inserito questo:
    codice:
    <?php
    
    // Modulo newsletter
    
    if(isset($_POST["submit"])) {
    	$email = $_POST["email"];
    	$name = $_POST["name"];
    	
    	$mittente = "NEWSLETTER: $name ti invia questo messaggio";
    	$sendmail = mail("miaemail@server.it", $mittente, "From: $email");
    	
    	if($sendmail)
    		echo "Invio del messaggio riuscito!";
    	else
    		echo "impossibile inviare il messaggio";
    }
    ?>
    2) nella pagina principale in cui volevo che lo script comparisse, ho inserito questa parte di codice:

    codice:
    		<div align="left" style="margin-top:1px; text-align:left">
            <?PHP include('codice/newsletter.php'); ?>
            <form name="newsletter" method="post" action="" >
            
            
    
    E-mail:
            <input type="text" name="email">
    
            Nome:
            <input type="text" name="name">
            <input type="submit" name="submit" value="Invia" class="form_submit">
            </form></p>
    </div>
    Da principio, però, non avevo affatto inserito la componente "name" all'interno del codice, e ovviamente quando la funzione mail() si metteva in moto mi veniva segnalato un errore, poiché la sintassi di questa funziona prevede quanto meno l'inserimento, tra le parentesi, di tre parametri in ingresso. Così mi domandavo: ma se io non volessi per niente sapere il nome della persona che mi sta inviando la sua email, e se quindi non volessi l'input ad esso associato... come dovrei fare? Come dovrei modificare il mio codice? Non sono riuscita a venirne a capo... sigh!
    Attualmente lo script funziona, e l'e-mail che mi arriva contiene, come messaggio, l'e-mail della persona che rischiesto di essere inserita nella lista per le newsletters. Tuttavia: quando mi arriva l'email nella posta, il mittente (nel qual caso... il MIO SITO!) compare sostanzialmente col nome del mio host@qualcos'altro.com... C'è un modo per far sì che come mittente appaia invece l'email del mio dominio? Tipo appunto: miaemail@miodominio.com ?

    Chi può aiutarmi? Grazie mille in anticipooo!
    I'm going under (going under)
    Drowning in you (drowning in you)
    I'm falling forever (falling forever)
    I've got to break through
    I'm going under

    { GOING UNDER - Evanescence }

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505

    Re: Domanda sulla funzione mail() di PHP

    La segnatura della funzione mail() è questa
    codice:
    bool mail ( string $to , string $subject , string $message [, string $additional_headers [, string $additional_parameters ]] )
    e tu fai così
    Originariamente inviato da Rei-chan
    $mittente = "NEWSLETTER: $name ti invia questo messaggio";
    $sendmail = mail("miaemail@server.it", $mittente, "From: $email");
    il che è sbagliato per ciò che vuoi ottenere.

    Come vedi mail() accetta minimo 3 parametri:
    1) il destinatario
    2) l'oggetto dell'email
    3) il messaggio

    Tu avrai anche chiamato $mittente la tua variabile, ma per la funzione mail() quello è l'oggetto (subject), non conta il nome della variabile, ma la posizione in cui la metti.
    Ti arriva come mittente l'indirizzo host@qualcos'altro.com perché tu alla funzione mail() non hai detto da nessuna parte chi sia il mittente, allora questo viene ricavato da altri dati.

    Se vuoi far apparire l'indirizzo del mittente devi inserirlo in un'ulteriore variabile opzionale, quella contenenti gli headers.
    Esempio:
    Codice PHP:
    $destinatario "pippo@isp.it";
    $oggetto "Prova";
    $messaggio "Messaggio di prova";
    $headers 'From: [email]mittente@isp.com[/email]' "\r\n" .
               
    'Reply-To: [email]mittente@isp.com[/email]' "\r\n" .
               
    'X-Mailer: PHP/' phpversion();

    $sendmail mail($destinatario,$oggetto,$messaggio,$headers);
    .... 

  3. #3
    Argh... ma in effetti avevo frainteso proprio del tutto il significato dei parametri della funzione mail() Forse perché sono scritti in inglese nella guida....
    Comunque in effetti sì: ho tolto banalmente $name (sia dal codice che dal form), non ne avevo bisogno, LOL!

    Per quanto riguarda la variabile $headers: quindi è necessario soltanto che io la aggiunga al mio file .php? Senza altro inserire nel codice per il form? Posso chiederti inoltre di spiagarmi cosa significa esattamente la riga:

    codice:
    'X-Mailer: PHP/' . phpversion();
    Grazie mille intanto per l'utilissimo aiuto!
    I'm going under (going under)
    Drowning in you (drowning in you)
    I'm falling forever (falling forever)
    I've got to break through
    I'm going under

    { GOING UNDER - Evanescence }

  4. #4
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    La variabile $headers puoi metterla così com'è direttamente nel codice, non ha niente a che fare con la form.

    'X-Mailer: PHP/' . phpversion();
    ha una semplice funzione, se quando ricevi l'email vai nelle proprietà della stessa, ti dice con cosa è stata inviata l'email, esattamente leggerai:
    X-Mailer: PHP/5.2.16
    se la versione di PHP sul server è la 5.2.16.
    Non ha un'utilità specifica, ma può far comodo e mettercela non costa niente.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.