提交时的 SMTP 联系表空白屏幕
Posted
技术标签:
【中文标题】提交时的 SMTP 联系表空白屏幕【英文标题】:SMTP Contact Form blank screen on Submit 【发布时间】:2014-01-23 22:18:38 【问题描述】:我在联系表单方面遇到了很多问题,有谁知道为什么当我在表单上按提交时,我的代码只是显示一个带有“(URL)/mail.php 的空白屏幕。
这是我的代码
<h2 class="formhead">Contact Form</h2>
<br>
<form class="form" action="mail.php" method="post">
<p class="name">
<input type="text" name="name" id="name" placeholder="John Doe" />
<label for="name">Name</label>
</p>
<br>
<p class="email">
<input type="text" name="email" id="email" placeholder="mail@example.com" />
<label for="email">Email</label>
</p>
<br>
<p class="number">
<input type="text" name="number" id="number" placeholder="0774XXXXXXX" />
<label for="name">Contact Number</label>
</p>
<br>
<p class="web">
<input type="text" name="web" id="web" placeholder="www.example.co.uk" />
<label for="name">Website</label>
</p>
<br>
<p class="query">
<textarea name="query" id="query" placeholder="Write something to us" /> </textarea>
</p>
<br>
<p class="submit">
<input name="btnSubmit" type="submit" onclick="javascript: return validate();" value="Send" />
</p>
</form>
PHP
<?
ob_start();
if(isset($_POST['btnSubmit']))
require("class.phpmailer.php");
$mail = new PHPMailer();
//Your SMTP servers details
$mail->IsSMTP(); // set mailer to use SMTP
$mail->Host = "localhost"; // specify main and backup server or localhost
$mail->SMTPAuth = true; // turn on SMTP authentication
$mail->Username = "supp0rt@c(hidden)y.co.uk"; // SMTP username
$mail->Password = "DQ(hidden)"; // SMTP password
//It should be same as that of the SMTP user
$redirect_url = "http://".$_SERVER['SERVER_NAME']; //Redirect URL after submit the form
$mail->From = $mail->Username; //Default From email same as smtp user
$mail->FromName = "Display Name";
$mail->AddAddress("enquiries@c(hidden)y.co.uk", "chapnolo"); //Email address where you wish to receive/collect those emails.
$mail->WordWrap = 50; // set word wrap to 50 characters
$mail->Ishtml(true); // set email format to HTML
$mail->Subject = $_POST['email'];
$message = "Name of the requestor :".$_POST['name']." \r\n <br>Email Adrress :".$_POST['email']." \r\n <br> Phone number :".$_POST['number']."\r\n <br> Message: ".$_POST['query']."\r\n <br> Website: ".$_POST['web'];
$mail->Body = $message;
if(!$mail->Send())
echo "Message could not be sent. <p>";
echo "Mailer Error: " . $mail->ErrorInfo;
exit;
echo "Message has been sent";
header("Location: $redirect_url");
?>
任何见解都将不胜感激,我是 PHP 新手。
【问题讨论】:
进行常规错误报告。error_reporting(E_ALL); ini_set('display_errors', true);
。它仍然是一个空白的白页吗?检查控制台。状态是否返回 500?检查服务器错误日志。还是不行?转储邮件对象并退出 - var_dump($mail); exit();
它看起来合适吗?好的。浏览页面,直到它不起作用。
放置 ini_set('display_errors',1);错误报告(E_ALL);在您的代码中作为前 2 行,收集错误消息....
我应该在哪里添加 error_reporting 代码?
在顶部,<?php
或您的情况下为 <?
之后的行
这样吗? ini_set('display_errors',1);错误报告(E_ALL); ob_start();
【参考方案1】:
找不到 php mailer 类 class.phpmailer.php。它是否与其他文件位于同一目录中..?
【讨论】:
【参考方案2】:我会将header()
调用移到if()
语句之外,以确保始终重定向一个人:想想如果一个人手动访问yoursite.com/mail.php
而不使用您的表单来发布数据会发生什么:
<?PHP
ob_start();
if(isset($_POST['btnSubmit']))
// Mail stuff
header("Location: $redirect_url");
?>
【讨论】:
以上是关于提交时的 SMTP 联系表空白屏幕的主要内容,如果未能解决你的问题,请参考以下文章