我最近从Windows共享托管转移到了VPS。我很难让phpmailer为我的网站上的联系表格工作。
我的网站设置要发送的电子邮件的代码是:
$mail->IsSMTP(); // set mailer to use SMTP
$mail->Host = "smtp.gmail.com"; // specify main and backup server or localhost
$mail->SMTPAuth = true; // turn on SMTP authentication
$mail->SMTPSecure = "tls";
$mail->SMTPDebug = 1; // can vary the amount of debug info given on error
$mail->Username = "mail@mydomain.com"; // SMTP username
$mail->Password = "########"; // SMTP password
$mail->Port = 587;
此代码适用于旧的Windows共享主机。其他一切也与网站(class.phpmailer.php文件等)
相同所以我猜这与我的iis或服务器本身的设置有关。
根据我为我检查过的虚拟主机
,连接在端口587上工作我使用Microsoft工具安装了php,它可以为您完成所有工作。该网站是在PHP并正在工作,它看起来像我的未经训练的眼睛,就像一切都很好。
我已经检查过启用了php_openssl.dll。
我花了很长时间阅读并摆弄没有运气。我真的不知道接下来要看什么。任何想法可能是什么或我应该尝试什么?
谢谢!
菲尔。
编辑:
php表单上的操作是转到contactprocessor.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 = "smtp.gmail.com"; // specify main and backup server or localhost
$mail->SMTPAuth = true; // turn on SMTP authentication
$mail->SMTPSecure = "tls";
$mail->SMTPDebug = 1; // can vary the amount of debug info given on error
$mail->Username = "mail@mydomain.com"; // SMTP username
$mail->Password = "########"; // SMTP password
$mail->Port = 587;
$redirect_url = "http://www.mydomain.com/contact/contact_success.php"; //Redirect URL after submit the form
$mail->From = $mail->Username; //Default From email same as smtp user
$mail->FromName = "Website Contact Form";
$mail->AddAddress("mail@mydomain.com", "From Contact Form"); //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 = "From Contact Form";
$message = "FullName: ".htmlspecialchars($_POST['fullname'])." <br> <br>
\r\n <br>EmailAddress: ".htmlspecialchars($_POST['email'])." <br> <br>
\r\n <br>Phone Number: ".htmlspecialchars($_POST['mobile'])." <br> <br>
\r\n <br> Message: <br>".htmlspecialchars($_POST['message']);
$mail->Body = $message;
if(!$mail->Send())
{
echo "Sorry the message could not be sent. Please email mail@mydomain.com instead. Thanks<p>";
echo "Mailer Error: " . $mail->ErrorInfo;
exit;
}
echo "Message has been sent";
header("Location: $redirect_url");
}
?>
而不是实际发送电子邮件,它似乎只是打印上面的用户屏幕,就好像它是一个网页。就好像服务器认为它是一个html页面而只是服务它。
答案 0 :(得分:1)
您写道:
而不是实际发送电子邮件,它似乎只是将上面的[代码]打印到用户的屏幕上,好像它是一个网页。就好像服务器认为它是一个html页面而只是服务它。
我认为你的问题与phpMailer无关,或者根本就是电子邮件。
这几乎可以肯定是旧服务器和新服务器上的PHP配置之间的一个小差异。
您的PHP代码使用的是短样式的PHP标记 - 即从<?
开始。
许多PHP服务器配置为不允许这种短样式标记,并且只运行以完整<?php
标记开头的PHP代码。
鉴于你在我上面引用的评论中所说的,我怀疑这是你的问题,因为你所描述的正是我期望的症状。
您有两种选择:
更改代码以使用长样式<?php
标记。
更改您的服务器配置以允许短<?
标记。
如果可能的话,我建议选择选项(1),因为长格式标签被认为是最佳做法(不建议使用简短形式,因为它可能会在开始时与<?xml
标记发生冲突。大多数XML文档)。
如果你有一个很多的短格式<?
标签(假设你被允许这样做),改变服务器配置可能值得考虑,但是如果它很容易足以通过切换到长标签来解决问题,我会说会更好。
希望有所帮助。
答案 1 :(得分:0)
感谢Spudley的回答。我在开始时有<?
(这是一个显然不适用于新的php安装的速记)。它应该是<?php
使它成功。再次感谢。