プロが教える店舗&オフィスのセキュリティ対策術

swfファイルから送信できるメールフォームを作成したいと考えています。
それで、とりあえず、perlのsendmailを利用しようと思い立ちました。
自分には、sendmailを使用した経験がないので、とりあえずサーバに
お試しスクリプトをアップして動作を確認することにしたのですが、うまく反映されません。
お試しスクリプトは以下のようなものです。

#!/usr/local/bin/perl
print "content-type: text/html\n\n";
if(open (SENDMAIL,"|usr/local/sbin/sindmail-t")){
  $A="a@b.co.jp";
  $B="c@d.ne.jp";
  print SENDMAIL <<"EOM";

  From:$A
  TO:$B

  test

  EOM
  close(SENDMAIL);
}else {
  print "open_error";
}

_end_

このスクリプトのFromとToの部分を除くと、一応呼び出した時にただしく出力されます。
自分の考えでは、こんなスクリプトでも、呼び出しときに宛先のアドレ
スにメールが送信されると思っていたのですが、何か考え違いをしてるのでしょうか?
とりあえず、日本語文字変換やデータの受け取りなどは、後でjcode.pl
やcgi-lib.plを使用してなんとか付け焼刃でやってみようと思ってます。

よろしく、おねがいします。

A 回答 (2件)

誤字ですが、



>if(open (SENDMAIL,"|usr/local/sbin/sindmail-t")){
ここのファイル名の部分で、パイプに渡すプログラムのパスが絶対パスになっていない(最初の"/"が抜けている)ため、このままの文では正しくオープンできないはずです。
あと、"sendmail" と"-t"の間には空白が必ず必要です。
正しくは、
if(open (SENDMAIL,"|/usr/local/sbin/sendmail -t")){
です。

致命的な誤字ではないですが、FromとTOが大文字と小文字がごっちゃになってるのは修正したほうがいいかと思います。
sendmailの動作に支障はないですが、この先大文字と小文字を厳格に区別する処理にあたるかもしれないので、統一するくせはつけたほうがいいと思います。

また、誤字とは関係ないですが、読みやすさのために全角スペースを入れているみたいですが、試しに実行しようとそのままコピー&ペーストをすると動かないので、スペースを入れずにそのままのほうが回答者に親切かもしれません。
これはあくまで個人的な見解なのであまり気にしなくていいです。

>自分の中でのメール送信にたいする理解では、
>sendmailのある場所に対して、ファイルオープンさせてあげること
>以外は、ほぼ、ファイルの書き込みオープンと大差ないと思っていたの
>ですが、(FromとかToとか入れる以外には) まちがっているのでしょうか?
その理解で正しいです。
が、パイプをオープンするパスが間違っていたので・・・ということになると思います。
    • good
    • 0
この回答へのお礼

すばやい回答、ありがとうございました。
手間取りましたが、なんとか第一段階突破です。
よくは、わからないのですが、EOM記述にするとサーバーではじかれるので、printで項目を一つ一つ、書き出す方法をとりました。
記述する意味があまりないですが、一応スクリプトの主要部分を記述させていただきます。

$sendmail ="/usr/sbin/sendmail";
$my_mail ="aaaaaa\@bbbbb.ne.jp";
$ohter_mail="test\@test.ne.jp";
$subject ="test";
$mail_body="test";

open(SENDMAIL,"| $sendmail -t") || print "sendmailの起動に失敗";
print SENDMAIL "To: $my_mail\n";
print SENDMAIL "From: $ohter_mail\n";
print SENDMAIL "Subject: $subject\n\n";
print SENDMAIL "MIME-Version: 1.0\n";
print SENDMAIL "content-type: text/plain; charset=ISO-2022-JP\n";

print SENDMAIL "$mail_body\n";
close(SENDMAIL) || print "送信に失敗です。";

これで、一応自分のメーラーにテストメールが飛び込んできました。
詳細部分へのアドバイス、ためになるアドバイス、自分の理解に対する同意併せて、ありがとうございます。
まだまだ、これからですが、励みになります。

また、質問とかするかもしれませんが、どうか、その時にもご助力お願いします。

お礼日時:2006/01/18 21:15

ソースに誤字が満載なのですが、それは実際のソースでは大丈夫ですよね?



メールが送れない原因ですが、print文の一番最初にある改行だけの行です。
メールのヘッダを書く部分は、改行だけの行がないようにしなければいけません(改行だけの行から下が本文だと認識されるからです)

また、メールアドレス中の"@"は、ダブルクォートでくくるときは"\@"のようにエスケープしましょう。
そうしないとその後の文字が配列の変数名として認識されてしまいます。

では、がんばってください。

この回答への補足

初歩的な質問にお答えしていただき、ありがとうこざいます。
昨日、今日で四冊ほど本を買い込んで、このざまです。
先に、『呼び出し時にただしく、出力される』と書きましたが、それは、
if ( open ( SENDMAIL, "|usr/local/sbin/sendmail-t") ){
print "ok";
close ( SENDMAIL );
}else {
print "open_error";
}
とした、場合でした…。
このとき、なぜか、sindmailと書いていたにも関わらず、okがブラウザに出力されました…。
で、その間に print SENDMAIL <<"EOM"......EOM を記述すると、エラーが出ます。
間は、見やすくするため勝手に今回いれたものですが、入れてはならな
いものだったみたいで、勉強になりました。
自分の中でのメール送信にたいする理解では、
sendmailのある場所に対して、ファイルオープンさせてあげること
以外は、ほぼ、ファイルの書き込みオープンと大差ないと思っていたの
ですが、(FromとかToとか入れる以外には) まちがっているのでしょうか?
記述されるところに誤字が満載…ということで、ほんと恥をさらしつつ
も、sindmailと@部分以外にもありましたら、どうかご指摘ください。

ご迷惑かと思いますが、さらなる助言お願いします。

補足日時:2006/01/18 18:50
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!