OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

sendmailの使えない環境でメールを送る

  • 暇なときにでも
  • 質問No.152148
  • 閲覧数235
  • ありがとう数5
  • 気になる数0
  • 回答数3
  • コメント数0

お礼率 76% (26/34)

いま使っている自分のサイトは CGI(Perl5)は OKですが sendmailが使えません。しかし、掲示板の書き込み内容をメールで送信したいと考えています。
で、幸いそのプロバイダには標準 CGIとしてメールデコードをサポートしています。これを巧く使ってメールを送信できないかとのご相談です。
件の CGIはPOSTメソッドで渡すので、CONTENT_LENGTHにその長さをセットし、標準入力へパラメータを。そして掲示板プログラムからメールでコードのCGIを呼び出せば巧くいきそうなのですが....。

1.まず、この方法は使えそうか?
2.perl中で別の CGIの標準入力へどのようにパラメータを渡すのか(パイプ?リダイレクト?)
3.環境変数 CONTENT_LENGTHへ CGI中から値を設定できるのか?
4.送信するパラメータはどんな文字列にすればいいのか?(エンコード、パラメータの区切りとか)

以上です。どなたかアドバイスお願いします
通報する
  • 回答数3
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.2

 えとですね。

>POSTメソッドで引数を渡すので STDINをreadするのはどのプログラムでも一緒
 これがそもそも違います(笑)
 たとえば、yatokesa さんが下記に提示したプログラムは、STDINをreadできるでしょうか?
 できませんよね。print しかしてないわけですし。
 それと同じ考えで、hoge.cgi というプログラムのソースの中に STDIN を read するルーチンが存在しなければ、そもそもプログラムにリダイレクトできないわけです。
 で、それができるかどうかは、プログラムを作ったプログラマーしか分からないという寸法なわけです。

 ちなみに、HTTP プロトコルはファイルを転送するプロトコルではないので、リダイレクトという概念はありませんが、telnet から which hoge.cgi というコマンドを打てば、(hoge.cgi にパスが通っていれば)サーバー上の物理位置が分かります。

 まあ、仕様が分からないということは、試す価値はある、ということでもありますから、やってみてもいいんじゃないでしょうか。
 やり方が見当も付きませんが(^_^;
補足コメント
yatokesa

お礼率 76% (26/34)

>>POSTメソッドで引数を渡すので STDINをreadするのはどのプログラムでも一緒
> これがそもそも違います(笑)
ここのところが腑に落ちませんので、もう少しおつきあい願えますか?(スイマセン)
しっかりと書かなかったので全部が伝わらなかったのかと思い、もう少し具体的に書きますと...。
hoge.cgiの使い方として
<FORM METHOD="post" ACTION="http://.../hoge.cgi" >
でフォームを定義し、あとはテキストフィールドの値をhoge.cgiが読み出しますよね。参考にした CGIの解説には「POSTメソッドは標準入出力にパラメータを渡す」と書いてあったので STDINをreadと短絡的な表現をしました。逆に、この FORMの形式でパラメータを読み込む別の方法(標準入力以外から読み込む方法)というのはあるのでしょうか?

で、さらに、クライアント側で入力したテキストフィールドの値をHTTPサーバーに送る手だてがあると思ったのでこれを cgiでシミュレートできればと思った次第です。

>telnet から which hoge.cgi
プロバイダは @niftyですのでちょっと無理でした...。
投稿日時 - 2001-10-17 11:00:36
お礼コメント
yatokesa

お礼率 76% (26/34)

まずは、ご回答くださいましてありがとうございます。
疑問点が解決しませんでしたので、宜しければおつきあいください。噛みつきすぎたかと補足を送信したあとに反省してます。
投稿日時 - 2001-10-17 11:45:42
-PR-
-PR-

その他の回答 (全2件)

  • 回答No.1

 プログラムの構造によります。  この手のCGIプログラムはプロバイダの手作りである場合も多く、一般共通項的な使い方はないのです。  ですので、同じ質問をプロバイダにしてみてください。 ...続きを読む
 プログラムの構造によります。

 この手のCGIプログラムはプロバイダの手作りである場合も多く、一般共通項的な使い方はないのです。

 ですので、同じ質問をプロバイダにしてみてください。
補足コメント
yatokesa

お礼率 76% (26/34)

>プログラムの構造によります
POSTメソッドで引数を渡すので STDINをreadするのはどのプログラムでも一緒だと思ったのですが、OSやhttpサーバーに依存するのでしょうか?

で、試して見ちゃいました。結果から言うと以下のソースではNGです。

$formdata = "to_mail=$mailto";
$formdata .= "&sub=$sub";
$formdata .= "&name=$name";
$formdata .= "&from=$email";
$formdata .= "&body=$comment";

$formdata =~ tr/+/ /;
$formdata =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C",hex($1))/eg;
$ENV{'CONTENT_LENGTH'} = length($formdata);
$ENV{'REQUEST_METHOD'} = 'POST';

if (open(MAIL,"| http://cgi.hoge.com/bin/hoge.cgi")) {
  print MAIL $formdata;
}
close(MAIL);

httpを openするってのがそもそも間違いだと思いますが、hoge.cgiの格納ディレクトリが判らないので...。
(ローカルのLinuxサーバーでテストしたら broken pipeとなってしまった)
もし、httpに標準入力で渡す方法をご存じでしたらご教授ください。
投稿日時 - 2001-10-16 18:46:51
お礼コメント
yatokesa

お礼率 76% (26/34)

スパム防止のために sendmailを禁止していると思いますのでプロバイダには聞き難いです(ゲリラ的ですから)。
できれば便利だと思う程度でしたのでそれほど困っているわけじゃないんですけど、思いついたのでちょっと試してみたかったんです。
お返事ありがとうございました。
投稿日時 - 2001-10-16 18:46:39


  • 回答No.3

 はいはい(笑)  今、自分でプログラムを組んで試しましたができませんでした。  これはどうやら、open(MAIL, "...") の MAIL と、hoge.cgi の STDIN がうまくつながってくれないのが原因のようです。(ちなみに、「STDINをreadと~」というくだりは、考え方自体は間違ってないです。実際には、必ずこうなってるかというと、そうでもないかもしれませ ...続きを読む
 はいはい(笑)

 今、自分でプログラムを組んで試しましたができませんでした。
 これはどうやら、open(MAIL, "...") の MAIL と、hoge.cgi の STDIN がうまくつながってくれないのが原因のようです。(ちなみに、「STDINをreadと~」というくだりは、考え方自体は間違ってないです。実際には、必ずこうなってるかというと、そうでもないかもしれませんが)

>プロバイダは @niftyですのでちょっと無理でした...。
 えー(^_^;
 これはけっこう致命的です。
 すなわち、「プロバイダから直接アクセスを禁止されている」ということになります。
お礼コメント
yatokesa

お礼率 76% (26/34)

#ちょっと仕事がばたばたして遅くなりました。

やはりイレギュラーな方法はそれなりの知識がないと難しいようですね。ブラウザとHTTPサーバーとの通信方法など、もう少し勉強してから出直してみます。

>「プロバイダから直接アクセスを禁止されている」
はい、重々承知しております。

確実にメールが送られるではないですが別の方法を思いついたのでそちらを試してみます。

おつきあいくださいましてありがとうございました^_^)/。
投稿日時 - 2001-10-19 13:47:23
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ