Problema php mailer e smtp gmail

  • Creatore Discussione Creatore Discussione lorisllm
  • Data di inizio Data di inizio

lorisllm

Nuovo Utente
4 Feb 2015
14
0
0
Ciao a tutti è da un po' che ho un errore quando si va ad inviare la mail tramite form su mio sito, l'errore è di connessione smtp...
il form consente di scrivermi attraverso il sito, e di conseguenza a me arrivano 2 mail su due account (libero e gmail) e una mail va a chi ha scritto il messaggio però avviene l'errore smtp e non invia le mail..
ho provato con ssl 465 e con tls 587 ma nulla...

Cosa sto sbagliando?
Grazie...
Sotto ho riportato il codice

PHP:
<?php

//Recuperiamo tutte le variabili
	$email = $_POST['email'];
	$name = $_POST['name'];
	$indirizzo = $_POST['indirizzo'];
	$citta = $_POST['citta'];
	$text = $_POST['messaggio'];
	$ip = $_SERVER['REMOTE_ADDR'];
	$subjectm = "".$name." vuole un informazione...";

$ora = date ("H:i:s"); 
$data = date ("d/m/Y");

//Creazione del mesaggio da inviare a me
$message = "Hai ricevuto una e-mail da: <strong>".$name."</strong>, <strong>".$email."</strong> il $data alle $ora.<br /><br />";
$message .= "Indirizzo: <strong>".$indirizzo."</strong><br /><br />";
$message .= "Città: <strong>".$citta."</strong><br /><br />";
$message .= "Messaggio: <strong><br />".$text."</strong><br /><br />";
$message .= "IP: ".$ip."<br />";

//mittente 
$body = "<img src=\"http://www.luisemotorsport.it/grafica/header-2.jpg\" border=\"0\" height=\"100\" width=\"700\">\n\n<br><br>";
$body .= 'Grazie <b>'.$name.'</b> per averci contattato, riceverai a più presto risposta<br /><br />';
$body .= "<strong>Torna presto su >>>>>>>";
$body .=  '<a href="luisemotorsport.it">&gt;&gt;&gt;LUISEMOTORSPORT:IT&lt;&lt;&lt;</a></strong>';
$body .=  "<strong><<<<<<<</strong>";

require 'PHPMailerAutoload.php';
 
$mail = new PHPMailer;
$mail2 = new PHPMailer;

$mail->isSMTP();                                      // Set mailer to use SMTP
$mail2->isSMTP();                                      // Set mailer to use SMTP
//$mail->SMTPDebug = 0;  // debug: 1 = solo messaggi, 2 = errori e messaggi
$mail->Host = 'smtp.gmail.com';                       // Specify main and backup server
$mail->SMTPAuth = true;                               // Enable SMTP authentication
$mail->Username = '[email protected]';                   // SMTP username
$mail->Password = 'pw1';               // SMTP password
$mail->SMTPSecure = 'ssl';                            // Enable encryption, 'ssl' also accepted
$mail->Port = 465;                                    //Set the SMTP port number - 587 for authenticated TLS

$mail2->Host = 'smtp.gmail.com';                       // Specify main and backup server
$mail2->SMTPAuth = true;                               // Enable SMTP authentication
$mail2->Username = '[email protected]';                   // SMTP username
$mail2->Password = 'pw2';               // SMTP password
$mail2->SMTPSecure = 'ssl';                            // Enable encryption, 'ssl' also accepted
$mail2->Port = 465;                                    //Set the SMTP port number - 587 for authenticated TLS

$mail->setFrom('[email protected]', 'Luisemotorsport.it by Loris Luise');     //Set who the message is to be sent from
//$mail->addReplyTo('[email protected]', 'Luisemotorsport.it by Loris Luise');  //Set an alternative reply-to address
$mail->addAddress($email);  // Add a recipient
$mail->WordWrap = 50;                                 // Set word wrap to 50 characters
$mail->isHTML(true);                                  // Set email format to HTML
$mail->Subject = 'Modulo Contattami dal sito Luisemotorsport';
$mail->Body  =($body);
$mail->AltBody = 'Grazie '.$name.' per averci contattato, riceverai a più presto risposta';

$mail2->setFrom('[email protected]');     //Set who the message is to be sent from
$mail->addReplyTo($email, $name);  //Set an alternative reply-to address
$mail2->addAddress('[email protected]');  // Add a recipient
$mail2->addAddress('[email protected]');  // Add a recipient
$mail2->WordWrap = 50;                                 // Set word wrap to 50 characters
$mail2->isHTML(true);                                  // Set email format to HTML
$mail2->Subject = ($subjectm);
$mail2->Body  =($message);
 
    if(!$mail->Send()) {
        $error = 'errore mail: '.$mail->ErrorInfo;
	echo "<p>Ci sono stati degli errori nell'invio della e-mail.</p>";
	echo $error;
    } else {
		   if(!$mail2->Send()) {
        $error = 'errore mail: '.$mail2->ErrorInfo;
	echo "<p>Ci sono stati degli errori nell'invio della e-mail.</p>";
	echo $error;
	} else {
        $error = 'Messaggio inviato!';
			echo "<p>Messaggio inviato con successo</p>";
	
       }
    }

?>
 
consentimi prima una domanda, perché instanzi due volte phpmailer ?
mi sembra che tu lo faccia per inviare mail separate con la finalità di non far vedere la lista degli utenti
ma se ciò che penso è vero, puoi usare solo una istanza
PHP:
// ----- impostazione dei destinatari
  $mail->AddAddress($eM_TO1, $eM_TOname1);				// destinatario 1
  if(!empty($eM_TO2)) $mail->AddAddress($eM_TO2, $eM_TOname2);		// destinatario 2
  if(!empty($eM_CC1)) $mail->AddCC($eM_CC1, $eM_CCname1);		// copia conoscenza
  if(!empty($eM_BCC1)) $mail->AddBCC($eM_BCC1, $eM_BCCname1);		// copia conoscenza nascosta
se invece sei obbligato a mantenerne due, separale in modo da capire quale da errore
ciao
Marino
 
consentimi prima una domanda, perché instanzi due volte phpmailer ?
mi sembra che tu lo faccia per inviare mail separate con la finalità di non far vedere la lista degli utenti
ma se ciò che penso è vero, puoi usare solo una istanza
PHP:
// ----- impostazione dei destinatari
  $mail->AddAddress($eM_TO1, $eM_TOname1);				// destinatario 1
  if(!empty($eM_TO2)) $mail->AddAddress($eM_TO2, $eM_TOname2);		// destinatario 2
  if(!empty($eM_CC1)) $mail->AddCC($eM_CC1, $eM_CCname1);		// copia conoscenza
  if(!empty($eM_BCC1)) $mail->AddBCC($eM_BCC1, $eM_BCCname1);		// copia conoscenza nascosta
se invece sei obbligato a mantenerne due, separale in modo da capire quale da errore
ciao
Marino

Ciao grazie della risposta....
allora per semplificare le cose diciamo che per ora voglio mandare solamente un email al mittente del messaggio scritto sul mio sito...ecco il codice...ho provato ma sempre SMTP connect() failed..
PHP:
<?php

//Recuperiamo tutte le variabili
	$email = $_POST['email'];
	$name = $_POST['name'];
	$indirizzo = $_POST['indirizzo'];
	$citta = $_POST['citta'];
	$text = $_POST['messaggio'];
	$ip = $_SERVER['REMOTE_ADDR'];
	$subjectm = "".$name." vuole un informazione...";

$ora = date ("H:i:s"); 
$data = date ("d/m/Y");

//messaggio per mittente 
$body = "<img src=\"http://www.luisemotorsport.it/grafica/header-2.jpg\" border=\"0\" height=\"100\" width=\"700\">\n\n<br><br>";
$body .= 'Grazie <b>'.$name.'</b> per averci contattato, riceverai a più presto risposta<br /><br />';
$body .= "<strong>Torna presto su >>>>>>>";
$body .=  '<a href="luisemotorsport.it">&gt;&gt;&gt;LUISEMOTORSPORT:IT&lt;&lt;&lt;</a></strong>';
$body .=  "<strong><<<<<<<</strong>";

require 'PHPMailerAutoload.php';
 
$mail = new PHPMailer;

$mail->isSMTP();                                      // Set mailer to use SMTP
$mail->Host = 'smtp.gmail.com';                       // Specify main and backup server
$mail->SMTPAuth = true;                               // Enable SMTP authentication
$mail->Username = '[email protected]';                   // SMTP username
$mail->Password = 'pw';               // SMTP password
$mail->SMTPSecure = 'ssl';                            // Enable encryption, 'ssl' also accepted
$mail->Port = 465;                                    //Set the SMTP port number - 587 for authenticated TLS

$mail->setFrom('[email protected]', 'Luisemotorsport.it by Loris Luise');     //Set who the message is to be sent from
$mail->addAddress($email);  // Add a recipient
$mail->WordWrap = 50;                                 // Set word wrap to 50 characters
$mail->isHTML(true);                                  // Set email format to HTML
$mail->Subject = 'Modulo Contattami dal sito Luisemotorsport';
$mail->Body  =($body);
$mail->AltBody = 'Grazie '.$name.' per averci contattato, riceverai a più presto risposta';

$mail->addReplyTo($email, $name);  //Set an alternative reply-to address

    if(!$mail->Send()) {
        $error = 'errore mail: '.$mail->ErrorInfo;
	echo "<p>Ci sono stati degli errori nell'invio della e-mail.</p>";
	echo $error;
    } 
	else {
        $error = 'Messaggio inviato!';
			echo "<p>Messaggio inviato con successo</p>";
       }
?>
 
Ultima modifica:
nel tuo script, ho sostituito $_POST con valori fissi, ho inserito i miei parametri per "gmail" ed ho avuto risultato positivo
Cattura.PNG
accertati che,
"$mail->Username" e "$mail->Password" siano scritti correttamente,
"$mail->From" sia uguale a "$mail->Username"
verifica con var_dump che le variabili abbiano valori corretti prima dell'invio della mail
ciao
Marino
 
Ciao...ho provato ad utlizzare le istruzioni
var_dump($mail->Username);
var_dump($mail->From);
e mi ritornano effettivamente la email corretta...
ora ho provato ad utilizzare anche una mail libero cambiando i rispettivi valori ma restituisce sempre l'errore....ora mi chiedo non può dipendere da dove è ospitato il dominio?
perchè fino ad un mese fa' tutto funzionava correttamente e poi nel server dove mi ospita il sito c'è stato un cambiamento della piattaforma cloud che ha migrato da una versione precedente a una versione basata su server Windows Server 2012....
 
bisognerebbe sapere quale versione di php e phpmailer erano presenti nella situazione precedente e lo sono nell'attuale
sarebbe necessario confrontare anche le due versioni di php.ini
ma non credo si possa fare,
se non lo hai ancora fatto, attiva il debug si SMTP indirizzando l'output in maniera da poterlo controllare
PHP:
  $mail->SMTPDebug = 4;			// attiva log dell'invio, ELIMINARE quando si mette in "produzione"
  $mail->Debugoutput = "html";		// visualizza il dialogo SMTP, SOSTITUIRE quando si mette in "produzione"
  // $mail->Debugoutput = "error_log";	// scrive messaggi di errore nel log di PHP, si può lasciare sempre
poi se puoi, posta il messaggio di errore
ciao
Marino
 
ecco cosa mi restituisce:

Connection: opening to ssl://smtp.gmail.com:465, t=300, opt=array ()SMTP ERROR:Failed to connect to server: An attempt was made to access a socket in a way forbidden by its access permissions. (10013)SMTP connect() failed.
 
per cortesia puoi provare questo script molto semplice,
sistema solo dove trovi "CAMBIAMI", senza modificare altro
poi dimmi l'effetto che fa ...
PHP:
<?php

$eM_TO1		= "[email protected]";	// email del destinatario
$eM_TOname1	= "CAMBIAMI";			// nome del destinatario

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

require_once '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   = "[email protected]";
$mail->Password   = "CAMBIAMI";

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

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

$mail->Subject = " - host : ".$mail->Host." - from : ".$mail->Username." - 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 />";
?>
ciao
Marino
 
lo script genera il file MailBoxTest.log,
PHP:
ini_set('error_log', 'MailBoxTest.log');
puoi controllare al suo interno dove segnala l'errore ?
ciao
Marino
 
eccolo:

[10-Sep-2015 22:06:19 Europe/Rome] Connection: opening to ssl://smtp.gmail.com:465, t=300, opt=array (
)
[10-Sep-2015 22:06:19 Europe/Rome] SMTP ERROR: Failed to connect to server: An attempt was made to access a socket in a way forbidden by its access permissions.
(10013)
[10-Sep-2015 22:06:19 Europe/Rome] SMTP connect() failed.

sembra come se ci fosse la password sbagliata...ma è corretta...

Grazie per l'aiuto...
 
lo userid o password errati restituiscono un errore diverso
$str is "535-5.7.8 Username and Password not accepted
sono più propenso a pensare che il firewall blocchi la porta 465
puoi provare lo script su un altro computer con php e phpmailer ?
prova anche a collegarti online a gmail con l'utente che usi per la connessione nello script
e da ultimo verifica che il destinatario (libero.it) sia attivo, collegandoti online
ciao
Marino
 
An ok...
allora il file lo provo direttamente sul mio sito caricandolo ogni volta...gli indirizzi sono corretti e perfettamente funzionanti..
Ora ho fatto un altra prova ho provato in locale con questo codice modificato sul cosice che mi hai mandato..

PHP:
$mail->isSMTP(); // Set mailer to use SMTP
$mail->Host = 'localhost'; // Specify main and backup server
$mail->SMTPAuth = false; // Enable SMTP authentication
$mail->Username = ''; // SMTP username
$mail->Password = ''; // SMTP password
$mail->SMTPSecure = 'ssl'; // Enable encryption, 'ssl' also accepted
$mail->Port = 25; //Set the SMTP port number - 587 for authenticated TLS

$mail->setFrom('[email protected]', 'Luisemotorsport.it by Loris Luise'); //Set who the message is to be sent from

Con questo mi da messaggio inviato correttamente ma all'indirizzo di libero non vedo alcun messaggio...

Boh:crying::crying::crying:
 
questo significa che nel file php.ini è stato configurato il localhost nella sezione mail
(per default non è specificato e richiamandolo da errore, confermato dalla prova sul mio pc)

prova ad inviare la mail ad un indirizzo diverso da libero

poi all'inizio dello script che usi per le prove, metti
PHP:
echo phpinfo();
dovrebbe listarti il file php.ini, prova a guardare la sezione "core" trovi la configurazione di localhost
ciao
Marino
 
questo significa che nel file php.ini è stato configurato il localhost nella sezione mail
(per default non è specificato e richiamandolo da errore, confermato dalla prova sul mio pc)

prova ad inviare la mail ad un indirizzo diverso da libero

poi all'inizio dello script che usi per le prove, metti
PHP:
echo phpinfo();
dovrebbe listarti il file php.ini, prova a guardare la sezione "core" trovi la configurazione di localhost
ciao
Marino
Si effettivamente è impostato localhost
Vedi l'allegato 2685



C'è una qualche soluzione per questa cosa?

Grazie ancora...

Loris
 
sono più propenso a pensare che il firewall blocchi la porta 465
prova anche a collegarti online a gmail con l'utente che usi per la connessione nello script
e da ultimo verifica che il destinatario (libero.it) sia attivo, collegandoti online

hai controllato la porta del firewall ?
hai provato a collegarti online ai due servizi inviando mail ?
quali risultati ?
ciao
Marino
 

Discussioni simili