[PHP-users 33800] 既存のmail、mb_send_mailを使用しないSMTP送信について

石山 宏幸 ishiyama @ minaqle.co.jp
2008年 7月 10日 (木) 14:50:34 JST


はじめまして、本日よりMLに参加させていただきました、sionと申します。
よろしくお願いいたします。

早速ですが、現在構築中のシステムについて相談があります。

■環境
・各種レンタルサーバー(Linux系、PHP4or5、MySQL利用可能が条件)

■最終的に知りたいこと
・sendmaiやqmail系のモジュールが搭載されていないor使えないサーバーで
メールの送信をする方法
・ソケット通信で送信したときの動作や、その仕組み

■内容(長くなります)
PHPでは、mailコマンドやmb_send_mail関数によりメールの送信が簡単に
出来るかと思いますが、これが諸事情で利用できない(制限している)
サーバーなどでどうしてもメールが送信したい場合があるんですが、
その場合にはどのようにメールを送信したらいいのかということです。
Googleなどで検索してみたところ、下記の方法を見つけ、試してみました。

・pearのパッケージのmailを導入し、SMTP指定で送信
・Qdsmtp(Qdmail)というクラスを利用
・ソケット通信で25(587、465等)に直接接続し送信

1.pearはサーバーによって導入も様々ですし、何よりバージョンの違いや
インストールの手間があるので、魅力的ではあるのですが排除しています。

2. QdSMTPですがこれはすごく簡単に送信が出来るし、便利だと思うのですが
もし商用利用する場合はやはり、作者の方の了承も必要でしょうし、まだ
開発途中らしいので、もう少し様子を見たいと思っています。

3. ソケット通信なのですが、現状ではこれを試しています。
(私自身がいまだにネットワークの仕組みを理解しきれていないのですが)
こちらで聞くことではないのかもしれませんが、お力を貸していただけたらと思っ
て投稿しています。
私の考えているメール送信の仕組みというか、ソケット通信は・・・

[PHが動作しているサーバー]
1.PHPからfsockopenで自分自身の25ポートにアクセス
2.HELO コマンド〜以下省略〜にてソケットにより開かれたファイルポインタへ
コマンドを書き込んでいく。(返答により処理をする)
3.QUITで閉じる

この方法は、サーバーにqmailやsendmailといったモジュール?が
導入されていなくても送信が出来るという考え方でいいのでしょうか。
TCPの指定されたポートにつないで、直接コマンドを打つ・・しかし、
打たれたコマンドがどうなっているのかはわからないのです。
現在、借りているレンタルサーバーは、sendmailが使えるのですが
あえてソケットにしてみたところ問題なく動いています(当然ですよね)
mailコマンドなどは結局のところ、sendmailを直接コマンドで叩いて
呼び出して、ソケット通信処理をしてくれているという解釈でいいのでしょうか。

でも、ローカルで構築したsendmail系のモジュールが入ってないサーバーでは
そもそも25番のポートすらアクセスできません。ソケット通信の時点で
エラーになっています。
80ポートをfsockopenで開く分にはきちんとコネクションが確立しています。


長くなりましたが、よろしければ皆様の知識でお助けください。

sion




PHP-users メーリングリストの案内