WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:perl関数名を含んだ代入について

0:[投稿] yas [2005/02/24 16:53 ][環境:macos10.3 apache]

perlにてメールフォームcgiを作ったのですが
メールアドレスがlength@……と言うメルアドなんです。
$address = 'length@……';
こういう風に代入したのですがうまく送信されません
別のアドレスだと送信できました。
この場合どの様な代入式を書けば良いのでしょうか?

よろしくお願いします。


1:[回答] andi [2005/02/24 17:39 ]

> $address = 'length@……';

ただの文字列としてlengthが入っていること自体は何ら問題ありません。
これを実行/コマンド送信させているソースの方に何か問題がありそうです。

その辺りのソースを提示して下さい。


2:[質問] yas [2005/02/24 18:39 ]

返信ありがとうございます

">ただの文字列としてlengthが入っていること自体は何ら問題ありません"

そうですよね(;^_^A
別のアドレスで送信出来たのでパニクってしまいました。

コード書きますのでおかしいところが有りましたらご指摘お願いします。
コードと言ってもまんま教本で違うのは変数だけですが(;^_^A
----------
require 'hoge.pl';
require 'jcode.pl';
&cgiinit('jis');

$mailer = 'パス';
$address = 'メールアドレス';

open(OUT,"|$mailer $address") || die "送信できませんでした\n";

$Etitle = $form{'taitoru'};
$Ename = $form{'namae'};
$emale = $form{'meruado'};
$comment = $form{'naiyou'};

print OUT "Mail From Web\n";
print OUT "$Etitle\n";
print OUT "氏  名:$Ename\n";
print OUT "E-Mail:$emale\n";
print OUT "コメント:$comment\n";

close(OUT);
&html;

----デコード----
sub forminport
{
$mojiretsu = $_[0];
$mojiretsu = 'euc' if ( $mojiretsu eq '' );
local ($tempo, @group, $ans, $name, $value, %FOM);

$ENV{'REQUEST_METHOD'} =〜 tr/a-z/A-Z/;
if ($ENV{'REQUEST_METHOD'} eq "POST")
{read(STDIN, $tempo, $ENV{'CONTENT_LENGTH'});}

else
{$tempo = $ENV{'QUERY_STRING'};}
@group = split(/&/, $tempo);
foreach $ans (@group)
{($name, $value) = split(/=/, $ans);
$value =〜 tr/+/ /;
$value =〜 s/%(..)/pack("c", hex($1))/ge;

&jcode'convert(*value, $mojiretsu);
$FOM{$name} = $value;}
%FOM;
}

sub main'cgiinit {%main'form = &forminport( @_ );}
1;  #RETURN TRUE
------------
以上ですデコード部分はライブラリ読み込みです。
よろしくお願いします。


3:[関連] yas [2005/02/24 19:06 ]

環境の情報を追加致します。

別のメールアドレスとはヤフーメールです
ヤフーメールの受信箱にはメールは届きます
From/anonymous@…
といった感じです。
うまく行かないメールアドレスはレンタルサーバにて
取得しているサブドメイン型のメールアドレスです。
送受信は普通に出来ています。
ここのサーバスペースでメールフォームcgiを実行しています。


4:[回答] AC1号 [2005/02/24 19:48 ]

$mailer = 'パス';
には何を入れていますか?sendmailだったりしませんか?


5:[質問] yas [2005/02/24 20:08 ]

返信ありがとうございますAC1号さん

重要なところを省略してしまったのですね(反省
ご指摘の通り
/usr/sbin/sendmail
です、これがいけなかったのですか?


6:[回答] dse [2005/02/24 20:11 ]

他のアドレスなら出来て、$address = 'length@……'; だと出来ないというのなら、
perlのほうではなく、メールサーバ(sendmail等)がエラーを返しているんじゃない
でしょうか?


7:[回答] NintendoPSP [2005/02/24 20:13 ]

Perlは久しぶりに読むので新鮮です。
@を使う文字列は、たまに予期せぬ展開をするので、ややこしいですね。
ただ、Perlの文法自体には問題がなさそうに思います。
>open(OUT,"|$mailer $address") || die "送信できませんでした\n";
しいてあげれば、ここのところの$addressの展開がどうなるんだっただろ?と思い出しています。
Perlを思い出す意味でも、"|$mailer $address"を表示して、どうなるか教えてください。

>&jcode'convert(*value, $mojiretsu);
$mojiretsuがeucになってますが、ライブラリの仕様ですか?
もしくは、メールの送信とは関係ない部分?
main'cgiinitに詳しくなくて申し訳ないんですが・・・

ただ、問題は別のところにあるのではないかと思っています。
length@〜のメールアドレスに送信できないということですが、
サブドメイン型なので、勝手に作成できないのかもしれませんが
別の名前のメールアドレスを作成して試すことはできないんですか?
サーバーのメールの受信方式も気になります。
もしくは、ヤフーのアドレスに、関数名を使用しているアドレスを取得してみるとか・・・

メールサーバー本体が何であるのかわかりませんが、
sendmail/qmail系だとして、
open(OUT,"|$mailer -i -t")でメールサーバー起動、
メールヘッダーにて、
"To: $address\n"
を付加しているするというやり方も試してみてください。

メールアドレス名により送信できないということなのですが、日本語処理の部分に疑問があります。
日本語処理の部分をコメントアウトして、全てがアルファベットだけの内容のメールを送信できないか試すのが一番のような気がします。

とりあえず、最後の部分を試してみてください。


8:[質問] yas [2005/02/24 21:42 ]

みなさん返信ありがとうございます

dseさん
そうみたいです、ちょっと癖のあるメーラーデーモンみたいです。

NintendoPSPさん
丁寧な回答ありがとうございます。
いろいろやってみたのですが
open(OUT,"|$mailer -f $address $address")
で試したところ反応してくれました
メーラーデーモンさんからfailure noticeと言うタイトルのメールが来ました。送信した内容も英語がズラズラっと並んだ最後の方にちゃんとありました。
FromがMAILER-DAEMON@…
になってました
もう一歩みたいです、明日頑張ってみます
感謝ですm(__)m


9:[回答] AC1号 [2005/02/24 22:45 ]

sendmailでやっているとしたら、むしろ
>>2 でメール送れることがある、という方が不思議なぐらいです。

sendmailは、メーラーが決まったフォーマット(RFC2822で定められている)に整形したメールを、そのまま宛先に送るプログラムです。sendmailに直接メールを投げるのであれば、RFC2822を読み、それに基づいたフォーマットにしなければなりません。

>>2 のスクリプトはsendmailに投げるのを想定していないように思います。しかし、mailコマンドに投げることを前提に書かれたとしても、生のshift_jisまたはeuc-jpをそのまま流している(メールで8bitコードを流す場合は、何らかのエンコーディングを行わなければならない。日本語の場合、iso-2022-jpに変換して送るのが普通)ので、使えません。

スクリプトの書き方もperl4時代の書き方で、今さらこんな書き方を真似する必要はありません。

実際に使うのであれば、別のスクリプトを探すのが早道かと。


10:[完了] yas [2005/02/24 23:45 ]

ご指摘ありがとうございますAC1号さん

古い書き方なのですね、確かにその教本はmacperlの本でした
それがわかっただけでもラッキーでした。勉強になりました。
新しい教本で勉強してみます。

詰まったらまた聞きに来ますので、よろしく指導お願いします。

何か質問内容が大雑把で…
もっとまともな質問が出来るようスキルアップしたいですね(^_^;

私のために皆さんの貴重な時間を割いて頂き大変感謝しています。

回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]

ChaichanPAPA's World