繁体   English   中英

PHP发送电子邮件以获取忘记密码

[英]PHP send email for Forgot Password

因此,我正在构建一个本地主机页面,其中包含用户,因此我创建了一个“忘记密码”页面,以在他们忘记密码时重置密码,并将随机密码更新到数据库中。

这是ForgotPassword的代码,我通过验证电子邮件而不是ID来使用它。

<h2 style="text-align:center;"> Forgot Password </h2>
<table align="center" bgcolor="#FFFFFF" width="500" height ="180">
<form action="doForgotPassword.php" method="post">
            <tr><td align="right" height="50" width="200">First Name</td>
                <td><input type="text" name="first_name" /></td></tr>

            <tr><td align="right" height="50">Email</td>
                <td><input type="text" name="email" /></td></tr>

            <tr><td colspan="2" align="right"><input type="submit" value="Submit"/></td></tr>

        </table> </form> </td></table>

这是DoForgotPassword的代码,我设法在数据库中进行了更改,但无法通过电子邮件发送给用户。 我在这条线有麻烦

    <?php
    public function sendMail($email =$_POST['email'] , $id)

这是后面的其余代码。

    {
$to = $email /* separated by comma for another email (useful if you want to keep records(sending to yourself))*/;
$subject = 'INSERT_SUBJECT_HERE';

$bound_text = "----*%$!$%*";
$bound = "--".$bound_text."\r\n";
$bound_last = "--".$bound_text."--\r\n";

$headers = "From: noreply@somewhere.com\r\n";
$headers .= "MIME-Version: 1.0\r\n" .
        "Content-Type: multipart/mixed; boundary=\"$bound_text\""."\r\n" ;

$message = " you may wish to enable your email program to accept HTML \r\n".
        $bound;

$message .=
'Content-Type: text/html; charset=UTF-8'."\r\n".
'Content-Transfer-Encoding: 7bit'."\r\n\r\n".
'

        <font size="3" color="#000000" style="text-decoration:none;font-family:Lato light">
        <div class="info" Style="align:left;">

        <p>information here<!--(im sure you know how to write html ;))--></p>

        <br>

            '. /* <p>Charge:    '.$charge.'    </p> */'
        <br>

            <p>Reference Number: '.$id.'</p>

                        </div>

        </br>
        <p>-----------------------------------------------------------------------------------------------------------------</p>
        </br>
        <p>( This is an automated message, please do not reply to this message, if you have any queries please contact someone@someemail.com )</p>
        </font>
        </div>
        </body>
    '."\n\n".
                                                                $bound_last;

        $sent = mail($to, $subject, $message, $headers); // finally sending the email


    }
                $email =$_POST['email'];


        function createRandomPassword() {
        $chars = "ABCDEFGHJKLMNOPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz0123456789";
        $i = 0;
        $pass = '' ;

        while ($i <= 8) {
            $num = mt_rand(0,61);
            $tmp = substr($chars, $num, 1);
            $pass = $pass . $tmp;
            $i++;
        }
        return $pass;
        }

        $pw = createRandomPassword();
        $query = "UPDATE users SET password= SHA1('$pw') WHERE email = '$email' ";
        $result = mysqli_query($link, $query);
          if ($result){
          $query3 = "SELECT * FROM users where email = '$email'";
        $sql = mysqli_query($link, $query3) or die(mysqli_error());  
       $rownum = mysqli_num_rows($sql);

         if(!$rownum  ) {
     echo "We can not find your email in our records";
        }

       }

这是结果代码

     if($result){

         if(isset($_POST['id'])){
           $id = $_POST['id'];

   sendMail($email, $id);

           }
         }
                ?>

这是我在当前应用程序上处理的任何邮件所使用的功能(已删除敏感信息),很容易弄清楚您需要做什么,但提供的注释应该回答一些问题,

此功能允许html格式化,这应该使您变得漂亮:D

public function sendMail($email, $company, $location, $startAt, $endAt, $date, $userId,$duration)
{
    $to = $email; /* '. ',';  separated by comma for another email (useful if you want to keep records(sending to yourself))*/;
    $subject = 'INSERT_SUBJECT_HERE';

    $bound_text = "----*%$!$%*";
    $bound = "--".$bound_text."\r\n";
    $bound_last = "--".$bound_text."--\r\n";

    $headers = "From: noreply@somewhere.com\r\n";
    $headers .= "MIME-Version: 1.0\r\n" .
            "Content-Type: multipart/mixed; boundary=\"$bound_text\""."\r\n" ;

    $message = " you may wish to enable your email program to accept HTML \r\n".
            $bound;

    $message .=
    'Content-Type: text/html; charset=UTF-8'."\r\n".
    'Content-Transfer-Encoding: 7bit'."\r\n\r\n".
    '
<!-- here is where you format the email to what you need, using html you can use whatever style you want (including the use of images)-->
            <BODY BGCOLOR="White">
            <body>
            <div Style="align:center;">
            <p>
            <img src="IMAGE_URL" alt= "IMAGE_NAME">
            </p>
            </div>
            </br>
            <div style=" height="40" align="left">

            <font size="3" color="#000000" style="text-decoration:none;font-family:Lato light">
            <div class="info" Style="align:left;">

            <p>information here<!--(im sure you know how to write html ;))--></p>

            <br>

            <p>Location:  '.$location.' <!-- $location is the variable you wish to insert as is $date etc --> </p>

            <p>Date:      '.$date.'      </p>

            <p>Time:      '.$startAt.'   </p>

            <p>Duration:  '.$duration.'  </p>

            <p>Company:   '.$company.'   </p>

                '. /* <p>Charge:    '.$charge.'    </p> */'
            <br>

                <p>Reference Number: '.$userId.'</p>

                            </div>

            </br>
            <p>-----------------------------------------------------------------------------------------------------------------</p>
            </br>
            <p>( This is an automated message, please do not reply to this message, if you have any queries please contact someone@someemail.com )</p>
            </font>
            </div>
            </body>
        '."\n\n".
                                                                    $bound_last;

    $sent = mail($to, $subject, $message, $headers); // finally sending the email


}

这绝对可以工作(只要您替换INSERT _...等),除了我不能立即看到您的代码有任何问题,我唯一能真正建议的就是检查您的应用程序错误日志,它应该给您一个指示是否有任何错误。

否则检查您的php ini文件,看看是否已激活sendmail :)

问候史蒂夫。

---------编辑---------

因此您的新代码应遵循以下原则:

<?php
    $email =$_POST['email'];

    public function sendMail($email, $userId)
{
   $to = $email;
$subject = 'Password Reset';

$bound_text = "----*%$!$%*";
$bound = "--".$bound_text."\r\n";
$bound_last = "--".$bound_text."--\r\n";

$headers = "From: noreply@somewhere.com\r\n";
$headers .= "MIME-Version: 1.0\r\n" .
        "Content-Type: multipart/mixed; boundary=\"$bound_text\""."\r\n" ;

$message = " you may wish to enable your email program to accept HTML \r\n".
        $bound;

    $message .=
  'Content-Type: text/html; charset=UTF-8'."\r\n".
  'Content-Transfer-Encoding: 7bit'."\r\n\r\n".
  '

        <BODY BGCOLOR="White">
        <body>

        </br>
        <div style=" height="40" align="left">

        <font size="3" color="#000000" style="text-decoration:none;font-family:Lato light">
        <div class="info" Style="align:left;">

        <p>place link here for password reset</p>

         <p>Reference Number: '.$userId.'</p>

                        </div>

        </br>
        <p>-----------------------------------------------------------------------------------------------------------------</p>
        </br>
        <p>( This is an automated message, please do not reply to this message, if you have any queries please contact someone@someemail.com )</p>
        </font>
        </div>
        </body>
    '."\n\n".
                                                                $bound_last;

$sent = mail($to, $subject, $message, $headers); // finally sending the email


}


    function createRandomPassword() {
    $chars = "ABCDEFGHJKLMNOPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz0123456789";
    $i = 0;
    $pass = '' ;

    while ($i <= 8) {
        $num = mt_rand(0,61);
        $tmp = substr($chars, $num, 1);
        $pass = $pass . $tmp;
        $i++;
    }
    return $pass;
    }

    $pw = createRandomPassword();
    $query = "UPDATE users SET password= SHA1('$pw') WHERE email = '$email' ";
    $result = mysqli_query($link, $query);
if ($result){
$query3 = "SELECT * FROM users where email = '$email'";
$sql = mysqli_query($link, $query3) or die(mysqli_error());  
$rownum = mysqli_num_rows($sql);

if(!$rownum  ) {
   echo "We can not find your email in our records";
    }

    }
   if($result){
   $this->sendMail($email, $userId); /*does it need to be in a class for $this->? or can you call       functions within the php page without?*/
} ?>

------编辑------

好的函数调用应该是sendMail($variableOne, $variableTwo)

如果您在sendMail函数的开始处删除了变量,则应将其设置为function sendMail($email){/*code*/}然后尝试执行该操作(发送电子邮件需要使用电子邮件)

------编辑------

我最近对该功能进行了重新设计,以允许使用Gmail SMTP。如果您从RamDev签出此页面(请查看Stephen Penn的帖子) ,我将解释步骤以及我构建的功能,这可能有助于您了解流程通过SMTP的邮件。

再次感谢,

史蒂夫

<?php 
include "connection.php";
echo "<br>";
if(isset($_POST['submit']))
{
$email = $_POST['email'];
$check = mysql_query("select * from register where email = '$email' ");
$find = mysql_num_rows($check);
if($find)
{
function makepassword($length)
{
$validCharacters = "ABCDEFGHIJKLMNPQRSTUXYVWZ123456789";
$validCharNumber = strlen($validCharacters);
$result ="";
for ($i = 0; $i < $length; $i++) 
{
$index = mt_rand(0, $validCharNumber - 1);
$result .= $validCharacters[$index];
}
return $result;
}
$random_password = makepassword(10);
//echo $password_final = md5($random_password);
//echo "update set pass ='$random_password' where email = '$email'"; exit;
$final_result = mysql_query("update register set pass ='$random_password' where email = '$email' ");
if($final_result)
{
echo "Your Password is:".$random_password;
}
}
else
{
echo  "Email Not Found";
}
}
?>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM