Non riesco più ad inviare email con il php

paperinik4

Utente Attivo
29 Mag 2011
1.812
0
36
Roma
www.ricetteagogo.it
Ciao Borgo, marcomg, cricric, longo8 e tutto lo staff,

Oggi dopo tanto tempo ho installato il norton internet security 2012. Con questo prodotto mi trovo abbastanza ben. Ho riprovato a fare una nuova iscrizione al mio sito per vedere di modificare il messaggio da inviare alle persone che s'iscrivono. E come per magia nera, non mi manda l'email. Mi da il seguente errore che ora posto:

PHP:
You must provide at least one recipient email address.
Errore d'invio email:
You must provide at least one recipient email address.

Utente registrato correttamente. E' stata inviata un'email di conferma per attivare l'account
Porebbe essere il norton che mi blocca gli spam ????? E se è si mi sapete consigliare come dirgli al norton di non rompere con gli spam ????

Posto anche la parte riguardante all'invio dell'email, che prima dell'installazione del norton inviava regolarmente. Eccola qua, c'è solo la modifica del messsaggio, potrebbe essere anche quella ????


Il codice è il seguente:

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


$mail->Host       = "mail.libero.it";

#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   = "xxxxxxxxx@gmail.com";  // GMAIL username


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

 $mail->SetFrom($_POST['email']);
 
$mail->Subject    = "Attivazione account al sito.";


$mail->AltBody    = "Ti ringraziamo per la tua iscrizione. La tua username è: ".$email." La tua password è: ".$password."<br> Per confemare l'attivazione del tuo account, <br>"." "." vai alla pagina http://utenti/fabio/MegaLaboratorio/conferma.php"." "." Grazie."; // optional, comment out and test


$mail->MsgHTML('Questa è una prova in html <b>prova invio email</b>');


if(!$mail->Send()) {
  echo "<h1> <center> Errore d'invio email: </h1> </center>" . $mail->ErrorInfo;
} else {
  echo " <h1> <center> Email inviata !!!! </h1> </center>";
}



echo "<h1> <br>Utente registrato correttamente. E' stata inviata un'email di conferma per attivare l'account</h1>";
//e torno al form 
//header("Refresh: 2;URL=paginaris.php");     
//header("Refresh: 8;URL=login.php");          
}

}
?>

//Ho dovuto disabilitare questa parte, perchè sennò da locale non mi funzionava,a desso sono in remoto ad anzio, l'ho provata anche abilitata, ma niente da fare://

//$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";
Spero in un vostro aiuto grazie.
 
Ultima modifica:

paperinik4

Utente Attivo
29 Mag 2011
1.812
0
36
Roma
www.ricetteagogo.it
Ciao

Ciao a tutti,

Risolto il problema. Sono un gran pirla, scusatemi. Avevo sbagliato la prova del modulo d'isvcrizione: ossia lavoravo su iscreizione.php, quello che mi dava sempre errore e non su iscrizione2.php, quello che invece funziona alla grande (il povero norton non c'entrava assolutamente niente). Mea culpa. Solo che o un piccolo problema ora. Ho provato a fare questa modifica al messaggio:

PHP:
$mail->MsgHTML('Questa è una prova in html <b>prova invio email. http://pincopallino/pallino/MegaLaboratorio/conferma.php</b>');
Ma non gli piace. Come debbo fare per dargli il link e cliccarci sopra per la conferma e attivazione dell'account ???? Mi potete dare come al solito una mano per favore ???? Grazie.
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
ciao
i link si scrivono cosi
HTML:
<a href="http://pincopallino/pallino/MegaLaboratorio/conferma.php">clicca qui</a>
 

paperinik4

Utente Attivo
29 Mag 2011
1.812
0
36
Roma
www.ricetteagogo.it
Ciao

Ma che cojone che sono, sciusa cricric, ecco perchè non me li accettava. E lo posso mettere tranquillamente nel body del messaggio ?? Mi sono perso in un biccchier d'acqua. Ogni tanto il cervello mio va in tilt come i pc.
 

paperinik4

Utente Attivo
29 Mag 2011
1.812
0
36
Roma
www.ricetteagogo.it
Ciao

Ciao Cricric e a tutto lo staff,


Io la stringa l'ho modificata in questa maniera:

PHP:
$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/pinco/MegaLaboratorio/conferma.php">clicca qui per attivare</a></b>'." "."Per attviare l'account. Grazie.");



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

if(!$mail->Send()) {
  echo "Mailer Error: " . $mail->ErrorInfo;
} else {
  echo "Message sent!";
}



echo "<h1> <br>Utente registrato correttamente. E' stata inviata un'email di conferma per attivare l'account</h1>";
//e torno al form 
//header("Refresh: 2;URL=paginaris.php");     
header("Refresh: 6;URL=login.php");          
}
}
?>
Però mi restituisce il seguente errore:

Catchable fatal error: Object of class PHPMailer could not be converted to string in /volume1/web/utenti/pinco/MegaLaboratorio/iscrizione2.php on line 144

La riga 144, dovrebbe essere la seguente:

PHP:
$$mail->AltBody    = "Iscrizione avvenuta correttamente. "; // optional, comment out and test
Risolto problema alla grande come un cojone provetto, non mi ero reso conto ch emi trascinavo il simbolo"$$" doppio all'inizio e quindi mi dava noie. Grazie a tutti. Il post si può chidere.

Una sola cosa, avevo dato la possibilità di dirmi l'accesso al sito con data e ora. Ho dovuto disinstallare e cancellare i cookie ed ora mi dice sempre che al sito non mi sono mai connesso. Come mai ??? In più mi da il seguente errore:

Warning: date() expects at least 1 parameter, 0 given in /volume1/web/utenti/fabio/MegaLaboratorio/paginaris.php on line 14

La linea 14 dovrebbe essere la seguente:

PHP:
 $valore_cookie = date();
Posto l'intero script, così forse è chiara la situazione. Si chiama paginaris.php Qualcuno mi può dare dei consigli per favore ???

PHP:
<link rel="stylesheet" type="text/css" href="coloredisfondo.css">
 
    <?php
require_once("connetti.php");//a che cavolo ti serve?

    session_start();
if(isset($_COOKIE["ultimoaccesso"])) {
    $valore_cookie = date("d/m/Y - H:i:s");
    setcookie ("ultimoaccesso", $valore_cookie, time() + 365 *24*3600);
    $ultimo_cookie = $_COOKIE["ultimoaccesso"];
    $me= "Il tuo ultimo accesso è stato il:  $ultimo_cookie";
} else {
    $valore_cookie = date();
    setcookie ("ultimoaccesso", $valore_cookie, time() + 365 *24*3600);
    $me= "Non ti sei mai collegato a questa pagina";
}

$stringa= strtoupper($_SESSION['nome']);
if(isset($_SESSION['nome']) && $_SESSION['autorizzato'] == 0) {
    
    echo '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">';
?>
<!DOCTYPE html>
<html>
<head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>benvenuto</title>

<body>
    
<?php


    echo "<div class=\"messaggio\"><h1>";

    echo "BENVENUTO ".$stringa." <br />";
    echo $me;
    echo "</h1></div>";
    echo "</body></html>";
    }else{
    header("Location:failed.php");      
    exit();   
 
}
 
 ?> 
 
<html>
    <head>
         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    </head>
    <body>
  

<center>  <br> <br>
    

<input type="button" onClick="window.location.href='logout.php';" style='padding:10px' value="Logout" />
 

 
</center>
 </body>
</html>
Ovviamente, quando mi chiede devo memorizzare la password ??? Io gli dico di no, sennò me la trascino in tutti i seguenti moduli d'iscrizione. Grazie.
 
Ultima modifica:

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
la funzione date() da sola non si puo richiamare
devi mettergli almeno un parametro
PHP:
$valore_cookie = date("d/m/Y - H:i:s");
tra l'altro nella if lo scrivi giusto

e nel else lo sbagli
 

paperinik4

Utente Attivo
29 Mag 2011
1.812
0
36
Roma
www.ricetteagogo.it
Ciao

E' per questo quindi che mi da quell'errore ??? Ora lo correggo subito. Sai con i portatili a schermo da 11.5 si lavora male. E gli errori vanno a gonfie vele. Lo provo e ti faccio sapere subito. Dunque, ovviamente l'errore è andato via, e mi rimane la seguente scritta: "non ti sei mai collegato a questo sito". Ora faccio il logout e voglio riprovare a connettermi, per vedere se mi da l'ultimo accesso. Perfetto, tutto torna nella norma. Ti volevo chiedere un consiglio.

Ho raggiunto il primo obiettivo, l'scrizione, l'invio email con il link per attivare l'account. L'accesso,e il suo cookie. Non so più andare avanti. Nel senso, voi siete stati tutti grandi ad aiutarmi e asopportarmi e devo dire che hoi imparato parecchie cose di cui non sapevo la conoscenza. E di questo ve ne sarò infinitamente grato a tutti. Il consoglio che volevo, una volta che arriva l'email e clicchi sul link, c'è direttamente la possibilità di passare da 1 = non attivo a 0 = attivo ???? Oppure debbo creare un ulteriore form per fare ciò ??? Correggetemi se sbaglio, si fa con update e poi si passa da 1 disattivato a 0 attivato giusto ???
 

paperinik4

Utente Attivo
29 Mag 2011
1.812
0
36
Roma
www.ricetteagogo.it
Ciao

Devo richiedere di nuovo aiuto, che palle, speravo di cavarmela da solo, ma niente. Allora, devo sbagliare evidentemente qualcosa. Ho preso a spizzichi e bocconi un esempio che inviava l'email e poi chiedeva l'attivazione dell'attivazione. A me non funziona e non capisco dove sbaglio. Posto quello che ho combinato:

PHP:
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Account attivato</title>
        
    <center> <h1> Ora il tuo account è stato attivato. Ti arriverà un'altra emaail con i dati relativi alla tua connessione.
            Conserva l'emaile non cestinarla. Una volta persa, non potrai più accedere al tuo account.</center></h1>
    </head>
    <body>
        <?php
       // includiamo il file di configurazione
    require_once("connetti.php");


    // controlliamo se i parametri sono presenti in tabella
    $ctrl_login = @mysql_query("SELECT id FROM utenti WHERE email='$email' AND password='$password'") or die (mysql_error());
    if(@mysql_num_rows($ctrl_login)==1)
    {
      // esito login negativo
      echo "Login incorretto.";
    }else{
      // esito login positivo quindi rendiamo l'utente attivo
      $obj = @mysql_fetch_object($ctrl_login) or die (mysql_error());
      $query_attivo = @mysql_query("UPDATE utenti SET attivo='0' WHERE id=".$obj->id) or die (mysql_error());
var_dump($query_attivo);
      // creiamo un id di sessione corrispondente all'utente
      $_SESSION['id'] = $obj->id;

      // redirect alla pagina degli iscritti
      @header("Location: login.php");
    }
   
       ?>
    </body>
</html>
Nella tabella ho messo 1 = disattivato di default e 0 = da attivare. Dove sta l'errore ????? Spero in qualcuno di voi. Grazie.
 

paperinik4

Utente Attivo
29 Mag 2011
1.812
0
36
Roma
www.ricetteagogo.it
Ciao

Caio Ale,

Avevi ragione tu. Era il contrario, 1 = attivo 0 = disattivato. Ora provo ad invertirli. Come faccio a inizializzare quelle due variabili ???
Ho modificato la tabella, mi dici se è corretto per favore ???

Tabella utenti originaria:

PHP:
create table utenti (

id 		INT UNSIGNED NOT NULL AUTO_INCREMENT,
nome 		VARCHAR(30) NOT NULL,
cognome 	VARCHAR(30) NOT NULL,
username 	VARCHAR(30) NOT NULL,
email           VARCHAR(40) NOT NULL,
password        VARCHAR(255) NOT NULL,
autorizzato 	ENUM('0', '1') DEFAULT '0',
PRIMARY KEY (id)
);

Tabella utenti modificata:

PHP:
create table utenti (

id 		INT UNSIGNED NOT NULL AUTO_INCREMENT,
nome 		VARCHAR(30) NOT NULL,
cognome 	         VARCHAR(30) NOT NULL,
username 	         VARCHAR(30) NOT NULL,
email                 VARCHAR(40) NOT NULL,
password           VARCHAR(255) NOT NULL,
autorizzato        ENUM('1', '0') DEFAULT '0',
PRIMARY KEY (id)
);
Dovrebbe essere così giusto ????
 

paperinik4

Utente Attivo
29 Mag 2011
1.812
0
36
Roma
www.ricetteagogo.it
Ciao

Ciao Ale,

Questa è la paginaris.php Deve essere modificata anche questa ??? Se si come ??? te la posto:

PHP:
<?php
require_once("connetti.php");

if (!isset($_POST['log'])) {
    ?>
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <title>Loggati</title>

        <center>   <H2>DIGITARE USERNAME & PASSWORD. PREMERE <a href="iscrizione.php"> QUI</a> </H2> 

            <form action= '' method="POST">
                <font face="Comic Sans MS">
                Username: <input type="text" name="username"  maxlength="30" size ="32"> <br> <br>
                Password: <input type="password" name="password"  maxlength="12" size ="14"> <br> <br>
                </font> 
                <center>
                    <input type="submit" name="log" value="Loggati" />
                    
                </center> </form>
        </head>
    </body>
    <?php
} else {

    session_start();
//Query originale
    
  $query = "SELECT id,username, nome, autorizzato FROM utenti WHERE username='" . $_POST['username'] . "' AND password='" . md5($_POST['password']) . "'";     



$cerco = mysql_query($query);

if (!isset($_POST['esci'])) {

    if (!$cerco) {
        echo "Errore query: <br/>$query<br/>" . mysql_error();
        mysql_error();
    } else {
     
    if (mysql_num_rows($cerco) == 1) {
        $row = mysql_fetch_assoc($cerco);        
        $_SESSION['nome'] = $row['nome'];
        $_SESSION['id'] = $row['id'];  
        $_SESSION['autorizzato'] = $row['autorizzato'];
        header("Refresh: 0;URL=paginaris.php");   
    } else {

    echo "<h2> <center>";    
echo 'Premere su <a href="javascript:history.back();">back</a> Indietro per riprovare </h2>';
echo "Utente non trovato";

header("Refresh: 1;URL=login.php");     
  echo "</h2> <center>";    
}  
}
}
}

?>
Ovviamente accetto consigli e suggerimenti da tutti non solo da ale.
 

paperinik4

Utente Attivo
29 Mag 2011
1.812
0
36
Roma
www.ricetteagogo.it
Ciao

Ciao a tutti,

nessuno mi aiuta per risolvere il problema ??? 0 = disattivato 1 = attivato ???? Che controlli debbo mettere ??? E sopratutto dove ?? Nella paginaris.php o nella pagina di login.php ????
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
modifica la query
PHP:
$query = "SELECT id,username, nome, autorizzato 
              FROM utenti 
              WHERE autorizzato = 1 AND 
                    username='" . $_POST['username'] . "' AND 
                    password='" . md5($_POST['password']) . "'";
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
puoi farlo su entrambe , se non è autorizzato non lo è da nessuna parte
 

paperinik4

Utente Attivo
29 Mag 2011
1.812
0
36
Roma
www.ricetteagogo.it
Ciao

Ri-perdonami,

Ma purtroppo so de coccio. Allora io ho l'ho messo così:

Questa è la paginaris.php

PHP:
<link rel="stylesheet" type="text/css" href="coloredisfondo.css">
 
    <?php
require_once("connetti.php");
    session_start();
if(isset($_COOKIE["ultimoaccesso"])) {
    $valore_cookie = date("d/m/Y - H:i:s");
    setcookie ("ultimoaccesso", $valore_cookie, time() + 365 *24*3600);
    $ultimo_cookie = $_COOKIE["ultimoaccesso"];
    $me= "Il tuo ultimo accesso è stato il:  $ultimo_cookie";
} else {
    $valore_cookie = date("d/m/Y - H:i:s");
    setcookie ("ultimoaccesso", $valore_cookie, time() + 365 *24*3600);
    $me= "Non ti sei mai collegato a questa pagina";
}

$stringa= strtoupper($_SESSION['nome']);
if(isset($_SESSION['nome']) && $_SESSION['autorizzato'] == 1) {
   
$query = "SELECT id,username, nome, autorizzato 
              FROM utenti 
              WHERE autorizzato = 1 AND 
                    username='" . $_POST['username'] . "' AND 
                    password='" . md5($_POST['password']) . "'";  
  
    echo '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">';
?>
<!DOCTYPE html>
<html>
<head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>benvenuto</title>

<body>

Ma non mi si fila de pezzza. Ora lo provo a mettere anche su login.php Vorrei sapere dove cavolo sbaglio, inoltre ti posto anche la tabella che ho fatto, magari è quella che è sballata.

Tabella utenti:

PHP:
create table utenti (

id 		INT UNSIGNED NOT NULL AUTO_INCREMENT,
nome 		VARCHAR(30) NOT NULL,
cognome 	VARCHAR(30) NOT NULL,
username 	VARCHAR(30) NOT NULL,
email           VARCHAR(40) NOT NULL,
password        VARCHAR(255) NOT NULL,
autorizzato 	ENUM('1', '0') DEFAULT '0',
PRIMARY KEY (id)
);
E' giusta ???? Ti posto anche la pagina di attivazione account. I. file si chiama:

attivazione.php

PHP:
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Account attivato</title>
        
    <center> <h1> Ora il tuo account è stato attivato. Ti arriverà un'altra emaail con i dati relativi alla tua connessione.
            Conserva l'emaile non cestinarla. Una volta persa, non potrai più accedere al tuo account.</center></h1>
    </head>
    <body>
        <?php
       // includiamo il file di configurazione
    require_once("connetti.php");


    // controlliamo se i parametri sono presenti in tabella
    $ctrl_login = @mysql_query("SELECT id FROM utenti WHERE email='$email' AND password='$password'") or die (mysql_error());
    if(@mysql_num_rows($ctrl_login)==1)
    {
      // esito login negativo
      echo "Login incorretto.";
    }else{
      // esito login positivo quindi rendiamo l'utente attivo
      $obj = @mysql_fetch_object($ctrl_login) or die (mysql_error());
      $query_attivo = @mysql_query("UPDATE utenti SET attivo='1' WHERE id=".$obj->id) or die (mysql_error());
var_dump($query_attivo);
  }    
       ?>
    </body>
</html>
 
Ultima modifica:

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
metti l'uno tra apici
PHP:
$query = "SELECT id,username, nome, autorizzato 
              FROM utenti 
              WHERE autorizzato = '1' AND 
                    username='" . $_POST['username'] . "' AND 
                    password='" . md5($_POST['password']) . "'";
ma a questo punto ti basta nella login se nella riservata controlli la $_SESSION