2

我最近从 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 页面并且只是在提供它。

4

2 回答 2

1

你写了:

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

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

几乎可以肯定,这只是新旧服务器上 PHP 配置之间的细微差别。

您的 PHP 代码使用的是短样式 PHP 标记——即以<?.

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

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

你有两个选择:

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

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

如果可能,我建议采用选项 (1),因为长格式标记被认为是最佳实践(不建议使用短格式,因为它可能与<?xml大多数 XML 文档开头的标记发生潜在冲突)。

如果您有很多短格式<?标签(并且假设您被允许这样做),更改服务器配置可能值得考虑,但如果通过切换到长标签很容易解决问题,我会说那会更好。

希望有帮助。

于 2013-06-12T13:59:49.227 回答
0

感谢 Spudley 的回答。我<?一开始就有(这是一种速记,显然不适用于新的 php 安装)。它应该是<?php 它的工作。再次感谢。

于 2013-06-12T13:58:42.870 回答