configurazione invio mail php

  • Creatore Discussione Creatore Discussione Manu93
  • Data di inizio Data di inizio

Manu93

Nuovo Utente
14 Set 2015
27
0
0
Salve a tutti, ho un piccolo problemino con l'invio delle mail mediante php. Supponiamo di avere questo semplicissimo e banale script:

$success = mail('[email protected]', 'ciao', 'questo è il testo del messaggio');

if ($success) { echo 'mail inviata';} else {echo 'invio non riuscito';}

Ovviamente nel campo '[email protected]' ho inserito il mio indirizzo, comunque sia il risultato è che mi compare l'output 'mail inviata' ma non ricevo nulla. Sicuramente dovrò configurare qualcosa modificando il file php.ini, ho provato a fare delle ricerche su internet ma non ci ho capito molto purtroppo! Mi date una mano per favore?

PS: uso XAMPP su windows.
 
Grazie per avermi risposto, comunque sia ho utilizzato questa sintassi ancora più semplice ma non va lo stesso:
$message = "testo del messaggio";
mail('[email protected]', 'My Subject', $message);

Questa è la configurazione del mio file php.ini:

[mail function]
; XAMPP: Comment out this if you want to work with an SMTP Server like Mercury
; SMTP = localhost
; smtp_port = 25

; For Win32 only.
; http://php.net/sendmail-from
;sendmail_from = [email protected]

Dove sbaglio?

Siate chiari per favore, sono alle prime armi con php.
 
Ultima modifica:
ciao
scusa una cosa: stai provando in locale? generalmente mail() in locale non funzione
devi caricare lo script dove hai il sito e chiamarlo col bw
 
Devo riuscire a farlo partire in locale. Adesso ho provato su linux installando come webserver postfix, ma niente, non va lo stesso!
 
se lo devi spedire da locale devi avere installato un servizio di posta, non basta aver installato un web server,
in questo caso devi prima essere sicuro che il servizio di posta che installi sia funzionante,
successivamente provi ad inviare le mail da php

se, in alternativa vuoi spedire da locale ma attraverso un provider, ci sono 2 casi,
il provider non vuole crittografia
il provider vuole la crittografia

ma in ogni caso il provider vuole sapere userid e password dell'utente del servizio

due esempi, alice(telecom) senza crittografia,
PHP:
$eM_Host     = "out.alice.it";		// ok mail
$eM_Port     = "25";
$eM_Auth     = false;
$eM_Secure   = "";
$eM_username = "[email protected]";
$eM_password = "CAMBIAMI";

gmail con crittografia (ma usando phpmailer)
PHP:
$eM_Host     = "smtp.gmail.com";		// ok PHPmailer
$eM_Port     = 465;
$eM_Auth     = true;
$eM_Secure   = "ssl";
$eM_username = "[email protected]";
$eM_password = "CAMBIAMI";

se intendi percorrere questa seconda strada, trovi (credo sufficienti) informazioni in questo post,
http://forum.mrwebmaster.it/snippet...ettronica-servizio-offerto-vari-provider.html
ciao
Marino
 
scusa se ti rispondo in ritardo ma sono in viaggio con limitato accesso a internet

non so se hai risolto, ma facciamo un esempio banale,
citi posix e sendmail, sono servizi che possiamo identificare come gli "uffici postali"
l'ufficio postale deve funzionare correttamente per consegnare o ricevere la posta

quando il tuo ufficio postale lavora bene puoi usare php o client o altri strumenti
che generano e depositano le mail nella cartella preposta alla consegna (buca delle lettere) dell'ufficio postale
questi strumenti devono però dialogare correttamente con il tuo ufficio postale (*)

l'ufficio postale trovando le mail nella cartella, provvederà all'effettiva consegna e libererà la cartella stessa

l'ufficio postale farà trovare nella cartella preposta alla ricezione le mail ricevute
allo stesso modo avrai client o strumenti che prelevano le mail ricevute
gestendone la persistenza nella cartella di ricezione dell'ufficio postale

mantenere l'ufficio postale è una complicazione, evitabile se si possono usare
"uffici postali" già esistenti (gmail, hotmail, web.de, libero, alice ....)

in questo caso è sufficiente dialogare correttamente con lo specifico servizio usato
questa funzione è equivalente alla precedente (*)

fai sapere a che punto sei
ciao
Marino
 
Ciao Marino, diciamo che avevo 'archiviato' questo argomento poichè non trovavo soluzione e sono andato avanti con lo studio. Comunque sia ho afferrato il concetto, sei stato molto chiaro e preciso grazie.
Tuttavia ho ancora qualche dubbio.. se io volessi usare proprio gmail, come server mail e fare in modo che le email inviate arrivino proprio al mio indirizzo '[email protected]', come devo procedere? Cioè cosa devo configurare e in che modo?
Grazie per la pazienza!!
 
preferisco inviare mail usando la classe PHPmailer,
puoi scaricarla da https://github.com/PHPMailer/PHPMailer
quindi espanderla nella cartella PHPmailer, che posizioni nella cartella "includes" di php.

nello script che segue, cambia le 4 righe indicate con *,
esegui lo script
ciao
Marino

PHP:
<?php

$eM_TO1		= "[email protected]";		// * email del destinatario (anche diverso da Username)
$eM_TOname1	= "MyRecipient";		        // * nome del destinatario

error_reporting(E_ALL);
ini_set('log_errors', 1);
ini_set('error_log', 'MailBoxTest.log');	// nome del file di log

require_once 'PHPMailer/PHPMailerAutoload.php';

$mail = new PHPMailer();

$mail->SMTPDebug = 4;				// attiva il debug dell'invio
$mail->Debugoutput = "error_log";		// registralo nel file di log

$mail->WordWrap = 50;
$mail->IsHTML(true);

$mail->IsSMTP();

$mail->Host       = "smtp.gmail.com";
$mail->Port       = 465;
$mail->SMTPAuth   = true;
$mail->SMTPSecure = "ssl";
$mail->Username   = "[email protected]";	// * utente registrato su gmail
$mail->Password   = "CAMBIAMI";			// * relativa password

$mail->From       = $mail->Username;		// gmail usa sempre l'utente registrato qualunque cosa si metta
$mail->FromName   = "MyMailer";			// nome assegnato all'utente "from"

$mail->AddAddress($eM_TO1, $eM_TOname1);

// rispondere a ... (se fosse necessario rispondere ad utente diverso)
// $mail->AddReplyTo($eM_ReplyTo, $eM_ReplyToName);	

$mail->Subject = " - host : ".$mail->Host." - from : ".$mail->From." - to : ".$eM_TO1." - date : ".date('d-m-Y H:i:s');
$mail->Body    = "<b>".$mail->Subject."</b>";
$mail->AltBody = $mail->Subject;

if($mail->Send()) print "<b>MESSAGGIO INVIATO</b> ".$mail->Subject."<br />";
else              print "<b>ERRORE : MESSAGGIO NON INVIATO</b> ".$mail->Subject."<br />".$mail->ErrorInfo."<br />";
?>
 
non ti ho scritto il motivo della mia scelta, ma è facile da spiegare,
con la funzione "mail" di php è necessario impostare gli "headers" per inviare una mail
gli "headers" si scrivono facilmente per una mail semplice,
la scrittura diventa più complessa quando si devono gestire situazioni meno semplici quali, autenticazioni, crittografie, allegati, formati ecc.
PHPmailer provvede da solo, come dire, la soluzione è già pronta, con la possibilità di studiarla se questo è lo scopo, ma migliorando la produttività di chi ne ha bisogno per l'applicazione.
ciao
Marino
 
Allora ho fatto come hai detto tu, settando il tutto in questo modo:


<?php

$eM_TO1 = " MIA [email protected]";
$eM_TOname1 = "Mario";

error_reporting(E_ALL);
ini_set('log_errors', 1);
ini_set('error_log', 'MailBoxTest.log');

require_once 'PHPMailer/PHPMailerAutoload.php';

$mail = new PHPMailer();

$mail->SMTPDebug = 4;
$mail->Debugoutput = "error_log";

$mail->WordWrap = 50;
$mail->IsHTML(true);

$mail->IsSMTP();

$mail->Host = "smtp.gmail.com";
$mail->Port = 465;
$mail->SMTPAuth = true;
$mail->SMTPSecure = "ssl";
$mail->Username = "MIA [email protected] (ovviamente diversa da quella precedente)";
$mail->Password = "MIA PASSWORD";

$mail->From = $mail->Username;
$mail->FromName = "MyMailer";

$mail->AddAddress($eM_TO1, $eM_TOname1);

// rispondere a ... (se fosse necessario rispondere ad utente diverso)
// $mail->AddReplyTo($eM_ReplyTo, $eM_ReplyToName);

$mail->Subject = " - host : ".$mail->Host." - from : ".$mail->From." - to : ".$eM_TO1." - date : ".date('d-m-Y H:i:s');
$mail->Body = "<b>".$mail->Subject."</b>";
$mail->AltBody = $mail->Subject;

if($mail->Send()) print "<b>MESSAGGIO INVIATO</b> ".$mail->Subject."<br />";
else print "<b>ERRORE : MESSAGGIO NON INVIATO</b> ".$mail->Subject."<br />".$mail->ErrorInfo."<br />";
?>




Questo è il risultato:

ERRORE : MESSAGGIO NON INVIATO - host : smtp.gmail.com - from : "MIA [email protected]" - to : MIA [email protected] - date : 14-10-2015 17:40:45
SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting

Non so più cosa fare!
 
ho ripreso lo script che hai postato, ho modificato le righe con l'indirizzo mail e la psw con risultato positivo

Codice:
MESSAGGIO INVIATO - host : smtp.gmail.com - from : [email protected] - to : [email protected] - date : 14-10-2015 18:46:44

[14-Oct-2015 18:46:44 Europe/Rome] Connection: opening to ssl://smtp.gmail.com:465, t=10, opt=array (
)
[14-Oct-2015 18:46:45 Europe/Rome] Connection: opened

....

[14-Oct-2015 18:46:45 Europe/Rome] CLIENT -> SERVER: [B][COLOR="#FF0000"]AUTH LOGIN[/COLOR][/B]

[14-Oct-2015 18:46:46 Europe/Rome] SMTP -> get_lines(): $data was ""
[14-Oct-2015 18:46:46 Europe/Rome] SMTP -> get_lines(): $str is "334 VXNjkjvjgvfjgfbWU6"
[14-Oct-2015 18:46:46 Europe/Rome] SMTP -> get_lines(): $data is "334 VXNjkjvjgvfjgfbWU6"
[14-Oct-2015 18:46:46 Europe/Rome] SERVER -> CLIENT: 334 VXNjkjvjgvfjgfbWU6

[14-Oct-2015 18:46:46 Europe/Rome] CLIENT -> SERVER: b3B0aWRlYS5zwvfsv21haWwuY29t

[14-Oct-2015 18:46:46 Europe/Rome] SMTP -> get_lines(): $data was ""
[14-Oct-2015 18:46:46 Europe/Rome] SMTP -> get_lines(): $str is "334 UGFpodjvgscQ6"
[14-Oct-2015 18:46:46 Europe/Rome] SMTP -> get_lines(): $data is "334 UGFpodjvgscQ6"
[14-Oct-2015 18:46:46 Europe/Rome] SERVER -> CLIENT: 334 UGFpodjvgscQ6

[14-Oct-2015 18:46:46 Europe/Rome] CLIENT -> SERVER: QmVfjnjnfddmvZyE=

[14-Oct-2015 18:46:46 Europe/Rome] SMTP -> get_lines(): $data was ""
[14-Oct-2015 18:46:46 Europe/Rome] SMTP -> get_lines(): $str is "235 2.7.0 Accepted"
[14-Oct-2015 18:46:46 Europe/Rome] SMTP -> get_lines(): $data is "235 2.7.0 Accepted"
[14-Oct-2015 18:46:46 Europe/Rome] SERVER -> CLIENT: 235 2.7.0 [B][COLOR="#FF0000"]Accepted[/COLOR][/B]

riportato sopra c'è il log registrato nel file 'MailBoxTest.log'
dovresti trovare questo file nella stessa cartella dove risiede lo script,
scorri il file e vedi dove è situato l'errore in particolare presta attenzione dalla stringa "AUTH LOGIN" in poi,
vedrai anche gli indirizzi mail che hai usato ...

a mio parere stai scrivendo male o un indirizzo o la password
ciao
Marino
 
Ultima modifica:
Non trovo nessun file 'MailBoxTest.log', l'ho cercato dentro la cartella PHPmailer scaricata dal sito che mi hai linkato tu.
 
è nella stessa cartella dello script, non di PHPmailer,
se ci fossero problemi di autorizzazioni, puoi modificare, anteponendo al nome il path ad una cartella scrivibile
PHP:
error_reporting(E_ALL);
 ini_set('log_errors', 1);
 ini_set('error_log', 'MailBoxTest.log');   <<<<<<<<<<<<<<<<<<<<<<<
 
Credo sia un problema di SMTP che nel mio caso è smtp.gmail.com. Se nella voce "Port" inserisco 465 (quello giusto) sta a caricare all'infinito, mentre se ne inserisco uno sbagliato giustamente esce fuori che il messaggio non è stato inviato. Continuo a smanettare.
 
sicuro di aver scaricato l'ultima versione di PHPmailer ?
verifica che nella cartella di PHPmailer ci sia "class.smtp.php"

potrebbe impiegare un poco ad inviare la mail ...
 
Nulla. Non capisco proprio il problema. Ho controllato il file MailBoxTest.log
Solo che io al posto di avere Europe/Rome] ho [Europe/Berlin]. Cambia qualcosa?
 

Discussioni simili