0

PHPのmail()関数の使用に問題があります。単に送信されません。

私は次のとおりです。

//email them new password
$recipient = $actual_email; //recipient
$subject = "Reset Password"; //subject = reason for contacting
// To send HTML mail, the Content-type header must be set
$headers  = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1" . "\r\n";
$headers .= "From: Website <do-not-reply-reset@domain.co.nz>\r\n"; //headerfields
$mail_body = "
  <html>
   <head>
     <title>Reset Password</title>
   </head>
    <body>
        <h2>Reset Password</h2>
        <p>Hello $actual_email<br />
        You recently asked to reset your password.</p>
        <p>Your reset password is below:<br />
        <br />
        <b>$string</b></p>
        <br />
        <p>It is recommended you copy and paste this password into the login page, and change your password under settings, then delete this email.</p>
        <p>If you did not request this change of password, it is recommended you login and change your password immediately, and get in contact with us.</p>
        <p>Thank you,<br />
        The Team
        <br />
        NOTE:<br />
        Please do not reply to this message, which was sent from an unmonitored e-mail address. Mail sent to this address cannot be answered.</p>
     </body>
    </html>";       
//send mail
if(mail($recipient, $subject, $mail_body, $headers)){ //mail command
   header('Location: index.php?success=yes');
   exit;
} else {
   $error_message = "<div class='error'>
      <img src='http://resources.domain.co.nz/backgrounds/icon_error.png' class='messageimg' />
    <h4>Error - Recovery Error</h4>
    <p>There was an error sending a recovery password. If the problem persists, please contact us directly.</p>
   </div>"; 
}

sendmailがUNIXのデフォルトの場所にインストールされ、PHP.iniで正しく参照されていることを確認しました。

以前にこれと同じコードを使用したことがあり、問題はなかったので、サーバー側のものだと思いますか?

助けていただければ幸いです。

4

4 に答える 4

0

開示: 私は AlphaMail の背後にいる開発者の 1 人です

WebnetMobile が言っているように、PHP に組み込まれている mail() 関数の使用もやめることをお勧めします。PHP 用の優れた SMTP クライアントを探している場合は、むしろSwiftMailerまたはPHPMailerを使用することをお勧めします。(コードがよりクリーンになり、エラーの処理が容易になります)。

ただし、これはクライアント側からのものであり、「送信」された電子メールが配信されることを保証するものではありません。したがって、次のようなトランザクション メール サービスを使用することをお勧めします。

なんで?

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

AlphaMail を使用する場合は、AlphaMail PHP-clientを使用できます。

例:

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-14T23:56:59.563 に答える
0

コードは私には問題ないように見えます。サーバーに関係するはずです。サーバーが適切にセットアップされていると思われる場合は、selinux が原因である可能性があります。シェルから確認してください:

getsebool -a | grep mail

みたいな答えが返ってきたら

allow_postfix_local_write_mail_spool --> off

あなたが問題を見つけるよりも。

無効にするか、次のコマンドを使用して、httpd からメールを送信できるようにします。

setsebool -P httpd_can_sendmail on

これで問題が解決しない場合は、ログからエラー メッセージを投稿してください。

于 2012-11-20T11:00:39.150 に答える
0

メールを機能させるには、SELinux をオフにする必要があります。

一度オフにして、マシンを再起動すると、mail() は問題なく機能しました。

于 2012-11-18T22:27:07.467 に答える
-1

Linux サーバーでメールの送信が適切に構成されているかどうかを確認し、それに応じて PHP.INI の設定を変更します。

于 2012-11-15T12:04:41.897 に答える