【发布时间】:2014-01-24 14:06:15
【问题描述】:
我已经编写了一些代码来使电子邮件在单击按钮时自动发送到用户的电子邮件地址。但由于某种原因,它没有发送任何电子邮件,我用两个不同的电子邮件地址对其进行了测试。
按钮代码:
form action="sendellie.php" method="post">
<input type="submit" value="Buy tickets"/>
</form>
处理页面代码:
<?php
session_start();
include 'connect.php';
ini_set("sendmail_from", "********");
$user_id= $_SESSION['id'];
$sql = "SELECT username FROM user WHERE user_id = '$user_id'";
$result = mysql_query($sql) or die('Query failed. ' . mysql_error());
$uname = mysql_fetch_array($result);
$result = mysql_query($sql) or die('Query failed. ' . mysql_error());
$uemail = mysql_fetch_array($result);
$user_id= $_SESSION['id'];
$sql = "SELECT email FROM user WHERE user_id = '$user_id'";
$result = mysql_query($sql) or die('Query failed. ' . mysql_error());
$uemail = mysql_fetch_array($result);
while($row = mysql_fetch_array($result))
{
$name = $uname['username'];
$email = $uemail['email'];
$message = "This email is to confirm you have purchased one Ellie Goulding Ticket for the O2";
$subject = $uname['username'];
echo "sent to"." ".$email." ".$subject." ".$message."<p />";
mail($email, $subject, $message);
}
echo "Go check your mail box:";
include 'close.php';
?>
<?php echo $uemail['email'] ?><br>
<a href="ellie.php">Back</a>
【问题讨论】:
-
很多事情可以阻止电子邮件到达某人的收件箱,其中很少与代码有关。日志中是否有错误消息?来自 SMTP 服务器的错误?当您针对您控制的模拟 SMTP 服务器进行测试时,行为是什么?当您对此进行调试时,是否完全调用了
mail()? (旁注:为什么要两次访问数据库以从同一记录中获取两个字段?) -
要排除故障,请删除与发送邮件无关的任何内容。相反,向自己发送一封简单的电子邮件,看看是否收到。
-
你确定 user_id 是一个字符串吗?如果是 int,则执行以下操作: $sql = "SELECT username FROM user WHERE user_id = {$user_id}";
-
通过使用外部变量构建 SQL 语句,您将面临 SQL 注入攻击。 此外,任何带有单引号的输入数据,例如“O 'Malley",会炸毁你的 SQL 查询。请了解如何使用参数化查询(最好使用 PDO 模块)来保护您的 Web 应用程序。我的网站bobby-tables.com/php 有示例可以帮助您入门,this question 有很多详细示例。