这里的代码有问题吗? PHP邮箱()

时间:2011-07-11 06:43:16

标签: php email

严重。我的托管公司说我的Php代码有问题。我没有从他们那里得到任何错误,他们说这不是我的CSS。请帮忙。

    <?php

/* Subject and Email Variables */

    $emailSubject = 'Bookem danno!';
    $webMaster = 'info@mywebsite.com';

/* Gathering Data Variables */

    $nameField = $_POST['name'];
    $cellField = $_POST['cell'];
    $emailField = $_POST['email'];
    $dateField = $_POST['date'];
    $timeField = $_POST['time'];
    $lengthField = $_POST['length'];
    $inoutField = $_POST['inout'];
    $seenbeforeField = $_POST['seenbefore'];
    $detailsField = $_POST['details'];
    $p411Field = $_POST['p411'];
    $datecheckField = $_POST['datecheck'];
    $tobField = $_POST['tob'];
    $terField = $_POST['ter'];
    $otherField = $_POST['other'];
    $screennameField = $_POST['screenname'];
    $companyField = $_POST['company'];
    $worknoField = $_POST['workno'];
    $switchboardnoField = $_POST['switchboardno'];
    $memoField = $_POST['memo'];
    $subscribeField = $_POST['subscribe'];

    $body = <<<EOD
<br><hr><br>
Name: $name <br>
Cellphone: $cell <br>
Email: $email <br>
Date: $date <br>
Time: $time <br>
Length of appointment: $length <br>
Incall Outcall: $inout <br>
Have I seen you before: $seenbefore <br>
Details: $details <br>
P411: $p411 <br>
Datecheck: $datecheck <br>
TOB: $tob <br>
TER: $ter <br>
Other: $other <br>
Screen Name: $screenname <br>
Company: $company <br>
Direct Line: $workno <br>
Switchboard: $switchboardno <br>
Memo: $memo <br>
Subscribe Me: $subscribe <br>
EOD;

    $headers = "From: $email\r\n";
    $headers .= "Content-type: text/html\r\n";
    $success = mail($webMaster, $emailSubject, $body, $headers);

echo "$result";


?>

3 个答案:

答案 0 :(得分:1)

您很乐意使用几个您从未定义的变量(并丢弃您实际设置的一些变量)。这意味着您正在编写PHP代码,同时将错误报告设置为隐藏通知(甚至设置为隐藏所有错误消息)。无论你的问题是什么(你实际上并没有说),你指示PHP不要通知你。阅读:http://es2.php.net/manual/en/errorfunc.configuration.php#ini.error-reporting

答案 1 :(得分:1)

咳咳。您没有使用您实例化的任何变量。例如,最初你这样说:

$emailField = $_POST['email'];

然后你这样说:

$headers = "From: $email\r\n";

没有名为$email的变量。有一个名为$emailField,但您没有使用它。实际上,$_POST中的所有变量都会在末尾以“Field”重命名,然后您尝试在没有Field部分的情况下稍后引用它们。不行。

此外,您在该代码中遇到了安全漏洞。看:

$headers = "From: $email\r\n";

你假设$ email是一个很好的安全价值。假设某人填写了您的表单,并告知其电子邮件地址为0wned@example.com\r\nBcc: emai1@example.net, email2@example.org, etc...,从而导致您的电子邮件服务器发送数百或数千封电子邮件。

垃圾邮件发送者可能会为了发送垃圾邮件而这样做 - 而无需维护自己的电子邮件服务器。

一个无聊且恶意的人可能只是因为看到你的域名被列入垃圾邮件发送者的黑名单。

一个不道德的公司竞争对手可能会在你的订购程序中抛出一把扳手,希望能够让你破产。我被一个很好的想象力所诅咒......

帮自己一个忙,试试这个:

$email = str_replace( "\r\n", '', $_POST['email'] );

这将删除任何潜在的CR / LF对,以便没有人可以将自己的标题注入您的电子邮件。

答案 2 :(得分:0)

$ headers。=“Content-type:text / html; charset = iso-8859-1 \ r \ n”;  用你现有的标题替换它..我不确定,但它可以帮助你...