problema email "from"

Discutii despre script-uri si coduri PHP-MySQL, precum si lucru cu XML in PHP.
Avatar utilizator
trif
Mesaje:500

problema email "from"

salut, am si eu o problema si nu stiu cum sa fac, am script de recuperare parola si imi merge si atunci cand ajunge la cel care a solicitat acea parola prin email nu merge cum trebuie, am pus ca $from=admin@sitemeu.ro dar imi apare asta nobody@abc04.abcdomenii.ro si nu stiu cum sa ii fac chiet ca i-am dat $from pe care l-am vrut eu dar tot aia imi apare. ce trebuie sa fac. astept raspuns. multumesc anticipat, cu stima trif
M-am hotarat!
De ce sa fiu trist?
Oricum nu intereseaza pe nimeni...!
Mai bine sunt fericit si ii enervez pe toti cu fericirea mea!
http://www.cantaricrestine.ro
---> cu stima Trif

MarPlo Mesaje:4343
Salut
Incearca sa pui asa:

Cod: Selectaţi tot

$from = 'From: admin@sitemeu.ro';
 
Daca nu merge, probabil asa e setat in serverul acela de e-mail ca sa apara adresa de la ei si asta e, bine ca merge.

trif Mesaje:500
salut, uite am intrebat pe cel de la server si a zis urmatorul mesaj:
" mesajele cu expeditor nobody@ apar in momentul in care se trimit mesaje fara autentificare SMTP, prin functia mail() din php. Pentru a aparea la expeditor admin@sitemeu.ro este nevoie sa setati acea adresa in scriptul folosit. Pe pagina de suport aveti mai multe exemple de scripturi "
si cand m-am uitat nu este ceea ce imi trebuie.
ce este acolo este functie de CONTACT dar mie imi trebuie la scriptul pe care l-ai facut tu cu "recuperare parola" si la aia imi trebuie. cum pot sa il fac scriptul tau care foloseste $from sa se contecteze cu smtp?
codul de la tine este asta:

Cod: Selectaţi tot

<?php
session_start();
//include("acces.php");
// Verifica daca s-a trimis cerere de recuperare utilizator/parola
// daca este trimisa si nr. verificare este corect, cauta in baza de date
// trimite utilizator si parola la adresa de email
// daca cererea nu e facuta, sau nr. verificare incorect, afiseaza campul pt. e-mail

// 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 utilizatorle 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'];
	  }

      // trimite datele prin email
	  if ($trimite=='recuper') {
	    // stabilire mesaj pt. date de recuperare
        $subiect = "Recuperare date inregistrare";
        $mesaj1 = "               Buna ziua \n
        Ati primit acest e-mail deoarece ati solicitat recuperarea parolei de inregistrare utilizator. \n\n";
	  }
	  if ($trimite == 'confirm') {
	    // stabilire link pt. confirmare inregistrare
		$link_confirm = 'http://'. $_SERVER['HTTP_HOST']. $_SERVER['REQUEST_URI']. '?mp='. $id. '&pm='. $parola;
	    // stabilire mesaj pt. confirmare inregistrare
        $subiect = "Recuperare date";
        $mesaj1 = "               Buna ziua \n
        Ati primit acest e-mail deoarece ati solicitat retrimiterea confirmarii de inregistrare. \n\n
		Pentru a confirma inregistrarea, dati click pe link-ul urmator: \n
			$link_confirm \n\n";
	  }
	    $subiect = "Recuperare date inregistrare";
        $mesaj2 = "Datele d-voastra de autentificare sunt urmatoarele: \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: $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 />Multumim <a href="../">Click aici</a></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);
}
?>
te rog ma ajuti cu aceasta problema. astept raspuns. multumesc anticipat. cu stima trif
M-am hotarat!
De ce sa fiu trist?
Oricum nu intereseaza pe nimeni...!
Mai bine sunt fericit si ii enervez pe toti cu fericirea mea!
http://www.cantaricrestine.ro
---> cu stima Trif

MarPlo Mesaje:4343
Salut
Acel script foloseste functia mail() pt trimitere mesaje. Aceasta functie nu are parametri pentru SMTP, ci ar trebui inclusa si adaptata o clasa speciala, precum PhpMailer, sau PEAR::Mail.
Nu am folosit SMTP decat cu GMail si PHPMailer. Nu stiu cum functioneaza SMTP cu serverul de email de pe host.
Din ce am gasit pe net, daca acel server PHP are inclusa clasa PEAR::Mail, ai putea trimite prin SMTP folosind aceasta functie:

Cod: Selectaţi tot

function mailSMTP($to, $subject, $message, $from) {
  require_once('Mail.php');

  $host = "smtp.localhost";        // adresa server SMTP
  $username = "you@yourdomain.com";    // cont mail SMTP
  $password = "yourpassword";          // parola cont SMTP

  $headers = array ('From' => $from, 'To' => $to, 'Subject' => $subject);
  $smtp = Mail::factory('smtp',
    array ('host' => $host, 'auth' => true, 'username' => $username, 'password' => $password)
  );

  $mail = $smtp->send($to, $headers, $message);

  if (PEAR::isError($mail)) {
    echo("<p>" . $mail->getMessage() . "</p>");
    return false;
 }
 else return true;
}
 
- Nu stiu daca functioneaza, sunt fara experienta in asa ceva.
Din ce stiu, trebuie sa ai un cont de email creat pe acel server. Se inlocuieste "localhost" cu adresa SMTP a acelui server.
Incluzi functia de mai sus in script si inlocuiesti codul:

Cod: Selectaţi tot

if (mail("$email", "Subiect: $subiect", $mesaj, $from))
Cu acest cod:

Cod: Selectaţi tot

if(mailSMTP($email, "Subiect: $subiect", $mesaj, $from))
 
Daca da eroare de genul:
require_once(Mail.php) [function.main]: failed to open stream: No such file or directory in ...
sau
Deprecated: Assigning the return value of new by reference is deprecated in ...
Acel server nu are clasa PEAR care trebuie pt. mail. In cazul asta, poti incerca sa adaptezi clasa PHPMailer, se gaseste gratuit pe net si are exemple de folosire.
- Sau vezi ce solutii poti gasi pe net cautand: " PHP mail SMTP ".

trif Mesaje:500
salut, ce fisier este require_once('Mail.php');? cu stima trif
M-am hotarat!
De ce sa fiu trist?
Oricum nu intereseaza pe nimeni...!
Mai bine sunt fericit si ii enervez pe toti cu fericirea mea!
http://www.cantaricrestine.ro
---> cu stima Trif

MarPlo Mesaje:4343
Cred ca require_once('Mail.php'); face referire la un fisier ce apartine direct modulului PHP, ceva din clasa PEAR care e preinstalat in PHP.
Asa am gasit pe net in articole /tutoriale legate de cautarea "PHP mail SMTP", fiindca problema de mail si SMTP ma depaseste.
Poate gasiti rezolvare intreband si pe alte forumuri, unde sunt utilizatori profesionisti, cu experienta.

trif Mesaje:500
Am reusit, uite asa:

Cod: Selectaţi tot

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

// 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);
  }
}

//...
?>
Multumesc pentru ajutor! cu stima trif
M-am hotarat!
De ce sa fiu trist?
Oricum nu intereseaza pe nimeni...!
Mai bine sunt fericit si ii enervez pe toti cu fericirea mea!
http://www.cantaricrestine.ro
---> cu stima Trif

Subiecte similare