在iis7上设置phpmailer

时间:2013-06-12 13:12:49

标签: php iis phpmailer

我最近从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页面而只是服务它。

2 个答案:

答案 0 :(得分:1)

您写道:

  

而不是实际发送电子邮件,它似乎只是将上面的[代码]打印到用户的屏幕上,好像它是一个网页。就好像服务器认为它是一个html页面而只是服务它。

我认为你的问题与phpMailer无关,或者根本就是电子邮件。

这几乎可以肯定是旧服务器和新服务器上的PHP配置之间的一个小差异。

您的PHP代码使用的是短样式的PHP标记 - 即从<?开始。

许多PHP服务器配置为不允许这种短样式标记,并且只运行以完整<?php标记开头的PHP代码。

鉴于你在我上面引用的评论中所说的,我怀疑这是你的问题,因为你所描述的正是我期望的症状。

您有两种选择:

  1. 更改代码以使用长样式<?php标记。

  2. 更改您的服务器配置以允许短<?标记。

  3. 如果可能的话,我建议选择选项(1),因为长格式标签被认为是最佳做法(不建议使用简短形式,因为它可能会在开始时与<?xml标记发生冲突。大多数XML文档)。

    如果你有一个很多的短格式<?标签(假设你被允许这样做),改变服务器配置可能值得考虑,但是如果它很容易足以通过切换到长标签来解决问题,我会说会更好。

    希望有所帮助。

答案 1 :(得分:0)

感谢Spudley的回答。我在开始时有<?(这是一个显然不适用于新的php安装的速记)。它应该是<?php使它成功。再次感谢。