Invio mail che funzioni bene

  • Creatore Discussione Creatore Discussione Ellest
  • Data di inizio Data di inizio

Ellest

Utente Attivo
4 Feb 2013
33
0
0
Ciao a tutti.
Devo fare un sistema di registrazione al sito, con email di conferma.
per mandare la mail, uso:
PHP:
mail($to, $subject, $message, $headers) or die ("ERRORE DURANTE L'INVIO DELL'EMAIL!");
ma le mail non arrivavano mai a chi usava Libero Mail.
inoltre, ora che uso WampServer, da errore:
Codice:
 Warning: mail(): Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in C:\wamp\www\mc\page2.php on line 213
c'è un modo per mandare una mail che funzioni bene, che arrivi subito, e sempre?
 
il codice che ho usato è
PHP:
<head>
</head>

<body>
<?php

$text=$_POST['text'];
$to=$_POST['email'];

include_once('class.phpmailer.php');
 
$mail = new PHPMailer();
 
$mail->From = '[email protected]';
$mail->FromName = 'Ellest';
$mail->Subject = 'Test';
$mail->Body = $text;
 
$mail->AddAddress($to);
 
if($mail->Send())
{
    echo 'mail inviato correttamente';
}
else
{
    echo 'mail non inviato a causa del seguente errore: ' . $mail->ErrorInfo;
}

?>
</body>
</html>
 
allora, ho preso il codice che danno quelli che hanno fatto phpmailer.....
PHP:
<html>
<head>
<title>Documento senza titolo</title>
</head>

<body>
<?php
require '\PHPMailer-master\class.phpmailer.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 = 'password';                           // SMTP password
$mail->SMTPSecure = 'ssl';                            // Enable encryption, 'ssl' also accepted

$mail->From = '[email protected]';
$mail->FromName = 'Mailer';
$mail->AddAddress('[email protected]');  // Add a recipient
$mail->AddReplyTo('[email protected]', 'reply');

$mail->IsHTML(true);                                  // Set email format to HTML

$mail->Subject = 'Here is the subject';
$mail->Body    = 'This is the HTML message body <b>in bold!</b>';
$mail->AltBody = 'This is the body in plain text for non-HTML mail clients';

if(!$mail->Send()) {
   echo 'Message could not be sent.';
   echo 'Mailer Error: ' . $mail->ErrorInfo;
   exit;
}

echo 'Message has been sent';
?>
</body>
</html>

e mi da errore
Codice:
Message could not be sent.Mailer Error: The following From address failed: [email protected] : Called Mail() without being connected
 
ciao
verifica bene qui, devi mettere pa password relativa al provider con dui ti connetti (alice, fastweb, ..... o altro)
$mail->Username = '[email protected]'; // SMTP username
$mail->Password = 'password';
edit
questo se ti colleghi da localem da remoto non mettere l'smtp
 
Ultima modifica:
ok, ora l'ho riscritto meglio, viene così:
L'ho messo sul pastebin per comodità.
LINK
aggiornata la pagina, viene l'errore:
Codice:
SMTP -> ERROR: Failed to connect to server: Unable to find the socket transport "ssl" - did you forget to enable it when you configured PHP? (64668224) 
The following From address failed: [email protected] : Called Mail() without being connected errore mail: The following From address failed: [email protected] : Called Mail() without being connected

perchè?
 
ok, errore stupido, bastava mettere prima l'attivazione dell'smtp, poi il resto...
ora da solo
Codice:
Could not instantiate mail function
 
ciao
verifica i percorsi nella parte, cioè dove si trova la classe
PHP:
require '\PHPMailer-master\class.phpmailer.php';
esempio la versione che ho io la cartella si chiama phpmailler, se sei su linux attento anche alle maiuscole/minuscole.
PHP:
require "phpmailler/class.phpmailer.php";

verifica inoltre che dentro la cartella ci sia anche class.smtp.php che è una classe che phpmailer richiama automaticamente quando si usa l'smtp.
poi usa / non \ poi il primo slahs non dovrebbe esserci o se devi risalire di cartella dovrebbe essere ..\

eventualmente posta tutto quello che hai fatto che ci do un occhio
 
è tutto giusto, ho guardato centinaia di post dappertutto cercando soluzioni, ma non ho trovato nulla di utile...
http://pastebin.com/dsd0reqm

una cosa strana che noto ora è che se, in un nuovo file, metto:
PHP:
<html><head></head><body>
<?php
mail("[email protected]", "Test Subject", "Test Message"); 
?>
</body>
</html>

mi da errore:
Codice:
Warning: mail(): Failed to connect to mailserver at &quot;localhost&quot; port 25, verify your &quot;SMTP&quot; and &quot;smtp_port&quot; setting in php.ini or use ini_set() in C:\wamp\www\mc\test.php on line 3

ma se io vado in php.ini, i settaggi son corretti!
Codice:
SMTP = smtp.gmail.com
smtp_port = 465
 
Ciao.
Ecco qua l'ho provato e funziona.
Ti basterà creare il db come indicato nello script e il gioco è fatto.
Ovviamente ti consiglio una connessione al db esterna. (config.php)
PHP:
<?PHP 
    $dbhost = 'localhost'; 
    $dbuser = 'user'; 
    $dbpass = 'pass'; 
    $dbname = 'nome'; 
    
    $connessione = mysql_connect("localhost","user","pass") 
    or die("Impossibile connettersi al server host");
    mysql_select_db(name, $connessione) 
    or die ("Impossibile selezionare il database.");
    
    $User_utente=$_POST['user_utente'];
    $Password_utente=MD5($_POST['password_utente']);
    $Nome=$_POST['nome'];
    $Cognome=$_POST['cognome'];
    $Indirizzo=$_POST['indirizzo'];
    $Citta=$_POST['luogo'];
    $Provincia=$_POST['provincia'];
    $Cap=$_POST['cap'];
    $Telefono=$_POST['telefono'];
    $Fax=$_POST['fax'];
    $Cell=$_POST['cell'];
    $Mail=$_POST['mail'];
    $Cfpi=$_POST['cfpi'];
  
   if(mysql_query($query)){
     
    $to = $Mail; 
    $subject = "Registrazione Tuo Sito"; 
    $USER="\n User :";
    $PASSWORD="\n Password :";
    $MAIL="\n E.mail :";
    $server="Tuo Sito";
    $messaggio = $messaggio;
    $messaggio .= "\n La sua registrazione e' stata completata con successo!
    \n La ringraziamo per essersi registrato
    \n Le ricordiamo i dati della sua registrazione:";
    $messaggio .= "\n\n-------------------------------------\n"; 
    $messaggio .= "\n E.mail inviata da: www.tuosito.it
    $USER $User_utente
    $PASSWORD $Password_utente
    $MAIL $Mail "; 
    $headers = "From: ".$server ." <" .$Mail.">\n"; 
    if(@mail($to, $subject, $messaggio, $headers)){ 
       echo "E.mail Inviata";}
     }else{
       echo "errore";
    } 
    mysql_close($connessione);

?>
 
Ultima modifica:
Scusa mi sono accorto che mancava la query.
Ora funziona.

PHP:
 <?PHP 
    $dbhost = 'localhost'; 
    $dbuser = 'user'; 
    $dbpass = 'pass'; 
    $dbname = 'nome'; 
    
    $connessione = mysql_connect("localhost","user","pass") 
    or die("Impossibile connettersi al server host");
    mysql_select_db(name, $connessione) 
    or die ("Impossibile selezionare il database.");
    
    $User_utente=$_POST['user_utente'];
    $Password_utente=MD5($_POST['password_utente']);
    $Nome=$_POST['nome'];
    $Cognome=$_POST['cognome'];
    $Indirizzo=$_POST['indirizzo'];
    $Citta=$_POST['luogo'];
    $Provincia=$_POST['provincia'];
    $Cap=$_POST['cap'];
    $Telefono=$_POST['telefono'];
    $Fax=$_POST['fax'];
    $Cell=$_POST['cell'];
    $Mail=$_POST['mail'];
    $Cfpi=$_POST['cfpi'];
	  
    $query = "INSERT INTO iscritti (user_utente, 
    password_utente, nome, cognome,indirizzo, 
    luogo, provincia,cap,telefono,fax,cell,mail,cfpi)
    VALUES ('$User_utente','$Password_utente','$Nome', 
    '$Cognome','$Indirizzo ', '$Citta', '$Provincia', 
    '$Cap', '$Telefono', '$Fax' , '$Cell', '$Mail','$Cfpi')";
  
   if(mysql_query($query)){
    $to = $Mail; 
    $subject = "Registrazione Tuo Sito"; 
    $USER="\n User :";
    $PASSWORD="\n Password :";
    $MAIL="\n E.mail :";
    $server="Tuo Sito";
    $messaggio = $messaggio;
    $messaggio .= "\n La sua registrazione e' stata completata!
    \n La ringraziamo per essersi registrato
    \n Le ricordiamo i dati della sua registrazione:";
    $messaggio .= "\n\n-------------------------------------\n"; 
    $messaggio .= "\n E.mail inviata da: www.tuosito.it
    $USER $User_utente
    $PASSWORD $Password_utente
    $MAIL $Mail "; 
    $headers = "From: ".$server ." <" .$Mail.">\n"; 
    if(@mail($to, $subject, $messaggio, $headers)){ 
       echo "E.mail Inviata";}
     }else{
       echo "errore";
    } 
    mysql_close($connessione);

?>
 
mmmmh...
da quello che capisco è semplicemente un form per inviare le mail con la funzione mail...
prima ho fatto un sito così, ma a quelli con libero mail non arrivava, quindi ho deciso di usare phpMailer, che fa l'autenticazione smtp, ma non funziona, è questo il problema che non riesco a risolvere....
 
Ciao, in tal caso usa il validissimo metodo e segui il validissimo tutorial indicato da Borgo_italia:
ciao
abbamdoma la funzione mail() e usa la classe phpmauler (o simile)
https://www.mrw.it/php/artico...ailer_631.html
funzione bene, per il prestp non dipende dagli script
poi per inviare da locale devi istanziare le classe (se cerci fra le discussioni trovi come si fa)
Con questa classe potrai inviare anche mail in formato html e non solo.
 

Discussioni simili