PHPMailer 不通过 Gmail 发送电子邮件,returns 空白页
PHPMailer not sending e-mail through Gmail, returns blank page
我正在尝试在我的页面底部设置一个联系表。我正在使用 PHPMailer 并尝试通过我的 gmail 帐户接收电子邮件。每次我提交表单时,我的 url 都会更改为 url/email.php,并且我得到一个空白页。我究竟做错了什么?谁能看到我明显遗漏的明显错误?
HTML:
<div class="container-fluid">
<form action="email.php" id="contact-me" method="post" name="contact-me">
<div class="row-fluid">
<div class="form-group">
<div class="col-md-3 col-md-offset-3">
<input class="input" name="name" id="name" placeholder="Name" type="text">
</div>
<div class="col-md-3">
<input class="input" id="email" name="email"
placeholder="Email" type="text">
</div>
</div>
</div>
<div class="form-group">
<textarea class="input input-textarea" id="message" name="message" placeholder="Type your message here" rows=
"5"></textarea>
</div>
<input name="send" class="send" type="submit" value="Get In Touch">
</form>
</div>
</section>
PHP:
<?php
if (isset($_POST['submit']))
{
require('PHPMailer-master/PHPMailerAutoload.php');
require_once('PHPMailer-master/class.smtp.php');
include_once('PHPMailer-master/class.phpmail.php');
$name = strip_tags($_Post['name']);
$email = strip_tags($_POST['email']);
$msg = strip_tags($_POST['message']);
$subject = "Message from Portfolio";
$mail = new PHPMailer();
$mail->isSMTP();
$mail->CharSet = 'UTF-8';
$mail->Host = 'smtp.gmail.com';
$mail->SMTPAuth = true;
$mail->SMTPSecure = 'tls';
$mail->Port = 587;
$mail->Username = 'me@gmail.com';
$mail->Password = '***********';
$mail->From = $email;
$mail->FromName = $name;
$mail->AddAddress("me.com", "Katia Sittmann");
$mail->AddReplyTo($email, $name);
$mail->isHTML(true);
$mail->WordWrap = 50;
$mail->Subject =$subject;
$mail->Body = $msg;
$mail->AltBody ="No message entered";
if(!$mail->send()) {
echo 'Message could not be sent.';
echo 'Mailer Error: ' . $mail->ErrorInfo;
exit;
}else{
header("Location: thank-you.html");
}
}
?>
你这里有一些非常混乱的代码。您应该从 up-to-date 示例开始,而不是旧示例,并确保您使用的是最新的 PHPMailer(至少 5.2.10)。
不要这样做:
require('PHPMailer-master/PHPMailerAutoload.php');
require_once('PHPMailer-master/class.smtp.php');
include_once('PHPMailer-master/class.phpmail.php');
你只需要这个,如果需要的话 auto-load 另一个 类:
require 'PHPMailer-master/PHPMailerAutoload.php';
这行不通:
$name = strip_tags($_Post['name']);
PHP变量是case-sensitive,所以这样做:
$name = strip_tags($_POST['name']);
这会导致问题:
$mail->From = $email;
当您这样做时,您就是在伪造发件人地址,它会被 SPF 检查拒绝。将您自己的地址放在这里,让 reply-to 包含提交者的地址,正如您已经在做的那样。
如果表单不是通过该控件提交的,则 Submit
可能不会包含在提交中,例如如果它是通过在文本输入中点击 return 来提交的。检查您知道将始终在提交中的字段:
if (array_key_exists('email', $_POST)) {...
添加 try/catch 不会有任何效果 - PHPMailer 不会抛出异常,除非您提出要求,而您却没有。
您正在 body 上应用 strip_tags
,但随后调用 $mail->isHTML(true);
- 您是否想要 HTML?
综上所述,其中 none 会导致空白页。您很可能 运行 遇到了最近流行的 gmail 身份验证问题,并且发现您需要启用调试输出:
$mail->SMTPDebug = 2;
然后read the troubleshooting guide你所看到的。
我正在尝试在我的页面底部设置一个联系表。我正在使用 PHPMailer 并尝试通过我的 gmail 帐户接收电子邮件。每次我提交表单时,我的 url 都会更改为 url/email.php,并且我得到一个空白页。我究竟做错了什么?谁能看到我明显遗漏的明显错误?
HTML:
<div class="container-fluid">
<form action="email.php" id="contact-me" method="post" name="contact-me">
<div class="row-fluid">
<div class="form-group">
<div class="col-md-3 col-md-offset-3">
<input class="input" name="name" id="name" placeholder="Name" type="text">
</div>
<div class="col-md-3">
<input class="input" id="email" name="email"
placeholder="Email" type="text">
</div>
</div>
</div>
<div class="form-group">
<textarea class="input input-textarea" id="message" name="message" placeholder="Type your message here" rows=
"5"></textarea>
</div>
<input name="send" class="send" type="submit" value="Get In Touch">
</form>
</div>
</section>
PHP:
<?php
if (isset($_POST['submit']))
{
require('PHPMailer-master/PHPMailerAutoload.php');
require_once('PHPMailer-master/class.smtp.php');
include_once('PHPMailer-master/class.phpmail.php');
$name = strip_tags($_Post['name']);
$email = strip_tags($_POST['email']);
$msg = strip_tags($_POST['message']);
$subject = "Message from Portfolio";
$mail = new PHPMailer();
$mail->isSMTP();
$mail->CharSet = 'UTF-8';
$mail->Host = 'smtp.gmail.com';
$mail->SMTPAuth = true;
$mail->SMTPSecure = 'tls';
$mail->Port = 587;
$mail->Username = 'me@gmail.com';
$mail->Password = '***********';
$mail->From = $email;
$mail->FromName = $name;
$mail->AddAddress("me.com", "Katia Sittmann");
$mail->AddReplyTo($email, $name);
$mail->isHTML(true);
$mail->WordWrap = 50;
$mail->Subject =$subject;
$mail->Body = $msg;
$mail->AltBody ="No message entered";
if(!$mail->send()) {
echo 'Message could not be sent.';
echo 'Mailer Error: ' . $mail->ErrorInfo;
exit;
}else{
header("Location: thank-you.html");
}
}
?>
你这里有一些非常混乱的代码。您应该从 up-to-date 示例开始,而不是旧示例,并确保您使用的是最新的 PHPMailer(至少 5.2.10)。
不要这样做:
require('PHPMailer-master/PHPMailerAutoload.php');
require_once('PHPMailer-master/class.smtp.php');
include_once('PHPMailer-master/class.phpmail.php');
你只需要这个,如果需要的话 auto-load 另一个 类:
require 'PHPMailer-master/PHPMailerAutoload.php';
这行不通:
$name = strip_tags($_Post['name']);
PHP变量是case-sensitive,所以这样做:
$name = strip_tags($_POST['name']);
这会导致问题:
$mail->From = $email;
当您这样做时,您就是在伪造发件人地址,它会被 SPF 检查拒绝。将您自己的地址放在这里,让 reply-to 包含提交者的地址,正如您已经在做的那样。
如果表单不是通过该控件提交的,则Submit
可能不会包含在提交中,例如如果它是通过在文本输入中点击 return 来提交的。检查您知道将始终在提交中的字段:
if (array_key_exists('email', $_POST)) {...
添加 try/catch 不会有任何效果 - PHPMailer 不会抛出异常,除非您提出要求,而您却没有。
您正在 body 上应用 strip_tags
,但随后调用 $mail->isHTML(true);
- 您是否想要 HTML?
综上所述,其中 none 会导致空白页。您很可能 运行 遇到了最近流行的 gmail 身份验证问题,并且发现您需要启用调试输出:
$mail->SMTPDebug = 2;
然后read the troubleshooting guide你所看到的。