使用数据库从php发送电子邮件

时间:2016-05-31 17:07:42

标签: php

我正在尝试设置我的php页面,以便当用户在文本框中输入用户名时,它会检查我的数据库中的用户名,找到他们的电子邮件地址,然后向该地址发送一封电子邮件。我目前拥有的代码不幸的是似乎没有工作,因为我提交页面时它刷新但没有收到预期地址的电子邮件;

User

1 个答案:

答案 0 :(得分:5)

已经确定您(最初)没有从查询中获取任何内容。

我提交以下内容作为示例(帮助您,因为评论的时间太长)与我用来测试您的代码的内容。

确保数据库中存在所有值。您需要相应地调整表/列名称。

如果以下示例失败了,那么您需要找出原因。

检查错误并确保您可以使用该邮件。检查您的垃圾邮件。

查看代码中嵌入的评论。

<?php 
error_reporting(E_ALL);
ini_set('display_errors', 1);

$DB_HOST = 'xxx';
$DB_USER = 'xxx';
$DB_PASS = 'xxx';
$DB_NAME = 'xxx';

$Link = new mysqli($DB_HOST, $DB_USER, $DB_PASS, $DB_NAME);
if($Link->connect_errno > 0) {
  die('Connection failed [' . $Link->connect_error . ']');
}

$_POST['user'] = "john"; // this is a hard-code value. I did not use a form for it

$user = $_POST['user']; // If taken from a form
                        // make sure you have a post method
                        // and that the input has the same
                        // name attribute for it. I.e.: name="user"

$my_query="SELECT * from users where username = '$user'";
$result= mysqli_query($Link, $my_query) or die(mysqli_error($Link));

while($myrow = mysqli_fetch_array($result)){

echo $to = $myrow["email"];

$password = $myrow["password"];

}


$subject = 'Password';
$sender = 'email@example.com'; // replace this with your email address

$message = <<< EMAIL

The Password registered with account {$user} is {$password}.

EMAIL;

$header = "From:" . $sender;


if ($result):
        mail($to, $subject, $message, $header);
        echo $feedback = 'Email Sent';
endif;

另外,您使用的方法不安全,如在电子邮件中发送密码而不使用预准备语句并将密码存储为纯文本。

使用prepared statementsPDO with prepared statements它们更安全

<强>密码

我还注意到您可能以纯文本格式存储密码。不建议这样做。

使用以下其中一项:

关于列长的重要说明:

如果您决定使用password_hash()或兼容包(如果PHP <5.5)https://github.com/ircmaxell/password_compat/,请务必注意,如果您当前的密码列的长度低于60 ,它需要更改为(或更高)。手册建议长度为255。

您需要更改列的长度并重新开始使用新哈希才能使其生效。否则,MySQL将无声地失败。

其他感兴趣的链接: