0

私はアプリケーションを開発しており、PHP で mail() 関数をテストしています。以下は、自分自身に電子メールを送信するためにローカル マシンで問題なく動作しますが、テスト環境からローカル マシンに送信しようとすると、黙って失敗します。

「Mail Sent」メッセージは引き続き表示されますが、メッセージは送信されません。php.ini ファイルでメールのログ記録をオンにしましたが、ページを更新した後もデータが取り込まれていないようです。

繰り返しますが、.php ファイルと php.ini ファイルは両方の環境で同一です。テスト環境ではポート 25 が開かれており、Microsoft Exchange サーバーを使用しています。

<?php
    $to = "user@example.com";
    $subject = "Test mail";
    $message = "Hello! This is a simple email message.";
    $from = "user@example.com";
    $headers = "From:" . $from;
    mail($to,$subject,$message,$headers);
    echo "Mail Sent.";
?>

php.ini ファイルの SMTP エリア:

[mail function]
; For Win32 only.
; http://php.net/smtp
SMTP = exhange.server.org
; http://php.net/smtp-port
smtp_port = 25

; For Win32 only.
; http://php.net/sendmail-from
sendmail_from = user@example.com
4

3 に答える 3

1

まず、メールが失敗しても「Mail Sent.」とエコーします。表示されます。PHP 関数 mail() は、成功すると true を返し、失敗すると false を返します。if に入れると、メールが送信されたかどうかを確認できます。

if(mail($to,$subject,$message,$headers)) echo "Mail Sent.";

メールが送信されたかどうかを確認するために作業する必要があります。

機能していないという問題については、よくわかりませんし、間違っている可能性もありますが、私の経験では、一部のサーバーは各ヘッダー行の後ろに \r\n を必要としています。

$headers = "From:" . $from . "\r\n";

しかし、すでに述べたように、私は間違っている可能性があり、ここの例に関連している可能性があります.1つのヘッダー行を使用する場合は必要ありません - http://php.net/manual/en/function.mail.php

メール機能をテストしているとき、ヘッダー情報をメール機能に入れず$to$subject, $message. あなたはそれを試してみてください。私は自分自身でphpメール関数を使用するのが本当に嫌いで、常にPHPメーラークラスを使用しています。

メールを送信できないという本当の問題にお答えできなかった場合は申し訳ありません。私はあなたを願っています

于 2012-09-22T21:11:56.903 に答える
0

ホスティング サービス プロバイダーが送信 SMTP 認証をブロックしている場合があります。ホスティング プロバイダーに確認してください。

于 2012-12-23T15:52:07.030 に答える
0

PEAR と Mail.php の PHP ディストリビューションをチェックインします。コマンドラインで、「php -i」と入力してリソースを見つけます。PEAR と Mail.php は、5.2 以上のディストリビューションではかなり一般的だと思います。私は Mac および Linux サーバーを使用しており、PHP メール機能よりも PEAR メールを好みます。Windows も同様である必要があります。PEAR Mail を使用して複数のメールを送信する例を次に示します。

 /** PEAR::MAIL
 * PEAR::Mail only opens one mail socket for multiple emails sent
 */
 require_once('/opt/local/lib/php/Mail.php');

 $body = $_POST['message'];
  //using sendmail on backend
 $params['sendmail_path'] = '/usr/sbin/sendmail';

 //using factory method
 $mail_object =& Mail::factory('sendmail',$params);

 //loop through selected users to send
 for ($i=0;$i<count($recipients);$i++){
 if (!empty($recipients[$i]['email'])&&($recipients[$i]['alt_email'])){
 //concatinate email and alt_email
 $address = $recipients[$i]['email'].",".$recipients[$i]['alt_email'];
 }
 else {
 //only one user address
 $address = $recipients[$i]['email'];    
 }

//send the mail instance    
$mail_object->send($address,$headers,$body); 
if (PEAR::isError($mail_object)) {print($mail_object->getMessage());}
} //close the for loop
于 2012-09-22T21:51:09.643 に答える