人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

sendmailとphpで質問です。
現在PHPを使ってウェブ上からメールを送るようにしてます。
このメールを送る際に外部のSMTPを使用したいと考えてます。
php.iniにそれらしき項目があったのですが、外部のものを使用するときはIDやPWが必要じゃないかと思っているのですがサーバーとポートの指定箇所がある程度でした。
設定項目があるので使用は出来ると思うのですが、php.iniでの指定の仕方について教えてください。
また可能ならGmailあたりを使ったテスト方法などもアドバイスいただけると助かります。

●質問者: quocard
●カテゴリ:インターネット ウェブ制作
✍キーワード:Gmail PHP sendmail SMTP アドバイス
○ 状態 :終了
└ 回答数 : 6/6件

▽最新の回答へ

1 ● dedara
●19ポイント

テキストだけのメールなら特に外部にサーバ立てなくても設定なしでmb_sendmail()とか。


外部のSMTPサーバならphp.iniで設定じゃなくて、PEAR::MAILとか使ってその処理の中でサーバーやアカウントだとかの設定するとかな気がします。


Gmailを使うならこのあたりとか。

http://www.yasashis.com/wordpress/2010/01/gmailのsmtp利用してメールを送信するphp/

◎質問者からの返答

phpmailerは便利そうです。

こちら試して見ます。

mb_sendmail()で外部smtpを使用できるならOKなんですが、そういった記述を見つけられませんでした。

php.iniでSMTPに関してIDやパスも設定できればいけるのかな?とも思っておりました。

Pear:Mailも考えたのですが外部サーバーでPear:Mailを入れることが出来なかったので質問させていただきました。


2 ● あすか
●19ポイント

php.iniにそれらしき項目があったのですが、外部のものを使用するときはIDやPWが必要じゃないかと思っているのですがサーバーとポートの指定箇所がある程度でした。

ということは、PHPをWindowsで動かしているのですね?

質問にそういう前提条件を書いていただけると助かります。


"php.ini" の SMTP にSMTPサーバのIPを、smtp_portにポート番号(通常は25)を記述して下さい。


しかし、どこのISPをご利用か分かりませんが、大手のプロバイダではOutbound Port 25 Blockingを実施していますので、自前のSMTPサーバにせよ外部のサーバにせよ、利用することはできないでしょう。

◎質問者からの返答

質問内容は読まれてますか?

php.iniにサーバーとポートを記述するのはわかってますが、それ以外の情報を書く場所がないので質問させていただいておりました。

外部のSMTPを使用できるのはわかっておりますしOP25がされている場合はポートの変更やAUTHの設定でいけると思っております。

それらを踏まえた上で回答いただけたら助かりました。


3 ● あすか
●18ポイント

質問内容は読まれてますか?

php.iniにサーバーとポートを記述するのはわかってますが、それ以外の情報を書く場所がないので質問させていただいておりました。

外部のSMTPを使用できるのはわかっておりますしOP25がされている場合はポートの変更やAUTHの設定でいけると思っております。

それらを踏まえた上で回答いただけたら助かりました。

何か勘違いされておいでのようなので、補足させていただきます。


sendmailなどのSMTPサーバは、基本的にID/パスワード等による認証の必要はありません。認証が必要なのはPOPやIMAPなどの受信サーバの方です。


参考

◎質問者からの返答

ありかとうございます。

まだ勘違いしているかもしれませんが、外部のものを経由する場合に勝手に使えるということになるのでしょうか?


4 ● JULY
●18ポイント

外部の SMTP というのが、ちょっと曖昧なのですが、例えば、固定 IP で ISP と契約しているような場合、OP25B の対象外となり、相手の MTA(つまり、相手のメールアドレスのドメインを使って、DNS に対して MX レコードを取得して得られるサーバ)に直接送信する事は可能です。

もちろんこの場合、相手の MTA に対して無関係のドメイン名を持つアドレスを送信した場合、通常は、相手の MTA が中継を拒否しておしまいです。

例えば、

といった事は出来ません。

で、個人契約のように、特定の IP の割り当てが保証されていない場合、多くの ISP では OP25B の対象となり、その ISP が管理している MTA にしか、TCP/IP のレベルでつながりません。

で、おっしゃっているのは、このようなケースで、例えば、ISP 以外の固定の MTA に対して送信したい、ということだと思います。であれば、もちろん、その送信相手の MTA が対応しているか否かにもよりますが、通常は Submission ポート(587 番)で、その相手 MTA の認証を受けるために SMTP-AUTH という手段を使います。

この SMTP-AUTH を使った送信を PHP で行うには、PEAR ライブラリを使うことになります。

Manual :: SMTP 認証を試みる

Net_SMTP パッケージ自体の使い方は、検索するとサンプルのプログラムはいくつか見つかると思いますが、参考までに一つ、紹介しておきます。

(PHP) Net_SMTPおよびNet_Mailでのメール送信 (r271-635)

◎質問者からの返答

ありがとうございます。

現在固定IPで運用してます。

いままではsendmailでそのまま送ってましたが、セキュリティ上の理由から

ちゃんとしたSMTPを利用したいと考えたわけです。

紹介いただいたNet_SMTPにはパスワードなどいれる場所もありますが、上の回答ではパスワードなどは不要であるとの回答もいただきました。

まだ理解出来ていないのか、勘違いしているのかわからなくなってきました。


5 ● あすか
●18ポイント

まだ勘違いしているかもしれませんが、外部のものを経由する場合に勝手に使えるということになるのでしょうか?

「外部のもの」という言葉が曖昧ですね。


現状、ネット上にあるSMTPサーバで、利用者認証無しに接続できるものは皆無です。迷惑メール発信の温床になることを避けるためです。


では、どのような利用者認証をしているかというと、これはSMTPサーバによりけりです。

たとえばGmailの場合、TLSまたはSSL認証を行いますので、PHP側のプログラムでハンドリングしてやる必要があります。単にphp.iniを書き換えただけでは対応できないということです。

PHPの実行環境においてTLSまたはSSLがソケットとしてサポートされているなら、fsockopen関数を使って比較的簡単にハンドリングできます。

そうでない場合は、PHP環境での実行は諦め、バッチ処理にした方が手っ取り早いと思います。

◎質問者からの返答

判りにくくてすいませんでした。

外部というのは今sendmailを使用して送信しているサーバー以外の事を指してました。

php.iniについてはよく見るとwin32と書かれていたのでRedhatでは意味のない項目のようでした。

PHPは少し古いですが5.1.6なのでTLS/SSLソケットはサポートされていると思います。


1-5件表示/6件
4.前の5件|次5件6.
関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ