PHP でメール送信関数を作成すると、次のような非常に奇妙な問題が発生します。
警告: mail(): "localhost" ポート 25 でメールサーバーに接続できませんでした。php.ini の "SMTP" と "smtp_port" 設定を確認するか、....
で ini_set() を使用してください。
もちろん、この赤色は Web ページ上に表示されるものではなく、単なる説明ですが、表示される色を設定することもできます。
関連する技術ブログを含め、インターネットで関連する回答を検索しましたが、そのほとんどが php.ini の [メール機能] 関数を変更して SMTP の関連機能を開くというものでした。詳細な変更点は次のとおりです:
【メール機能】
SMTP = ローカルホスト
smtp_port = 25
sendmail_from = youremailUsual@domin.com
; このメールは From 側からのものであることに注意する必要があります。
sendmail_path = ""
; 最初は空ですが、後で説明します。
mail_add_x_header = オン
;これはデフォルトでオンになっているため、変更する必要はありません
この時点で、修正が完了したら、Apache を再起動します。もちろん、この操作は CMD で実行しました。
再起動後、ページを更新してもエラーはまだ存在します。
ここでスタックオーバーフローに言及されていましたが、[コントロールパネル] - [管理ツール] でこの項目が見つかりません。Win7 なので、[プログラムの追加と削除] でオンにしました。この時点で、図に示すように、SMTP 項目を開いて設定することができます。スクリーンショット:
訂正:写真を再投稿するのを忘れていましたので、訂正No.7-5です
この経験から学んだ後、smtp プロトコルの詳細な説明について Wikipedia を確認しました。ここをクリックしてください: Simple Mail Protocol
。
戻って、[メール機能] を次のように変更してください:
; 126メールボックスの設定を例に挙げます
SMTP = smtp.126.com
smtp_port = 25
sendmail_from = my126EmailAddress@126.com
sendmail_path = ""
mail_add_x_header = オン
同時に、一貫性を維持するために、プログラム内の $from 変数の値が変更されました。
[前のテストのため、phpinfo() 関数がプログラムに追加されました。実行後、ページ上でメール項目を検索すると、当然、Localhost 値とマスター値があることがわかります。 Localhost Value はプログラム内の値を指し、master Value は php.ini の設定です。
実行後、魔法のエラーは消えましたが、次のエラーが発生しました:
mail(): SMTP サーバーの応答: 553 メールを送信する権限がありません。認証が必要です aaf353e4-8ac5-416e-9cd5-6b54fc592764
その後、QQ、Gamilなどの他のメールアドレスを変更したところ、上記のようなエラーが表示され、それが何を意味するのか理解できました。
このステップでは、成功には程遠いように思えます。クライアントを使用してメールボックス ユーザーを構成したとき、最後のステップで「サーバー認証」をオンにする必要があるかどうかを尋ねられたことを覚えています。最後に、偶然ファイルを見つけました。 sendmail というパッケージをダウンロードします。アドレスは次のとおりです。
その後、PHP のルート ディレクトリに新しいフォルダーを作成し、sendmail という名前を付けます。次に、圧縮パッケージをその中に入れて解凍し、sendmail.ini というファイルを変更します。
;中国の fomus 電子メールプロバイダー 126 を例に挙げます
[メール送信]
smtp_server= smtp.126.com
smtp_port=25
default_domin =126.com
auth_username= メールアドレスの文字 '@' の前の文字列
auth_password= メールボックスへのログインを許可するパスワード
ホスト名= 126.com
その後、同じ場所にある php.ini を変更する必要があります:
SMTP = smtp.126.com
; ここで localhost に変更しても同様で、他のオプションは変更されません。
smtp_port = 25
sendmail_from = my126EmailAddress@126.com
sendmail_path = "あなたのsendmailパス/sendmail.exe -t "
; もちろん、このパスの前半には、PHP インストールのルート ディレクトリが含まれている必要があります。「」を「/」に置き換える必要があると思います。
mail_add_x_header = オン
設定が完了したので、Apache を再起動し、ページを更新すると、プログラムに設定されている $to は独自の 126 および QQ メールボックスであり、もちろんループで送信されるため、エラーは消えます。
デスクトップの右下隅にある QQ に Sanfeng の電子メール プロンプトがポップアップ表示されたのを見て、開いた電子メールの内容がページに入力した内容と一部同じであることがわかりました。ローカルデータベースから読み取られました。
著者: ティアン・ハオユー