从外部域发送时,PHP脚本无法正常工作?

时间:2015-10-03 22:04:40

标签: php

我试图在网站联系表单上运行php脚本。可能值得一提的是我从我购买的网站模板中提取它并使用此设计网站。我的html / css / php知识是绝对的初学者水平'因此,为什么我在这里...

下面是php脚本(这是模板附带的)。但是,它不会将电子邮件发送到收件人的电子邮件地址。我已经被告知了,因为脚本试图通过domainname.co.uk邮件服务器从外部域(即网站访问者的电子邮件地址)发送电子邮件,并且它将拒绝它 - 如何编辑此脚本以使其有效?

这是PHP脚本:

<?php
session_start();

$email_to = 'enquiries@bonnelhomes.co.uk'; // change with your email
$name     = $_POST['name'];  
$email    = $_POST['email'];
$subject   = $_POST['subject'];
$message    = $_POST['message'];

$headers  = "From: $email\r\n";
$headers .= "Reply-To: $email\r\n";

if(mail($email_to, $subject, $message, $headers)){
    echo "success";       
} 
else{
    echo "failed";     
}  

这是联系表格的html:

<form id="contact" class="row" name="form1" method="post" action="send.php"  >

                        <div class="span4">
                            <label>Name</label>
                            <input type="text" class="full" name="name" id="name" />
                        </div>

                        <div class="span4">
                            <label>Email <span class="req">*</span></label>
                            <input type="text" class="full" name="email" id="email" />
                            <div id="error_email" class="error">Please check your email</div>
                        </div>

                        <div class="span8">
                            <label>Message <span class="req">*</span></label>
                            <textarea cols="10" rows="10" name="message" id="message" class="full"></textarea>
                            <div id="error_message" class="error">Please check your message</div>
                            <div id="mail_success" class="success">Thank you. Your message has been sent.</div>
                            <div id="mail_failed" class="error">Error, email not sent</div>

                            <p id="btnsubmit">
                                <input type="submit" id="send" value="Send" class="btn btn-large" />
                            </p>
                        </div>


                    </form>

非常感谢任何帮助。非常感谢提前:o)

3 个答案:

答案 0 :(得分:1)

替换

$headers  = "From: $email\r\n";
$headers .= "Reply-To: $email\r\n";

$headers  = "From: mail@yourdomain.com\r\n";

<强>更新
由于是联系表单,请不要忘记将用户的详细信息添加到$message

$message = $name. "<br>" .$email. "<br>" .$message;

答案 1 :(得分:0)

如果您仍然无法从服务器发送&#34;&#34;你可能会让一些真正的电子邮件服务器完成工作。您可以使用一些名为PHP-Mailer的Framework。 要使用它,您必须下载框架并将其放入您的服务器。使用此功能,您可能希望使用SMTP(来自某个真实电子邮件帐户的登录信息)。 它看起来像是:FTP-Folderview

require './PHPMailer/PHPMailerAutoload.php';

$mailer = new PHPMailer;

在此配置您的电子邮件帐户以发送电子邮件。查看您的托管服务商帮助文件,找出您需要用于成功登录的内容:

$mailer->isSMTP();
$mailer->SMTPAuth = true;
$mailer->Host = 'smtp.strato.de';
$mailer->Username = 'your@sendingaccount.de';
$mailer->Password = 'xxxxxxx';
$mailer->SMTPSecure = 'ssl';
$mailer->Port = 465;

$mailer->From = 'your@sendingaccount.de';
$mailer->FromName = 'Mr Tester';

在此配置您要发送的实际电子邮件:

$mailer->addAddress('enquiries@bonnelhomes.co.uk','Mr Admin');  
$mailer->Subject = 'this is a contactform email';
$mailer->AltBody = 'your text with bla and request');

if($mailer->send()){
    echo 'yeah man!';
}else{
    echo 'some error occured';
}   

通常情况下,这不是绝对必要的,但它可以帮助发送问题的服务器,或者如果您的电子邮件被垃圾邮件拦截器阻止。

答案 2 :(得分:0)

安全提示,在这一行:

$email_to = 'enquiries@bonnelhomes.co.uk';

有安全问题。攻击者可以修改标题,消息并使用您的服务器向受害者发送无限的垃圾邮件。

所以添加此行以获得更高的安全性:

if (strlen($email_to) > 30 || $email_to !== 'enquiries@bonnelhomes.co.uk') {
exit("Bye Hacker!");
}