- ベストアンサー
sendmailを利用したメールフォームの作成
- swfファイルから送信できるメールフォームを作成するためのsendmailの利用方法を学びたい
- 現在お試しスクリプトを利用してメールフォームを作成しているが、うまく動作しない
- 後でjcode.plやcgi-lib.plを使用して日本語文字変換やデータ受け取りを行う予定
- みんなの回答 (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とか入れる以外には) まちがっているのでしょうか? その理解で正しいです。 が、パイプをオープンするパスが間違っていたので・・・ということになると思います。
その他の回答 (1)
- twinkleluz
- ベストアンサー率52% (98/185)
ソースに誤字が満載なのですが、それは実際のソースでは大丈夫ですよね? メールが送れない原因ですが、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と@部分以外にもありましたら、どうかご指摘ください。 ご迷惑かと思いますが、さらなる助言お願いします。
お礼
すばやい回答、ありがとうございました。 手間取りましたが、なんとか第一段階突破です。 よくは、わからないのですが、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 "送信に失敗です。"; これで、一応自分のメーラーにテストメールが飛び込んできました。 詳細部分へのアドバイス、ためになるアドバイス、自分の理解に対する同意併せて、ありがとうございます。 まだまだ、これからですが、励みになります。 また、質問とかするかもしれませんが、どうか、その時にもご助力お願いします。