problema mail SMTP

PEAR, Smarty, ADOdb, OOP, PHP 5, XML, UML, Şabloane de proiectare, PHP-GTK.

Moderatori: coditza, Emil, Moderatori

ialexs
Average Member
Mesaje: 91
Membru din: Sâm Sep 20, 2008 5:20 pm
Contact:

problema mail SMTP

Mesajde ialexs » Mar Mai 29, 2012 8:37 pm

salut, am si eu o problema si nu stiu cum sa o rezolv. am un script de RECUPERARE PAROLA pentru site-ul meu si faza este ca scriptul merge foarte bine pana la un moment dat, si acela ca nu imi preia $from ci pune nobody@abc04.abcdomenii.ro in loc sa imi puna admin@sitemeu.ro.
am vorbit cu cei de la hosting si mi-au explicat care este faza ca trebuie sa fac autentificare cu SMTP si sa imi preia automat asta DAR problema este ca nu stiu cum sa fac, am tot cautat pe net cum se face dar imi tot da pagini de contactare dar mie nu asta imi trebuie ci sa imi arate e-mail-ul meu atunci dupa ce utilizatorul nu mai stie parola si acceseaza pagina "parola uitata" si introduce e-mailul lui si ii trimite parola dar sa nu ii apara acolo nobody@... ci admin@sitemeu.ro.
Sper ca ati inteles. Astept raspuns si multumesc anticipat. cu stima trif



HkSilviu
Average Member
Mesaje: 71
Membru din: Vin Mai 04, 2012 3:30 pm

Mesajde HkSilviu » Mar Mai 29, 2012 10:23 pm

Cod: Selectaţi tot

<?php
/* * * * * * * * * * * * * * SEND EMAIL FUNCTIONS * * * * * * * * * * * * * */

//Authenticate Send
//This will send an email using auth smtp and output a log array
//logArray - connection,

function authSendEmail($from, $namefrom, $to, $nameto, $subject, $message)
{
//SMTP + SERVER DETAILS
/* * * * CONFIGURATION START * * * */
$smtpServer = "mail.server.com";
$port = "25";
$timeout = "30";
$username = "smtpusername";
$password = "smtppassword";
$localhost = "localhost";
$newLine = "\r\n";
/* * * * CONFIGURATION END * * * * */

//Connect to the host on the specified port
$smtpConnect = fsockopen($smtpServer, $port, $errno, $errstr, $timeout);
$smtpResponse = fgets($smtpConnect, 515);
if(empty($smtpConnect))
{
$output = "Failed to connect: $smtpResponse";
return $output;
}
else
{
$logArray['connection'] = "Connected: $smtpResponse";
}

//Request Auth Login
fputs($smtpConnect,"AUTH LOGIN" . $newLine);
$smtpResponse = fgets($smtpConnect, 515);
$logArray['authrequest'] = "$smtpResponse";

//Send username
fputs($smtpConnect, base64_encode($username) . $newLine);
$smtpResponse = fgets($smtpConnect, 515);
$logArray['authusername'] = "$smtpResponse";

//Send password
fputs($smtpConnect, base64_encode($password) . $newLine);
$smtpResponse = fgets($smtpConnect, 515);
$logArray['authpassword'] = "$smtpResponse";

//Say Hello to SMTP
fputs($smtpConnect, "HELO $localhost" . $newLine);
$smtpResponse = fgets($smtpConnect, 515);
$logArray['heloresponse'] = "$smtpResponse";

//Email From
fputs($smtpConnect, "MAIL FROM: $from" . $newLine);
$smtpResponse = fgets($smtpConnect, 515);
$logArray['mailfromresponse'] = "$smtpResponse";

//Email To
fputs($smtpConnect, "RCPT TO: $to" . $newLine);
$smtpResponse = fgets($smtpConnect, 515);
$logArray['mailtoresponse'] = "$smtpResponse";

//The Email
fputs($smtpConnect, "DATA" . $newLine);
$smtpResponse = fgets($smtpConnect, 515);
$logArray['data1response'] = "$smtpResponse";

//Construct Headers
$headers = "MIME-Version: 1.0" . $newLine;
$headers .= "Content-type: text/html; charset=iso-8859-1" . $newLine;
$headers .= "To: $nameto <$to>" . $newLine;
$headers .= "From: $namefrom <$from>" . $newLine;

fputs($smtpConnect, "To: $to\nFrom: $from\nSubject: $subject\n$headers\n\n$message\n.\n");
$smtpResponse = fgets($smtpConnect, 515);
$logArray['data2response'] = "$smtpResponse";

// Say Bye to SMTP
fputs($smtpConnect,"QUIT" . $newLine);
$smtpResponse = fgets($smtpConnect, 515);
$logArray['quitresponse'] = "$smtpResponse";
}
?>

ceea ce cauti tu asta cred ca este si te poti inspira de aici.

ialexs
Average Member
Mesaje: 91
Membru din: Sâm Sep 20, 2008 5:20 pm
Contact:

Mesajde ialexs » Mar Mai 29, 2012 10:37 pm

salut, multumesc pentru raspuns dar cum as putea sa il combin acel cod cu ceea ce am eu? eu am asta:

Cod: Selectaţi tot

session_start();
function formular($tip) {
  // setare nr. verificare si sesiunea asociata
   $data_nrv = date(" j-F-Y, g:i a ");   // Pt. stabilire nr. verificare
   $nr_ve = md5($data_nrv);
   if(!isset($_SESSION['nrve'])) {
   $_SESSION['nrve'] = substr($nr_ve, 3, 5);
  }
  // afiseaza formularul pt. e-mail
   echo '<justify>
   <script src="verific.js"></script>
   <p>&nbsp;&nbsp;&nbsp;&nbsp;Va rugam sa introduceti adresa de e-mail folosita la crearea contului dumneavoastra.
   <br>
   &nbsp;&nbsp;&nbsp;&nbsp;Dupa apasarea butonului Recupereaza parola, veti primi pe adresa respectiva un e-mail cu parola si numele de utilizator ales.</b></p></justify>
         <form action="'. basename($_SERVER['PHP_SELF']). '" method="post" onsubmit="return recupera(this)">
       <input type="hidden" name="nrv0" value="'. $_SESSION['nrve']. '" />
         <label for="email">E-mail: </label> <br><input type="text" name="email" maxlength="32" size="40" id="email" /><br />
       Numarul de verificare: <b><font color="blue" size="4">'. $_SESSION['nrve']. '</font><br>
       <label for="nrv"></label><input type="text" name="nrv"  maxlength="6" size="20" id="nrv" /><br /><br>
         <div align=center><input type="submit" name="'. $tip. '" value="'. $tip. '" /></div>
         </form>';
}
// Verifica daca s-a trimis cerere de recuperare utilizator/parola
if (isset($_POST['email']) && isset($_POST['nrv']) && isset($_SESSION['nrve'])) {
  /* Stabileste daca a fost trimisa cerere de recuperare date sau retrimitere confirmare */
  if (isset($_POST['recuper'])) { $trimite = $_POST['recuper']; }
  else if (isset($_POST['confirm'])) { $trimite = $_POST['confirm']; }

  if ($_SESSION['nrve']==$_POST['nrv']) {
   unset($_SESSION['nrve']);
   include_once("bazadb.php");

   // verifica daca adresa de email este in baza de date
   $email = $_POST['email'];
   $sql = "SELECT `utilizator`, `parola`, `pass`, `email`, `id` from `utilizatori` WHERE `email` = '$email'";
   $result = mysql_query($sql,$conn);

  if(!$result || (mysql_numrows($result)<1)) {
    echo "<font color ='red' ><center> Adresa de email <i><u> $email </u></i> nu se afla in baza de date.</center></font>";
   formular($trimite);
  }
   else {
      // extrage utilizatorle, parola si id-ul asociate adresei de email
      while ($rand = mysql_fetch_assoc($result)) {
        $utilizator = stripslashes($rand['utilizator']);
        $parola = stripslashes($rand['parola']);
        $pass = stripslashes($rand['pass']);
        $id = (int)$rand['id'];
     }
        $from = 'From: admin@cantaricrestine.ro';
        $subiect = "Recuperare date inregistrare utilizator.";
        $mesaj2 = "               Buna ziua \n
        Ati primit acest e-mail deoarece ati solicitat recuperarea parolei de inregistrare utilizator. \n\n
              Utilizator = $utilizator \n
              Parola = $pass
              \n\n\n
        Va doresc o zi binecuvantata! \n
        Cu respect, echipa cantaricrestine.ro";
      $mesaj = $mesaj1. $mesaj2;
      if (mail("$email", "$subiect", $mesaj, $from)) {
         echo '<center>Datele dv. de autentificare au fost trimise la adresa de e-mail <b>'. $email. '</b>.
               <br /> Verificati si in directorul Spam. Daca nu ati primit email-ul, contactati Administratorul site-ului.
               <br /><br /></center>';
     }
      else {
         echo '<center><h2>Exista o problema, verificati daca ati introdus corect datele.</h2><br /><b><a href="#" onClick="history.back()">Click aici</a></b> pentru a reveni la pagina anterioara.</center>';
      }
   }
  }
  else if ($_SESSION['nrve']!=$_POST['nrve']) {
   unset($_SESSION['nrve']);
   echo '<center><font color="red">Nr. verificare incorect. Incercati din nou.</font></center>';
   formular($trimite);
  }
}

// Urmatorul cod este pentru confirmarea inregistrarii
// sau retrimiterea confirmarii
else if (isset($_GET['mp']) && isset($_GET['pm'])) {
  include_once("bazadb.php");
  $id = (int)$_GET['mp'];
  $parola = $_GET['pm'];
  $aprobat = 1;

  if(!get_magic_quotes_gpc()) {   $parola = addslashes($parola); }

   // modificarea in BD pt aprobat=1
   $sql = "UPDATE `utilizatori` SET `aprobat`='$aprobat' WHERE `id`='$id' AND `parola`='$parola' LIMIT 1";
   $result = mysql_query($sql);
   if(!$result) {
     echo 'Aprobarea nu s-a efectuat deoarece : '. mysql_errno(). ' : '. mysql_error();
   }
   else {
     $q = "SELECT aprobat from `utilizatori` WHERE `id`='$id'";
     $result_q = mysql_query($q,$conn);
     $rand = mysql_fetch_array($result_q, MYSQL_ASSOC);
     if ($rand['aprobat']==1) {
      echo '<center><font color="blue"><h2>Confirmare aprobata</h2></font><h3>Acum va puteti autentifica pe site. <a href="../">Click aici</a></h3></center>';
     }
     else  {
      $link_confirm = '<b><a href="'. basename($_SERVER['PHP_SELF']). '">Click Aici</a></b>';
      echo '<center><font color="red"><h2>Confirmare neaprobata</h2></font><h3>Datele pentru confirmarea inregistrarii sunt incorecte</h3><br /><br /> - Pentru a solicita un nou e-mail cu link-ul pt. confirmarea inregistrarii '. $link_confirm. '<br /><br /><i>Sau Contactati administratorul site-ului.</i></center>';
     }
   }
@mysql_close();
}
else {
  /* Seteaza daca afiseaza formularul pt. trimitere datelor de autentificare sau si link-ul pt. confirmare inregistrare */
  if (isset($_GET['confirm'])) { $trimite = 'confirm'; }
  else { $trimite = 'Recupereaza parola'; }
  formular($trimite);
}
. cu stima trif

ialexs
Average Member
Mesaje: 91
Membru din: Sâm Sep 20, 2008 5:20 pm
Contact:

Mesajde ialexs » Mar Mai 29, 2012 11:48 pm

am reusit, uite asa:

Cod: Selectaţi tot

<?php
require_once "Mail.php";
session_start();

// Functia pt. stabilire nr. verificare si afisare formular
function formular($tip) {
  // setare nr. verificare si sesiunea asociata
   $data_nrv = date(" j-F-Y, g:i a ");   // Pt. stabilire nr. verificare
   $nr_ve = md5($data_nrv);
   if(!isset($_SESSION['nrve'])) {
   $_SESSION['nrve'] = substr($nr_ve, 3, 5);
  }
  // afiseaza formularul pt. e-mail
   echo '<justify>
   <script src="verific.js"></script>
   <p>&nbsp;&nbsp;&nbsp;&nbsp;Va rugam sa introduceti adresa de e-mail folosita la crearea contului dumneavoastra.
   <br>
   &nbsp;&nbsp;&nbsp;&nbsp;Dupa apasarea butonului Recupereaza parola, veti primi pe adresa respectiva un e-mail cu parola si numele de utilizator ales.</b></p></justify>
         <form action="'. basename($_SERVER['PHP_SELF']). '" method="post" onsubmit="return recupera(this)">
       <input type="hidden" name="nrv0" value="'. $_SESSION['nrve']. '" />
         <label for="email">E-mail: </label> <br><input type="text" name="email" maxlength="32" size="40" id="email" /><br />
       Numarul de verificare: <b><font color="blue" size="4">'. $_SESSION['nrve']. '</font><br>
       <label for="nrv"></label><input type="text" name="nrv"  maxlength="6" size="20" id="nrv" /><br /><br>
         <div align=center><input type="submit" name="'. $tip. '" value="'. $tip. '" /></div>
         </form>';
}

// Verifica daca s-a trimis cerere de recuperare utilizator/parola

if (isset($_POST['email']) && isset($_POST['nrv']) && isset($_SESSION['nrve'])) {
  /* Stabileste daca a fost trimisa cerere de recuperare date sau retrimitere confirmare */
  if (isset($_POST['recuper'])) { $trimite = $_POST['recuper']; }
  else if (isset($_POST['confirm'])) { $trimite = $_POST['confirm']; }

  if ($_SESSION['nrve']==$_POST['nrv']) {
   unset($_SESSION['nrve']);
   include_once("bazadb.php");

   // verifica daca adresa de email este in baza de date
   $email = $_POST['email'];
   $sql = "SELECT `utilizator`, `parola`, `pass`, `email`, `id` from `utilizatori` WHERE `email` = '$email'";
   $result = mysql_query($sql,$conn);

  if(!$result || (mysql_numrows($result)<1)) {
    echo "<font color ='red' ><center> Adresa de email <i><u> $email </u></i> nu se afla in baza de date.</center></font>";
   formular($trimite);
  }
   else {
      // extrage utilizatorle, parola si id-ul asociate adresei de email
      while ($rand = mysql_fetch_assoc($result)) {
        $utilizator = stripslashes($rand['utilizator']);
        $parola = stripslashes($rand['parola']);
        $pass = stripslashes($rand['pass']);
        $id = (int)$rand['id'];
     }
      // completeaza astea
       $host = "site.ro";
       $username = "nume@site.ro";
        $password = "parolasite";
      //
       $from = "nume <nume@site.ro>";
      $to = $email;
        $subiect = "Recuperare date inregistrare utilizator.";
 $headers = array ('From' => $from,
   'To' => $to,
   'Subject' => $subiect);
        $smtp = Mail::factory('smtp',
         array ('host' => $host,
         'auth' => true,
         'username' => $username,
         'password' => $password));
      $body = "               Buna ziua \n
        Ati primit acest e-mail deoarece ati solicitat recuperarea parolei de inregistrare utilizator. \n\n
              Utilizator = $utilizator \n
              Parola = $pass
              \n\n\n";
      $mesaj = $mesaj1. $body;
 $mail = $smtp->send($to, $headers, $body);
if (PEAR::isError($mail)) {
   echo("<p>" . $mail->getMessage() . "</p>");
   echo '<center><h2>Exista o problema, verificati daca ati introdus corect datele.</h2><br /><b><a href="#" onClick="history.back()">Click aici</a></b> pentru a reveni la pagina anterioara.</center>';
     }
      else {
      echo '<center>Datele dv. de autentificare au fost trimise la adresa de e-mail <b>'. $email. '</b>.
               <br /> Verificati si in directorul Spam. Daca nu ati primit email-ul, contactati Administratorul site-ului.
               <br /><br /></center>';
     }
   }
  }
  else if ($_SESSION['nrve']!=$_POST['nrve']) {
   unset($_SESSION['nrve']);
   echo '<center><font color="red">Nr. verificare incorect. Incercati din nou.</font></center>';
   formular($trimite);
  }
}

// Urmatorul cod este pentru confirmarea inregistrarii
// sau retrimiterea confirmarii
else if (isset($_GET['mp']) && isset($_GET['pm'])) {
  include_once("bazadb.php");
  $id = (int)$_GET['mp'];
  $parola = $_GET['pm'];
  $aprobat = 1;

  if(!get_magic_quotes_gpc()) {   $parola = addslashes($parola); }

   // modificarea in BD pt aprobat=1
   $sql = "UPDATE `utilizatori` SET `aprobat`='$aprobat' WHERE `id`='$id' AND `parola`='$parola' LIMIT 1";
   $result = mysql_query($sql);
   if(!$result) {
     echo 'Aprobarea nu s-a efectuat deoarece : '. mysql_errno(). ' : '. mysql_error();
   }
   else {
     $q = "SELECT aprobat from `utilizatori` WHERE `id`='$id'";
     $result_q = mysql_query($q,$conn);
     $rand = mysql_fetch_array($result_q, MYSQL_ASSOC);
     if ($rand['aprobat']==1) {
      echo '<center><font color="blue"><h2>Confirmare aprobata</h2></font><h3>Acum va puteti autentifica pe site. <a href="../">Click aici</a></h3></center>';
     }
     else  {
      $link_confirm = '<b><a href="'. basename($_SERVER['PHP_SELF']). '">Click Aici</a></b>';
      echo '<center><font color="red"><h2>Confirmare neaprobata</h2></font><h3>Datele pentru confirmarea inregistrarii sunt incorecte</h3><br /><br /> - Pentru a solicita un nou e-mail cu link-ul pt. confirmarea inregistrarii '. $link_confirm. '<br /><br /><i>Sau Contactati administratorul site-ului.</i></center>';
     }
   }
@mysql_close();
}
else {
  /* Seteaza daca afiseaza formularul pt. trimitere datelor de autentificare sau si link-ul pt. confirmare inregistrare */
  if (isset($_GET['confirm'])) { $trimite = 'confirm'; }
  else { $trimite = 'Recupereaza parola'; }
  formular($trimite);
}
?>
. cu stima trif


Înapoi la “PHP Avansat”

Cine este conectat

Utilizatori ce ce navighează pe acest forum: Niciun utilizator înregistrat și 15 vizitatori