problemi invio email con phpmailer

paperinik4

Utente Attivo
29 Mag 2011
1.811
0
36
Roma
www.ricetteagogo.it
Salve a tutti,

Qualcghe anno fa qualcuno mi risolse il problme aper l'invio email con phpmailer in quanto lavoro su nun mio server chiamato nas. Meglio forse conosciuto come synology. Detto questo oggi ho di nuovo lo stesso problema, ossia non riesco a far partire l'email. Ho copiato ed incollato il codice che andava in precedenza scaricando la versione nuova di phpmailr ma ndada mi da errore. Innanzi tutto vi allego la struttura di com'è inserito la cartella. E questo è l'errore che mi da:

Fatal error: Class 'SMTP' not found in /volume1/web/utenti/prova2/phpmailer/class.phpmailer.php on line 1443

Questo è lo spezzone di codice relativo all'invio email:

<?php
// Parte riguardante l'invio email

//require_once ("/class.phpmailler.php");

require_once 'phpmailer/class.phpmailer.php';
//phpmailer
$mail = new PHPMailer();
$mail->IsSMTP(); // telling the class to use SMTP

#Qui c'è il debug dell'smtp, se metti un commento non stampa diavolerie, ma è utile in fase di test per capire la natura di qualche errore
$mail->SMTPDebug = "2"; // enables SMTP debug information (for testing)
// 1 = errors and messages
// 2 = messages only


$mail->SMTPAuth = "true"; // enable SMTP authentication
$mail->SMTPSecure = "ssl"; // sets the prefix to the servier
$mail->Host = "smtp.gmail.com"; // sets GMAIL as the SMTP server
$mail->Port = "465"; // set the SMTP port for the GMAIL server


$mail->Username = "xxxxxx@gmail.com"; // GMAIL username


$mail->Password = "xxxxx"; // GMAIL password

$mail->SetFrom("no_replay@myserver.org");
$mail->Subject = "Attivazione account.";


//$mail->AltBody = "To view the message, please use an HTML compatible email viewer!"; // optional, comment out and test

//$mail->AltBody = "Iscrizione avvenuta correttamente. "; // optional, comment out and test

$mail->CharSet = "UTF-8"; //Content-Type" content="text/html;

$mail->MsgHTML('Grazie di esserti iscritto. <a href="http://utenti/prova2.php?email=' . $_POST['email']
.'">clicca qui per attivare</a></b>'." "."per attviare l'account. Grazie.");


$mail->AddAddress($_POST['email']);

if(!$mail->Send()) {
echo "Errore nell'inviare l'email: " . $mail->ErrorInfo;
} else {
echo "Messaggio inviatro correttamente!";
echo "<h1> <br>Utente registrato correttamente. E' stata inviata un'email di conferma per attivare l'account. Controllare l'email, prima di accedere.</h1>";
}
?>
<input type="submit" name="reg" value="Invio dati" id="submit" class="centering" disabled="true" />
</form>
</body>
</html>

Dove sbaglio ???? Ricordatevi che lavoro su un server nas-synology
 

Allegati

  • Struttura dove è inserita la cartella phpmailer.PNG
    Struttura dove è inserita la cartella phpmailer.PNG
    3,6 KB · Visite: 512
ciao
verifica che nella cartella phpmailler ci sia il file class.smtp.php, dovresti averlo scaricato assime a class.phpmailler.php, oppure non inviare, se puoi, tramite smtp,
la class.phpmailler.php se istanziata per l'invio smtp cerca il file class.smtp.php e se non lo trova ti da quell'errore
 
Ciao Borgo,

Grazie della risposta. La classe c'è ora t'invio la struttura completa di phpmailer. Eccola qua, quindi come mid ebbo comportare ???? Ossia che correzioni debbo apportare al codice per farlo andare ???
 

Allegati

  • STruttura interna alla cartella phpmailer.PNG
    STruttura interna alla cartella phpmailer.PNG
    9,9 KB · Visite: 555
ciao
sei sicuro del percorso con cui chiami la classe?
in quello che hai mandato non vedo la cartella phpmailler
tanto di più non so dirti anche perche uso una vecchia versione e, quando le cose funzionano, uso il principio "mai lasciare la strada vecchia per la nuova"
 
In genere lo adopero pure io lo stesso principio ma quasi quasi rimetto quello vecchio. La cartella c'è di questo ne sono certo. Strano che dalla foto che ti ho inviato non si veda. Ma a questo punto rimetto il phpmailer vecchio e vediamo se mi continua dare problemi. Un consiglio che rientra sempre nella discussione non dovrei andare troppo ot anzi direi quasi per niente. Io ho fatto che in fase di registrazione l'utente sia abilitato direttamente l'account senza invio email. Ora ci tenevo ad inviare ugualmente l'email in quanto nell'email ci sarebbe il link per accedere al proprio account. Eliminando l'invio email se non ci dovessi riuscire, non ricordo il comando refresh per reindirizzare la pagina direttamente al login com'era. Io ho questo esempio qua:

echo "<meta http-equiv='Refresh' content='3; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";

però questo mi reindirizza alla stess apagina per reindirizzarla ad un'altra pagina qual'è la sintassi giusta ???? Provo ad indovinare ma non sono sicuro di ciò che scrivo:

echo "<meta http-equiv='Refresh' content='3; URL="www.login.php"'>";

E' sufficiente questo ???? Grazie.
 
Si era il secondo che mi mancava quello assoluto. Ti faccio sapere se con quello vecchi va o meno. Ho provato ora con il phpmailer vecchio e mi da i seguenti errori:

1) errore:

Invalid address: You must provide at least one recipient email address. Errore nell'inviare l'email: You must provide at least one recipient email address.

2) errore:

SMTP -> ERROR: Failed to connect to server: Network is unreachable (101)
SMTP Error: Could not connect to SMTP host. Errore nell'inviare l'email: SMTP Error: Could not connect to SMTP host.

Sembra come se non avessi compilato i campi, ma non capisco il perchè i campi sono stati compilati correttamente come nel vecchio esempio. Boh ????
 
ciao
ecco
PHP:
<?php
//...
echo "<meta http-equiv='Refresh' content='3; URL=http://www.tuo_sito/cartella/pagina.php'>";
//...
?>
fai attenzione quando metti gli apici
 
ciao
da quello che si capisce
errore 1)
verifica di aver scritto giusto l'indirizzo del destinatario dell'email, nel tuo script di invio da qualche parte dovresti avere qualcosa del genere
PHP:
<?php
//.....
$mail->AddAddress('tua_email@tuo_sito.it');//indirizzo del destinatario
//....
?>
io ho messo $mail ma dipende da come tu hai istanziato new PHPmailer()
esempio
PHP:
<?php
//...
$pinco_pallo=new PHPmailer();
//...
?>
errore 2)
verifica le varie pass per l'smtp o toglilo, io per esempio nel mio sito non uso l'smtp
 
ciao
per inviare smtp da qualche parte dovresti avere
PHP:
<?php
//...
$mail->IsSMTP();  // send via SMTP
$mail->Host     = "smtp.tuo_sito.it"; // SMTP servers
$mail->SMTPAuth = true;     // turn on SMTP authentication
$mail->Username = "pinco.pallo";  // SMTP username
$mail->Password = "xyz"; // SMTP password
//....
?>
o cancelli quelle righe o meglio le commenti
PHP:
<?php
//...
/*$mail->IsSMTP();  // send via SMTP
$mail->Host     = "smtp.tuo_sito.it"; // SMTP servers
$mail->SMTPAuth = true;     // turn on SMTP authentication
$mail->Username = "pinco.pallo";  // SMTP username
$mail->Password = "xyz"; // SMTP password*/
//....
?>
fai delle prove commentandole
 
Ho fatto le prove da te indicatomi ma nisba. Questo è lo spezzone del codice:

<?php
// Parte riguardante l'invio email

//require_once ("/class.phpmailler.php");

require_once 'phpmailer/class.phpmailer.php';

//phpmailer
$mail = new PHPMailer();
$mail->IsSMTP(); // telling the class to use SMTP

#Qui c'è il debug dell'smtp, se metti un commento non stampa diavolerie, ma è utile in fase di test per capire la natura di qualche errore
//$mail->SMTPDebug = "1"; // enables SMTP debug information (for testing)
// 1 = errors and messages
// 2 = messages only


$mail->IsSMTP(); // send via SMTP
$mail->Host = "smtp.gmail.com"; // SMTP servers
$mail->SMTPAuth = true; // turn on SMTP authentication
$mail->Username = "xxxx@gmail.com"; // SMTP username
$mail->Password = "xxxxx"; // SMTP password

$mail->Subject = "Attivazione account.";


$mail->AltBody = "To view the message, please use an HTML compatible email viewer!"; // optional, comment out and test

$mail->AltBody = "Iscrizione avvenuta correttamente. "; // optional, comment out and test

$mail->CharSet = "UTF-8"; //Content-Type" content="text/html;

$mail->MsgHTML('Grazie di esserti iscritto. <a href="http://utenti/prova2.php?email=' . $_POST['email']
.'">clicca qui per attivare</a></b>'." "."per attviare l'account. Grazie.");


$mail->AddAddress($_POST['email']);

if(!$mail->Send()) {
echo "Errore nell'inviare l'email: " . $mail->ErrorInfo;
} else {
echo "Messaggio inviatro correttamente!";
echo "<h1> <br>Utente registrato correttamente. E' stata inviata un'email di conferma per attivare l'account. Controllare l'email, prima di accedere.</h1>";
}
?>

l'smtp di gmail è giusta come è gisto lo username e la password. Ti ricordo che lavoro su un emulatore di pagine web che tutto e per tutto come se fosse un sito. Solo che è un server.ossia un na-synology. Questo è l'errore che compare:

Invalid address: You must provide at least one recipient email address. Errore nell'inviare l'email: You must provide at least one recipient email address.
 
Abbiamo fatto un piccolo passo avanti che prima non appariva. Questi sono i messaggi:

Inserimento avvenuto correttamente

SMTP Error: Could not connect to SMTP host. Errore nell'inviare l'email: SMTP Error: Could not connect to SMTP host.

Utente registrato correttamente. E' stata inviata un'email di conferma per attivare l'account. Controllare l'email, prima di accedere.

Il messaggio che appare in più adesso è il seguente:

Utente registrato correttamente. E' stata inviata un'email di conferma per attivare l'account. Controllare l'email, prima di accedere.

Il codice è sempre lo stesso:

// Parte riguardante l'invio email

//require_once ("/class.phpmailler.php");

require_once 'phpmailer/class.phpmailer.php';
require_once 'phpmailer/class.smtp.php';
//phpmailer
$mail = new PHPMailer();
$mail->IsSMTP(); // telling the class to use SMTP

#Qui c'è il debug dell'smtp, se metti un commento non stampa diavolerie, ma è utile in fase di test per capire la natura di qualche errore
//$mail->SMTPDebug = "2"; // enables SMTP debug information (for testing)
// 1 = errors and messages
// 2 = messages only


$mail->SMTPAuth = "true"; // enable SMTP authentication
$mail->SMTPSecure = "ssl"; // sets the prefix to the servier
$mail->Host = "smtp.gmail.com"; // sets GMAIL as the SMTP server
$mail->Port = "465"; // set the SMTP port for the GMAIL server


$mail->Username = "xxx4@gmail.com"; // GMAIL username


$mail->Password = "xxx"; // GMAIL password

$mail->SetFrom("no_replay@myserver.org");
$mail->Subject = "Attivazione account.";

$mail->CharSet = "UTF-8"; //Content-Type" content="text/html;

$mail->MsgHTML('Grazie di esserti iscritto. <a href="http://utenti/MegaLaboratorio/attivautente.php?email=' . $_POST['email']
.'">clicca qui per attivare</a></b>'." "."per attviare l'account. Grazie.");


$mail->AddAddress($_POST['email']);

if(!$mail->Send()) {
echo "Errore nell'inviare l'email: " . $mail->ErrorInfo;
} else {
echo "Messaggio inviatro correttamente!";
}
 

Discussioni simili