• ベストアンサー

少し特殊?な状況でメール送信

WEB関係の仕事をしていますが、まだまだ勉強中の身です。 文才がなく長文になりそうですので予めお詫び致します。 クライアント(A社とします)からPHPでメール送信プログラムの作成依頼を受けましたが、少し特殊?な状況でメール送信ができません。 WEBサーバ:A社に設置(WEB予約システムをメイン) WEBサーバの構築と管理:予約システムの制作会社(B社とします) WEBサーバ内には独自ドメインのホームページ(hoge.orgとします) ドメイン・DNS管理:C社 メールアドレス:独自ドメインで取得できず、abc@hoge.netという別ドメインで取得(C社サーバ内) という状況です。 WEBサーバ内でphpinfo()を実行したところ、メール関係では include_path = .:/usr/local/lib/php sendmail_from = no value sendmail_path = /usr/sbin/sendmail -t -i SMTP = localhost smtp_port = 25 となっています。 sendmail_fromがno valueですが、上記を見たところsendmailが起動していると思ったのですが、これだけでは判断できないのでしょうか? PHPでmb_send_mail()を実行した結果、TRUE が帰ってきますがメールは届きません。(宛先はabc@hoge.net) ちなみに、B社ではメール関係のプログラムはインストールしていないと言っています (ですが管理が杜撰なので正直、信用できません)し、WEBサーバは予約システムがメインでありメールサーバを入れると ウィルスが予約システムに影響を及ぼす可能性があるのでインストールできないと言われました。(正直、この対応にも不満が残ります) ファイル作成 → B社へ渡し → B社がサーバへアップロードと言う流れですのでこちらでサーバ設定を見ることもできません。 こういった状況でWEBサーバ内のPHPからabc@hoge.netへ送信する方法はあるのでしょうか? phpinfo()を見る限りPEARもインストールされていないようですが、これだけでは判断できませんか? B社の穴を見つけるようで気分が悪いですがクライアントの要望に答えたく考え悩んでいます。 B社いわく「”現状”の設定内で対応してくれ」とのことですので・・・。

質問者が選んだベストアンサー

  • ベストアンサー
  • helonpa
  • ベストアンサー率38% (108/278)
回答No.6

横やり&遅レスですが。。 > POP Before SMTP、SMTP-AUTHの対応で一度POP認証すれば > 送信できそうな気がするのですが・・・無理でしょうか? POP Before SMTP あたりまではソケット通信でも難しくないと思いますが、SMTP-AUTHは 難しいのではないでしょうか(技術的に調べていないので分かりませんが)。 > ですが、この方法だとB社の外部サーバから(別ドメインから)の接続なので第3者利用と > なってしまい普通はスパム扱いですよね? > 正直この方法での送信できたとしても気持ち悪いです・・・。 SPAMは不正利用であり、許可を受けて利用するのは何ら問題ありません。 一般的な使用方法です。 > PEAR用意し利用しなければならないのですがmそうすると.htaccessまたはini_setで利用するとなると思います。 > この方法は推奨されていないので踏み止まっています。 推奨されていないという事は何もないですよ。 .htaccessやini_setは使うために用意された機能です。 若干の性能ダウン(0.1%とか)があるというだけです。 > PEAR用意し利用するのと下記のようにfsockopenでソケット接続する方法と、どちらがスマートなのでしょうか? PEARのライブラリで済むなら、その方が楽で不具合も少ないと思いますが、何れでも良いと思います。

TukuTuku9
質問者

お礼

回答ありがとうございます。 結果を報告しますと、B社C社ともに外部からのソケット通信およびメールクライアント(PEAR含む)の利用が許可されなかったのでメール送信の手段が完全になくなりました。 送信部で外部ドメイン(弊社ドメイン)を利用すればメールは送れますが仕様や金銭的の面でクライアントが諦めました。 今回、私は完全解決とまではいきませんでしたが、同じような問題に遭遇された方が参考になれば幸いです。 ありがとうございました。

その他の回答 (5)

noname#30334
noname#30334
回答No.5

#2です。 >SMTP関係のini_set()はWindowsサーバのみ有効だと認識していたのですが >Linuxサーバでも有効なのでしょうか?(WEBサーバはLinuxです) 申し訳ありません。混同していました。 php.iniのmail設定の中で、Linuxで有効なものは、sendmail_pathだけのようです。 #2の投稿は、無視して下さい。

TukuTuku9
質問者

補足

わざわざ訂正していただいてありがとうございます。 引き続き、ご意見をお待ちしております。

回答No.4

> PEARはインストールされてません。B社確認済みです。 わざわざPEAR無しでインストールするとはあまり考えにくい感じはありますが。。。 PEARに関してはローカルインストールも可能です。簡単なWEBアプリになっているものもあるみたいですね(私は未使用)。 http://pear.php.net/manual/ja/installation.shared.php 参考まで。

TukuTuku9
質問者

補足

回答ありがとうございます。 >わざわざPEAR無しで・・・・・ 私もそう思います。ですがB社がそう言っている以上、諦めるしかありません。 ローカルインストールについてはNo3の補足の通りです。

回答No.3

B社のサーバでsendmailで仮にメール送信が可能だとしても、駄目と言っている訳ですから、サービスを止められても文句は言えませんね。 とりあえず、PEARのMailクラスでも使えばどうでしょうか。 SMTPサーバの指定が可能です。一般的なメールクライアント的に使う事がかのうじゃないでしょうか。 http://dozo.matrix.jp/pear/index.php/PEAR/Mail.html 参考まで。

TukuTuku9
質問者

補足

回答ありがとうございます。 >サービスを止められても文句は言えませんね。 その通りですね。B社の穴を見つけるようなことは止めます。 PEARはインストールされてません。B社確認済みです。 PEAR用意し利用しなければならないのですがmそうすると.htaccessまたはini_setで利用するとなると思います。 この方法は推奨されていないので踏み止まっています。 PEAR用意し利用するのと下記のようにfsockopenでソケット接続する方法と、どちらがスマートなのでしょうか?

noname#30334
noname#30334
回答No.2

php.iniの設定 SMTP = localhost をC社のメールサーバのアドレスにしてみて下さい。 もちろん、メールサーバーの設定次第では 不正利用(Fromの詐称など)とみなされて、はじかれる可能性もありますし、 POP Before SMTPが使われていれば、その辺りの考慮も必要です。 どうしても上手くいかなければ、C社に相談して下さい。 それと、php.iniの設定を書き換える事が出来なければ、 ini_set()関数で対処して下さい。

TukuTuku9
質問者

補足

回答ありがとうございます。 php.iniの設定変更は試しにB社に依頼していますがおそらく断られます。 変更してもらえたとしてもC社ではPOP Before SMTPおよびSMTP-AUTHを 利用してるのでini変更だけでは送信はできないと思っています。 C社へどうにか送信可能な状況にできないか?と打診していますが回答はあまだありません。 SMTP関係のini_set()はWindowsサーバのみ有効だと認識していたのですが Linuxサーバでも有効なのでしょうか?(WEBサーバはLinuxです) POP Before SMTP、SMTP-AUTHの対応で一度POP認証すれば 送信できそうな気がするのですが・・・無理でしょうか? 手順としては、 1)fsockopenでC社メールサーバの110番ポートに接続 2)USER、PASSを送信 3)QUIT 4)fsockopenでC社メールサーバの25番ポートに接続 5) HELOコマンド送信 6)MAIL FROM、RCPT TO、DATAでメール送信 7)QUIT と考えていますがこの流れで送信可能かをC社に問い合わせています。 ですが、この方法だとB社の外部サーバから(別ドメインから)の接続なので第3者利用となってしまい普通はスパム扱いですよね? 正直この方法での送信できたとしても気持ち悪いです・・・。 他に何か良い方法はないでしょうか? 書き忘れましたが利用できる言語はPHPのみでバージョンは4.4.2です

  • racchoman
  • ベストアンサー率71% (20/28)
回答No.1

> sendmail_fromがno valueですが、上記を見たところsendmailが起動していると思ったのですが、これだけでは判断できないのでしょうか? これだけでは判断できません。 > PHPでmb_send_mail()を実行した結果、TRUE が帰ってきますがメールは届きません。(宛先はabc@hoge.net) 恐らくsendmailは存在するけど、きちんと設定をしていないか、NWのどこかで止められたのでは無いかと思います。あまり勝手にやると、怒られたりするので注意した方が良いです。 技術的な話では無いですが、メールサーバがどこかに無いとメールが送信できない訳で、どのメールサーバを使うべきなのか、クライアントであるA社に指示をあおぐ話なんじゃないでしょうか。 その結果、A社がB社にメールサーバを立てる指示をするのか、あるいは別のメールサーバを使うようにあなたに言ってくるのかは判りませんが。

TukuTuku9
質問者

補足

回答ありがとうございます。 >これだけでは判断できません。 納得しました。 >あまり勝手にやると、怒られたりするので注意した方が良いです。 そうですね。私としてもサーバが不安定になるようなことはしたくありません。ですからここで最善策を聞ければ、と思い投稿しました。 >クライアントであるA社に指示をあおぐ話なんじゃないでしょうか。 今回の件で私とABC社でやり取りはしていますが、B社からメールサーバは立てられないとハッキリ断られています。 ですからC社のメールサーバを使うしかありません。 投降後に色々調べてみていますが、fsockopen()でソケット接続はどうか?と模索中です。それもC社次第かもしれませんが・・・。

関連するQ&A