1

この質問のタイトルはかなり使い古されていることに気づきましたが、私の問題に対する答えを見つけることができませんでした。これは、PHPが苦手で問題がわからないか、別の問題があるためか、投稿して誰かが助けてくれるかどうかを確認したいと思いました。

私は自分の街の地元の教会のウェブサイトを開発し、自分のコンピューターでそのサイトを作成し、それをサブディレクトリとして自分のウェブサイトに配置し、すべてをテストしました。それはうまくいきました。クライアントが望んでいたことの1つは、電子メールを送信できる電子メールフォームがあることでした。私はそれを作りました、そしてすべては良かったです。

それから私はそれを教会のサーバーにアップロードし、それもうまくいったと思いました。しかし、その後、メールフォームを試してみることにしました。何らかの理由で機能しませんでした。

ユーザーにラジオボタンで受信者(牧師、オフィスマネージャーなど)を選択してもらうことでメールフォームを作成しました。これにより、メールフォームの動作が変わります。私はちょうどこのようなことをしました:

if (recipent == "pastor") {
    document.forms[0].action = "../scripts/php/pastor_contact.php";
} else if (recipent == "pastoralAssist") {
    document.forms[0].action = "../scripts/php/pastoral_assist_contact.php";    
} else if (recipent == "famMinistry") {
    document.forms[0].action = "../scripts/php/sacra_assist_contact.php";   
} else if (recipent == "sacraAssist") {
    document.forms[0].action = "../scripts/php/fam_ministry_contact.php";   
}

これが最もクリーンではないことはわかっていますが、うまく機能します。その場合、phpファイルはすべてこれと非常によく似ています(異なる電子メールのみ)」

<?php
$name = $_POST['name'];
$email = $_POST['email'];
$phone = $_POST['phone'];
$message = $_POST['message'];
$formcontent="From: $name \n Email: $email \n Phone Number: $phone \n Message: $message";
$recipient = "email@example.com";
$subject = $_POST['subject'];
$mailheader = "$subject \r\n";
mail($recipient, $subject, $formcontent, $mailheader) or die("There seems to be an error with this form. Sorry about the inconveince. We are working to get this fixed.");
header('Location: ../../quickylinks/message_sent.html') ;
?>

これは簡単に言うと、電子メールフォームから情報を収集し、それを電子メールとして送信してから、ユーザーを「送信済みメッセージ」ページにリダイレクトします。これは私のサーバーでは機能しますが、彼らのサーバーでは機能しないので、彼らのサーバーと関係があると思います。

あなたはここで彼らのサーバー情報を見ることができ、ここで私のものを見ることができます

ユーザーがメッセージを送信すると、「このフォームにエラーがあるようです。ご不便をおかけして申し訳ありません。これを修正するために取り組んでいます。」と表示され、コードは同じですがメールは送信されません。私のサーバーとそれはそこで正常に動作します。

私の最初の考えは、PHPがサーバーにインストールされていなかったということでした(まれですが、実際に発生します)。しかし、そうでした。それで、インストールされているのではないかと思いましたが、「メール」機能が無効になりました。だから私は次のphpコードを試しました:

<?php 
if (function_exists('mail')) { 
    echo 'mail() is available'; 
} else { 
    echo 'mail() has been disabled'; }
?>

そして「mail()が利用可能」で戻ってきました。

だから今私は立ち往生していて、問題があり得るかどうかわかりません。私が言ったように、私はまだPHPがあまり得意ではないので、誰かが詳細な答えを与えることができれば、私は本当に本当に感謝しています!

どうもありがとう!

4

4 に答える 4

1

サーバーにメールプログラムがインストールまたは構成されていない可能性があります。何が起こっているのかを調べてクライアントサーバーの問題を修正するには、そのサーバーへのrootアクセスが必要です。また、サーバーにssh接続して、必要なものを確認/インストール/構成する必要がある場合があります。

最初にすべきことは、sshを使用してサーバーにログインし(おそらく共有ホストの場合は適用されません)、phpcliインターフェイスを試してみることです。

何も機能しない場合は、サーバー上のphp.iniファイルを編集して、メール送信に使用するプログラムをphpに通知する必要があります。

それでも何も起こらない場合は、メールプログラムをインストールして構成する必要があります。これは、おそらくサーバー上で正しく機能しないためです。

編集:

一見すると、サーバーには値のないsendmail_pathがあります。これは、phpがどのプログラムからメールを送信するかについての手がかりがないことを意味している可能性があります。

ただし、設定は、sendmail_path設定 / usr / sbin / sendmail-t-iがあることを示しています。

したがって、サーバー上のphp.iniファイルsendmail_pathを編集します(サーバーのsendmailプログラムのパスを知っている必要があります)

于 2012-12-06T22:54:26.047 に答える
0

本番サーバーはWindowsコンピューターです

新しいサーバーでは、mail()は実際に使用可能ですが、構成されていません。

phpからメールを送信できるようにするには、php.iniを編集してSMTPサーバーを使用する必要があります。

Linuxサーバーである開発サーバーはすでに正しく構成されています。本番サーバーは、電子メールを送信するように構成する必要があるWindowsコンピューターです(php.iniを編集してください)。デフォルトでは、Windowsには電子メールサーバーが組み込まれていないため、インストールするか、ISPが提供するものを使用する必要があります。

于 2012-12-06T23:01:43.567 に答える
0

mail()関数の代わりにPHPMailerクラスを使用することを強くお勧めします。

SMTPサーバー(クライアントのサーバーなど)を簡単に構成し、それを使用して電子メールを送信できます。

詳細については、test_smtp_basic.phpの例を参照してください。

于 2012-12-06T23:03:18.987 に答える
-1

これから"You can see their server information here"あなたのサーバーはsendmailパスを持っていませんここに画像の説明を入力してください

于 2012-12-06T23:02:47.530 に答える