0

メール機能を使うのは初めてです。これを使用してメールを送信しようとすると、コードは「正常に送信されました」と表示しますが、メールを受信しませんでした。これに関する多くの記事を読んで混乱しています。私を助けてください。

<?php
  if(isset($_POST['author'])&& isset($_POST['subject'])&& isset($_POST['text'])) {
    //Email
    $email_to = "lucy@yahoo.com";
    $email_subject = "Query From HYPERMARKETS";
    $name = $_POST['author']; // required
    $sub = $_POST['subject']; // required
    $comments = $_POST['text']; // required

    echo "POST:".$name.$sub.$comments;
    $error_message = "";

    $string_exp = "^[a-z .'-]+$";
    if(!strcmp($string_exp,$name)) {
      $error_message .= 'The Name you entered does not appear to be valid.<br />';
    }

    if(strlen($comments) < 5) {
      $error_message .= 'The Comments you entered do not appear to be valid.<br />';
    }

    if(strlen($error_message) > 0) {
      echo ("<center><table border=1 cellspacing=5 cellpadding=5><tr><th>$error_message</th></tr></table></center>");
    }
    $email_message = "Form details below.\n\n";
    $email_message .= "Name: ".$name."\n";
    $email_message .= "Subject: ".$sub."\n";
    $email_message .= "Comments: ".$comments."\n";


    // create email headers
    $headers = "From: mary@yahoo.com \r\n Reply-To: mary@yahoo.com \r\n" ;
    if(@mail($email_to, $email_subject, $email_message, $headers))
      echo "<center><table border=1 cellspacing=5 cellpadding=5><tr><th>MESSAGE SENT SUCCESSFULLY</th></tr></table></center>";
    else
      echo "<center><table border=1 cellspacing=5 cellpadding=5><tr><th>MESSAGE NOT SENT</th></tr></table></center>";
  }
  else
    echo ("<center><table border=1 cellspacing=5 cellpadding=5><tr><th>FILL ALL THE FIELDS..!!</th></tr></table></center>");
?>

こんにちは、php.ini ファイルを次のように構成しました。

[mail function]

   sendmail_from = postmaster@localhost
   SMTP = localhost
   smtp_port = 25
   sendmail_path = "\"C:\xampp\sendmail\sendmail.exe\" -t"
   sendmail_path = "C:\xampp\mailtodisk\mailtodisk.exe"

それはまだ動作しません。

4

5 に答える 5

4

mail() は実際にはメールを送信しません。送信を処理するために、生成したメッセージをホスト システムのメール サブシステムに送信するだけです。true の結果は、メール送信サブシステムがメッセージを有効なものとして受け入れたことを示します。メッセージが送信されたことを示すものではありません。

メールスプールを調べて、メッセージが配信を待っているかどうかを確認し、システムのメールログを調べて、PHP で生成されたメッセージを送信しようとしたときにエラーが発生しているかどうかを確認する必要があります。

メッセージが正常に送信されたとしても、受信されるとは限りません。スパム フィルターによって捕捉されるか、サーバーによって拒否されるか、単純に間違ったアドレスに送信される可能性があります。配信された後、受信者の電子メール クライアントによって迷惑メールとしてマークされた可能性があります。メッセージの送信を妨げる要因はいくつもあります。メールからの真の応答は、メッセージが正常に送信されたことを示すものではありません。

于 2012-10-24T06:40:02.870 に答える
3

開示:私はAlphaMailの開発者の1人です

続行するのにエラーがないので、ここで問題が何であるかを言うのはそれほど簡単ではありません。したがって、サーバーからSMTPサーバーに手動で接続して、手動で電子メールを送信することをお勧めします。このようにすると、二度と推測する代わりにエラーが発生します。

これを実行せず、単に「機能」させたい場合は、次のようなトランザクション電子メールサービスを使用することをお勧めします。

なんで?

  • メール配信についてそれほど考える必要はありません。
  • 統計学。合計送信数/クリック数/オープン数/バウンス数を追跡しましょう。
  • 多くの場合、SMTPではなくWebサービスベースです。つまり、扱いやすいです。
  • よりクリーンなコード(少なくとも、データをプレゼンテーションから分離するAlphaMailを使用する場合)。
  • スケーラブルで将来性のあるもの。

AlphaMailを使用する場合は、AlphaMailPHPクライアントを使用できます。

例:

include_once("comfirm.alphamail.client/emailservice.class.php");

$email_service = AlphaMailEmailService::create()
    ->setServiceUrl("http://api.amail.io/v1")
    ->setApiToken("YOUR-ACCOUNT-API-TOKEN-HERE");

$person = new stdClass();
$person->userId = "1234";
$person->firstName = "John";
$person->lastName = "Doe";
$person->dateOfBirth = 1975;

$response = $email_service->queue(EmailMessagePayload::create()
    ->setProjectId(12345) // Your AlphaMail project (determines template, options, etc)
    ->setSender(new EmailContact("Sender Company Name", "from@example.com"))
    ->setReceiver(new EmailContact("Joe Doe", "to@example.org"))
    ->setBodyObject($person) // Any serializable object
);

AlphaMailのもう1つの利点は、 AlphaMailダッシュボードでテンプレートを直接編集でき、Comlangテンプレート言語を使用して電子メールをフォーマットできることです。

<html>
    <body>
        <b>Name:</b> <# payload.firstName " " payload.lastName #><br>
        <b>Date of Birth:</b> <# payload.dateOfBirth #><br>

        <# if (payload.userId != null) { #>
            <a href="/sign-up">Sign Up Free!</a>
        <# } else { #>
            <a href="/login?id=<# payload.userId #>">Sign In</a>
        <# } #>
    </body>
</html>
于 2012-11-11T13:17:44.437 に答える
1

このサーバーでメールを送信したことがありますか? そうでない場合:

mail functionphp.ini でセクションを構成する必要があります。

まず、電子メールの送受信に SMTP がサポートされている必要があります。次に、php.ini ファイルSMTPで値を設定する必要があります。smtp_port

于 2012-10-24T06:40:28.253 に答える
0

まず、ポート 25 が開いていることを確認します。(サーバーが使用するのと同じインターネット接続から) WhatsMyIP.orgに接続してサーバーのパブリック IP アドレスを特定し、コマンド ラインから次のコマンドを試します。

telnet xxx.xxx.xxx.xxx 25

(xxx.xxx.xxx.xxx を WhatsMyIP.org の IP に置き換えます)

接続できる場合、この回答はあなたには向いていません。ごめん。

そうでない場合は、ローカルのファイアウォール設定をすべてチェックして、ポート 25 が開いていることを確認してください。ポート 25 も ISP によってブロックされている可能性があります。一部の (おそらくほとんどの) ISP は、スパムを防ぐためにデフォルトでポート 25 をブロックしていることが判明しました。

設定を誤った電子メール サーバーは、簡単に侵害され、スパム ボットネットで使用されます。自宅の電子メール サーバーを動作させる前に、Comcast に電話して、ポート 25 のブロックを解除してもらうために苦労しました。(ポート 25 に関する Comcast フォーラムの投稿)。

それでもうまくいかない場合は、電子メール サーバーの構成をもう一度見てみましょう。

于 2016-04-14T19:51:32.940 に答える
0

一部のホスティングでは、メールに追加のパラメーターが必要です。それはもしかしたらそうかもしれません。

    $ffrom = '-fmary@yahoo.com';
    if(@mail($email_to, $email_subject, $email_message, $headers, $ffrom));

あまり一般的ではありませんが、対処する必要があり、診断するのに何年もかかったので、念のため共有したいと思いました.

于 2013-09-09T12:18:06.683 に答える