• 締切済み

cgi.pmで作成されたsendmailプログラム内に日時表示

現在cgi.pmで記述されたcgiプログラムで、自社にメールが飛んでくる仕組みになっています。作成した業者と連絡が取れなくなってしまい、この場を借りて質問させていただきます。 そのメール本文内に、受信日時を表示させたいと思いますが、どのようにしたらよいでしょうか ## sendmailによる送信 open(MAIL,"|$mailprog -t") || &error(150,"$mail は送信に失敗しました"); print MAIL $mail_dat; close(MAIL) という行があり、 これらの行の前に my($date) = tslib->getDate(); と挿入し、 (※tslib.cgiという別ファイル内に日時取得の行があります) print MAIL $mail_dat; の後に print MAIL $date; と入れてみましたがCGIはエラーにはならないものの、本文中に日時が表示されません。 なお、送信された内容はCSVにも残るようになっており、その部分の記述は以下のような感じです(dateに関係なさそうなところは省いています) sub doCsv { my($date) = tslib->getDate(); # データの追加書込み open(OUT,">>$file") || &error("Open Error : $file"); # print F $dq . $in{'formmail'} . $dq . "," . # $dq . $date . $dq . "," . # $dq . $ENV{'HTTP_USER_AGENT'} . $dq . "\n"; print OUT "$od,$dq$date$dq\n"; close(OUT); # ロック解除 if ($lockkey) { &unlock; } } もしお分かりになる方がいらっしゃればよろしくお願いいたします。(変更修正はあくまで自己責任で行います)

みんなの回答

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.3

>my($date) = tslib->getDate(); 本当にエラーになってませんか? それと、 use tslib とかやってますか? 別ファイルにあるのをどのように使ってるのか 疑問なんですけど。

sanq2
質問者

補足

上記表記でエラーはでていません 現在修正中のファイルは index.cgi 内なのですがその中にあった記述は require 'tslib.cgi'; my($cook) = tslib->setCookie( my($date) = tslib->getDate(); →これはCSVに記述するところ の3行でした use tslib  という表記はありませんでしたが require 'tslib.cgi'; がこれにあたるのでしょうか? 別ファイルのtslib.cgi内には # 日時のフォーマット my(@gMon ) = ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'); my(@gWeek ) = ('Sun','Mon','Tue','Wed','Thu','Fri','Sat'); my(@gWeekJ) = ('日','月','火','水','木','金','土'); sub getDate() { # 日時の取得 my($time) = time; my($sec,$min,$hour,$mday,$mon,$year,$wday) = localtime($time); return sprintf("%04d/%02d/%02d(%s) %02d:%02d", $year+1900,$mon+1,$mday,$gWeekJ[$wday],$hour,$min); という記述があります。 CSVファイルに書き込みできている日時はここから引っ張ってきているのかなと思うのですがどうでしょうか?

  • pick52
  • ベストアンサー率35% (166/466)
回答No.2

あ、書き忘れてた。 変数 $mail_dat の中身はどうなっていますか。 もし、最後の行が . のみだった場合、SMTPプロトコルの仕様で、 そこが最終行という指定になりますので $mail_dat に代入している ところで . の前に時刻を入れる処理をするようにしてみてください。 ↓Sendmailについて

参考URL:
http://argrath.ub32.org/perldocjp/5.6.1/perlfaq9.html#how%20do%20i%20send%20mail
sanq2
質問者

補足

mail_dat に関する記述は -------------------- ## $t_dat--$file_datをBase64でエンコードしたデータ my($yourad,$mail,$subject,$honbun,$fname,$ctype,$f_dat) = @_; my($bound,$mail_dat,$t_dat); 以下続く・・・ -------------------- if ($fname eq '') { $mail_dat=<<"EOL"; X-Mailer: $ver To: $mail$bcc From: $yourad Subject: $subject Content-Type: text/plain; charset="iso-2022-jp" Content-transfer-Encoding: 7bit $honbun EOL } else { -------------------- ## sendmailによる送信 open(MAIL,"|$mailprog -t") || &error(150,"$mail は送信に失敗しました"); print MAIL $mail_dat; print tslib->getDate(); close(MAIL); -------------------- の3箇所ですがどうでしょうか?? 質問ばかりで申し訳ございません・・・

  • pick52
  • ベストアンサー率35% (166/466)
回答No.1

何も表示されない(空白も何らかのゴミなども)ということでしょうか。 まず、 print tslib->getDate(); などのようにしてちゃんと日時が返されているかどうかを確認して ください。 また、正確に返されている場合は print MAIL $mail_dat . $date; と文字列連結してみたらどうでしょうか。 問題の部分はCGIモジュールではなく単にSendmailに依存しているよう ですが提示されたスクリプトだけではこれ以上のアドバイスは難しいと 思います。

sanq2
質問者

補足

> print tslib->getDate(); やってみましたが、表示されませんでしたので日時を引っ張れていないのだと思います。 index.cgiプログラムの下のほうに # 現在日時を文字列化する sub get_date_string { my($sec, $min, $hour, $day, $mon, $year); ( $sec, $min, $hour, $day, $mon, $year ) = localtime(time); $year += 1900; $mon++; # 必要なら0を付加する if ($hour < 10) { $hour = "0$hour"; } if ($min < 10) { $min = "0$min"; } if ($sec < 10) { $sec = "0$sec"; } return "$year年$mon月$day日 $hour時$min分$sec秒"; } sub format_nbsp { my($str) = @_; if ( length($str) <= 0 || $str eq " ") { $str = "&nbsp;"; } return $str; } という記述がありました。 もしかすると現在きちんと作動している、CSVへの日時書き込みはこっち(index.cgi内)で日付を取得しているのでしょうか?

関連するQ&A