2

最近、Windows 共有ホスティングから VPS に移行しました。Web サイトの連絡先フォームで 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");
}
?>

実際に電子メールを送信する代わりに、上記をユーザーの画面に Web ページであるかのように印刷しているように見えます。それはあたかもサーバーがそれを html ページであると認識し、それを提供しているだけのようです。

4

2 に答える 2

1

あなたが書いた:

実際に電子メールを送信する代わりに、上記の [コード] を Web ページのようにユーザーの画面に出力しているように見えます。それはあたかもサーバーがそれを html ページであると認識し、それを提供しているだけのようです。

あなたの問題はphpMailer、または実際には電子メールとはまったく関係がないと思います。

これは、古いサーバーと新しいサーバーの PHP 構成のわずかな違いに過ぎないことはほぼ確実です。

あなたの PHP コードは短いスタイルの PHP タグを使用してい<?ます。

<?php多くの PHP サーバーは、この短いスタイルのタグを許可しないように構成されており、完全なタグで始まる PHP コードのみを実行します。

上で引用した発言であなたが述べたことを考えると、これはあなたの問題だと思います.

次の 2 つのオプションがあります。

  1. 長いスタイルの<?phpタグを使用するようにコードを変更してください。

  2. <?短いタグを許可するようにサーバー構成を変更してください。

可能であればオプション (1) を使用することをお勧めします。これは、長い形式のタグがベスト プラクティスと見なされているためです (短い形式のタグは<?xml、ほとんどの XML ドキュメントの先頭にあるマーカーと衝突する可能性があるため、お勧めしません)。

短い形式のタグがたくさんある場合<?(および許可されている場合)、サーバー構成を変更することを検討する価値があるかもしれませんが、長いタグに切り替えることで問題を簡単に解決できる場合は、そのほうがいい。

それが役立つことを願っています。

于 2013-06-12T13:59:49.227 に答える
0

答えてくれたSpudleyに感謝します。私は<?最初に持っていました(これは明らかに新しいphpインストールでは機能しない省略形です)。それが機能したはず<?php です。再度、感謝します。

于 2013-06-12T13:58:42.870 に答える