web-dev-qa-db-ja.com

localhostのphp mail()関数

ローカルホストサーバーのphp mail()関数に問題があります。 PHP関数mail()を使用してメールを送信しようとすると、ローカルホストでメールアプリケーションをテストできません。

このエラーが発生しますWarning: mail() [function.mail]: Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in F:\wamp\www\product\ajax.php on line 64

私はWAMPサーバーを使用しています。誰かが解決策を知っている場合は、私を助けてください。

14
Shark

メール機能を使用するには、マシンにメールサーバーをセットアップする必要があります。 Windowsを使用している場合(これはWAMPを使用しているためと思われます)、 Pegasusメールサーバー を設定できます。

その他のオプションには、 SwiftMailer または PHPMailer などのラッパークラスの使用と、GMailアカウントなどの別のSMTPサーバーへの接続に使用することが含まれます。独自のlocalhostルートでPegasusメールサーバーにアクセスする場合でも、上記の2つのクラスのいずれかを使用することをお勧めします。彼らはあなたにはるかに柔軟性を与え、より安全です。

ISPのSMTPサーバーまたはGMailに接続するか、このルートから最も簡単なルートを使用します。

14
Treffynnon

このphpメール機能の問題に2日間費やした後、私はそれを理解しました。これは十分な時間を無駄にしました、始めましょう...

PHPには、スクリプトからメールを送信するために使用できるphpメール関数が組み込まれていますが、シンプルなメール転送プロトコル(SMTP)サーバーに接続できないため、この関数はなんらかの制限があります。私はあなたがWAML/XAMPPを使用していると想定していますが、実際にはXAMPPを試していませんが、次のことを理解できます。

最初に、Webサーバー(Wamp)を外部SMTPに接続する方法を見つける必要があります。この場合はGmailを使用しますが、その前に、phpスクリプトからメールを取得してGmail SMTPにプッシュするツールをダウンロード/インストールする必要があります。

  1. まず http://glob.com.au/sendmail/ に移動し、ダウンロード_sendmail.Zip_をクリックしてダウンロードします。
  2. ダウンロード後、_C:\wamp\_に抽出します。フォルダとして抽出します。つまり、その内容はsendmailというフォルダにあり、_C:\wamp\sendmail_に配置できます。
  3. メールの送信フォルダーで、_sendmail.ini_を右クリックし、内容を変更しようとしているため、管理者として開きます。
  4. 次の行を変更します

    _[sendmail]
    smtp_server=smtp.gmail.com
    smtp_port= 465
    smtp_ssl=ssl
    default_domain=localhost
    error_logfile=error.log
    debug_logfile=debug.log
    auth_username= enter your gmail account here        
    auth_password= enter the password for that account here
    ;pop3_server=
    ;pop3_username=
    ;pop3_password=
    ;force_sender=
    ;force_recipient=
    hostname= localhost 
    _

    上記のように注意してください。読みやすくするために、_sendmail.ini_ファイルから不要なコンテンツのほとんどを削除しました。

  5. ファイルを保存します

  6. wampフォルダーに移動して_bin\Apache\apache[version here]\bin\php.ini_に移動し、phpファイルを管理者として次のように変更します。

    メモ帳を使用している場合は、編集タブまたは ctrl+F "メール関数"と入力して、_php.ini_ファイルのメール関数部分にすばやく移動します。

    _[mail function]
    ;For Win32 only.
    ;http://php.net/smtp
    ;SMTP = localhost
    ;http://php.net/smtp-port
    ;smtp_port = 25
    
    ;For Win32 only.
    ;http://php.net/sendmail-from
    ;sendmail_from = 
    
    ;For Unix only.  You may supply arguments as well (default: "sendmail -t -i").
    ;http://php.net/sendmail-path
    sendmail_path = "C:\wamp\sendmail\sendmail.exe -t -i" ----> this is the changed part. 
    _

    注:上記に変更する必要があるのは_sendmail_path_のみです。他の設定はそのままにしておいてください。 sendmailフォルダーを抽出した場所に応じて、パスは異なる場合があります。

  7. その_php.ini_ファイルを保存します

  8. _C:\wamp\bin_に戻って_php\php[version here]\php.ini_を選択し、上記と同じようにsendmailパスを編集し、ファイルを管理者として保存するか、開く前に右クリックして管理者としてファイルを開きます。

  9. Wampserverを管理者として実行し、緑色に変わったら、以下をオンにします。

    緑色のアイコンを左クリックして、php-> php extensions-> php_socketsに移動します(クリックして黒のチェックを行います)

    アイコンが再び緑色に変わるのを待ち、上記に従ってphp_opensslをオンにします。

    アイコンが緑色に変わったら、緑色のwampserverアイコンをクリックしたときにApache icomに移動して、ssl_moduleをオンにするときです。これはApacheモジュールにあります。

    上記の3つのステップが完了したら、終了してwampserverを管理者として再度実行し、変更を有効にします。

  10. Sendmailで抽出したフォルダーに戻り、_sendmail.exe_を右クリックします。
    プロパティに移動->互換性->すべてのユーザーの設定を変更->互換モード[windows xp(サービスパック3)に変更]->このプログラムを管理者として実行[このオプションをチェック].

    保存して適用します。
    sendmailアプリを呼び出すたびに管理者として実行されるように、これを行う必要がありました。

  11. 次に、このsendmailアプリで動作するようにGmailアカウントを構成する必要があります。 Gmailアカウントにログインし、右上にある歯車をクリックして設定を選択します。設定で[転送とPOP/IMAP]タブに移動し、IMAPを有効にします。変更内容を保存

  12. 最後に受信トレイに戻ります。メールアドレスの横の右上隅に小さな下向きの矢印が表示されているので、それをクリックして[アカウント]を選択します。お持ちでない場合は、プロフィール写真をクリックして、そこから[マイアカウント]を選択してみてください。

    [サインインとセキュリティ]タブをクリックし、ページの一番下までスクロールします。 [安全性の低いアプリを許可する]を見つけて、有効にします。主にこれはオフになります。

  13. これで、localhostのphpスクリプトからメールを送信できます。 mail()関数を4つの最小パラメーターで試してみてください。お役に立てれば。より興味深い解決策を投稿するのに時間がかかるように、それが役立つかどうか投票してください。

8
linuxhini

これは、Windowsでmail()を使用する場合のよく知られた問題で、通常はローカルSMTPサービスがありません。エラーメッセージにあるように、認証の有無にかかわらず、送信メッセージの送信が許可されているメールサーバーと通信するには、php.iniでSMTP設定を定義する必要があります。 mail()のドキュメントを参照してください。

1

Windowsでメールサーバーを作成する最も簡単な方法は、Pythonをインストールしてから、次のワンライナーで組み込みのSMTPデバッグサーバーを使用することです。

python -m smtpd -c DebuggingServer -n localhost:25

Windowsでは、localhostと127.0.0.1で時々奇妙な動作をすることがわかったので、他のすべてが失敗した場合、(DOSコマンドプロンプトで) 'ipconfig'コマンドを使用してIPアドレスを見つけようとすると、何かが表示される場合がありますお気に入り:

c:\> ipconfig

-- stuff cut here ---

Wireless LAN adapter WiFi:

Connection-specific DNS Suffix  . :
Link-local IPv6 Address . . . . . : fe80::856d:fd33:3e01:e656%9
IPv4 Address. . . . . . . . . . . : 192.168.8.111
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . : 192.168.8.1

そして、IPアドレスが192.168.8.11であると(たとえば、上の例で行ったように)、コマンドを次のように変更するとします。

python -m smtpd -c DebuggingServer -n 192.168.8.11:25

そして、php.iniファイルに次の行を設定します。

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

そして、これは私にとって他に何もしない状況でうまくいきました!

次のコマンドを入力して、ローカルメールサーバーが動作しているかどうかを確認することもできます。

C:/> telnet localhost 25

または私の2番目の構成の場合:

C:/> telnet 192.168.8.111 25

LinuxではTelnetが無料で提供されますが、Windowsで取得するには、[プログラムと機能]に移動し、[左側の小さなパネルから] [Windowsの機能をオンまたはオフにする]をクリックして、[Telnet]のチェックボックスをオンにする必要があります。 Windowsの機能のリストにある「クライアント」。

Telnetコマンドを実行すると、サーバーが実行されていない場合は次のようになります。

C:\Projects>telnet localhost 25
Connecting To localhost...Could not open connection to the Host, on port 25: Connect failed

しかし、それがすべて機能している場合は、画面をクリアして、「サーバー識別子」文字列をメールサーバーから戻す必要があります。私のマシンではこれは次のようになりました:

220 ZOOT Python SMTP proxy version 0.3     

本当に熱心であれば、いくつかのSMTPコマンドを入力してここにメールを送信するか、「quit」と入力してサーバーから切断することができます。

0
Paul Coldrey

Localhostのメールサーバーを設定してみてください。それ以外の場合は、localhostでは機能しません。

0
Technogupshup