2009-05-01 17 views
2

私はperlでのsendmailを使用して、スクリプトをコマンドラインで実行されるとき、それはあなたの電子メールおよび受信者の電子メールの後に\ nを(複数可)を除外するためにあなたを必要としていること(壁に頭をずっと叩いた後)に気づいていますアドレスを正しく書式設定するためには、それらの\ n(s)がない場合はCGI経由で実行すると、受信者の電子メールが不正であることを示すエラーが返されます。CGIからPerlへのsendmailの違いは何ですか?

他に誰かがこれに遭遇しましたか? 2人は何をしていますか?

+0

スクリプトの関連部分を掲示した場合には、頭部のアップのための – castaway

答えて

0

-lオプションは、自動行末処理を可能にし、あなたの問題が行末にあるように、私はあなたが-lせずにそれを試して示唆しています。

0

どこからデータが来ていますか?スクリプトやWebフォームからハードコードされていますか?

ウェブフォームから受信者の電子メールアドレスを取得した場合、という形式は、スパマーによって使用されるとなります。それは100%の保証です。

my $send_to = <>; 

これはすでに「\ n」を持つことになります$ send_toを意味します

+0

感謝を見るためにずっと容易になるだろう。それはWebフォームから来ていません。 –

2

私はあなたがこのようにそれらをINGのコマンドライン上でのプロンプトからデータを取得していないchompされていることを賭けています。あなたのperlスクリプトがCGI対yur Perlスクリプトの実行として実行する意味であれば用語「CGI」は、広い

my $send_to = <>; 
chomp($send_to); 

か、単に

chomp(my $send_to = <>); 
+0

いいえ...最初に確認することなく質問を投稿しません。データはユーザーイベントから取得されますが、このテストでは値をハードコーディングしています。 –

+0

さて、改行でハードコーディングしていますか?あなたは何が本当の手がかりをもたずに何を引き起こすのか、何を期待しているのだろうと思っています。すでに改行を持つ変数は問題を引き起こす可能性があります。次は、コマンドラインとCGIを実行するときの環境が異なる場合です。 –

0

:それらの両方が同じように動作させるためには、変数をムシャムシャ食べますコマンドラインでは、スクリプトが持つ経路とその一般的な継承環境を見ていきます。特に異なるユーザーIDとして実行している場合。ウェブサーバは、chroot環境にある場合など

use Data::Dumper; 
warn(Dumper(\%ENV)); 
+0

興味深い。うん、それはcgi拡張子を持つperlスクリプトです。私はそう > perlの-l foo.cgiそれが「TO:[email protected]」でフィールドすると主張 を[入力]のようにそれを実行すると が、私はブラウザを介してそれを実行したときに、それは 」でない限り、それは失敗しますTo:[email protected] \ n " 私は環境と何が関係しているのかは分かりませんが、私は周りを突っ走ります。 –

+1

なぜ "perl -l"を使用していますか? -lオプションを指定すると、異なる行為を引き起こしている可能性のある行末が混乱します。 – noswonky

0

だから私は、コマンドラインを介してそれを実行しているため、このような何かを持っていることを推測している:

「CGI経由で実行されている
my $your_email = "[email protected]"; 
my $recipient_email = "[email protected]"; 

と、このコマンドラインから実行している対 『CGI経由で実行されている:」

my $your_email = "[email protected]\n"; 
my $recipient_email = "[email protected]\n"; 

だから私はあなたを頼む質問は、あなたが言うとき、あなたは何を意味するかもあなたは上記の変数とのsendmailを呼んでいる方法です、そして』? CGIコードを追加していて、まだコマンドラインで実行しているのですか?またはWebブラウザでURLを参照していますか?あなたは(perlの-l foo.cgi)-lオプションを使用してコマンドラインからスクリプトを実行していることを言及コメントのカップルで

+0

標準的な方法でsendmailに印刷しています。私は同じファイルを実行していますが、実行間で変更するだけです。私がCGIと言うとき、私はそれを+ xと765をchmodeしたブラウザ経由で呼び出しています。コマンドラインでは私はちょうどperl -l foo.cgiとして実行しています –

関連する問題