宜しくお願いします。

CGI(Perl)を使い、Web上でメンバー登録などをし、
個人データなどをcsvファイルにして、sendmailで
管理者へ送りたいのですが、
添付ファイルとして、こういったファイルを送る方法をお教え下さい。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

別にマルチパートなメッセージを作れば良いだけです。



use constant ATTACH_TEMPLATE => <<__TEMPLATE__;
From: <%s>
To: <%s>
Subject: %s
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="------HOGEHOGE"
Content-Transfer-Encoding: 7bit

--------HOGEHOGE
Content-Type: text/plain; charset="ISO-2022-JP"
Content-Transfer-Encoding: 7bit

%s

--------HOGEHOGE
Content-Type: application/octet-stream; name="%s"
Content-Disposition: attachment;
filename="%s"
Content-Transfer-Encoding: 7bit

%s

--------HOGEHOGE--

__TEMPLATE__

といったテンプレートを用意しておいて

sprintf ATTACH_TEMPLATE,
  $from,
  $to,
  $subject,
  $message,
  $filename, $filename,
  $file_data;

で得たデータをsendmailコマンドに渡せばデータを添付して送信できます。
# ホントはセパレータをHOGEHOGEとか適当なのじゃなく、メッセージ中に現れないユニークなものを使う必要があったり、色々細かいところはありますけど。
    • good
    • 0
この回答へのお礼

ありがとうございます。
初めてお目にかかるものですので、
少々とまどっておりますが、なんとかやってみます。
ありがとうございました。

お礼日時:2002/03/09 15:09

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

このQ&Aと関連する良く見られている質問

Qcgi-perl の sendmail について

cgi-perlのsendmailを使ってWebサイトに問い合わせフォームを作っています。

2つのサイトを同じサーバーに持っているのですが、かたやきちんと送信できるのに、片方はメールが届きません。

メールが届かない方も送信ボタンを押すときちんと出るべき”メールが送信されました”というメッセージは出ます。

このような場合、どこをチェックしたらいいのでしょうか。
もう何度もcgiファイル、htmlファイルを確認して、属性なども確認しているつもりなのですが、きっとどこかが違っているのだと思います。

いっそエラーが出てくれれば、わかりやすいのですが、行き詰っています。
どうぞよろしくお願いいたします。

Aベストアンサー

sendmailのログはroot権限を使えないと見れないとは思います。
一般的には/var/log/の下にあると思いますが、なければお使いのMTAの起動スクリプトや設定ファイルを見ればどこにログを出しているか調べは付くはずです。

察するにcgiスクリプトがsendmailに渡すまでは正常に動いている可能性が高いので、sendmailがリレーする際にエラーが出ていないか調べた方がよいと思います。

Qcgi(perl) sendmailの使い方

お手数ですがよろしくお願い致します。

レンタルサーバー(ロリポップ)にCGIを設置してサイトを作成しています。
メールフォームを作ってフォームから指定されたメールアドレスに自動返信するようにしたいのですが、うまく動作しなくて困っています。

利用環境は
Perl(ver.5.8.8)でsendmailについては以下のようになっています。
・SENDMAIL の利用は可能です。 postfixによるラッパーとなります。
・sendmailのパスは/usr/lib/sendmail もしくは/usr/sbin/sendmail どちらでも利用可。

現在メールを送るところまでは出来るようになったのですが、届くメールを見ると宛先などのアドレスに余計なドメインが付加されているのです。

テスト中のcgiは大体以下のような感じです。

my $from = 'foo01\@bar.jp';
my $to = 'foo02\@bar.jp';
my $subject = 'test';
my $msg = 'test';

open(SDML,"| $sendmail -t -i") || die;
print SDML "From: $from\n";
print SDML "To: $to\n";
print SDML "Cc: $cc\n";
print SDML "Subject: $subject\n";
print SDML "Content-Transfer-Encoding: 7bit\n";
print SDML "Content-Type: text/plain;\n\n";
print SDML "$msg";
close(SDML);

これで送られてくるメールを見ると
宛先: "foo02@bar.jp"@usersXXX.phy.lolipop.jp (XXXは本当は数字。usersXXXはロリポップのサーバー番号というものらしいです。)
こんな風に余計なドメインがくっついて送られてきます。

print SDML "To: $to\n"; → print SDML "To: foo02\@bar.jp\n";
という感じで直書きに直すとこの症状は起こらないのですが、変数で指定するとどうしても起こります。

自動返信するため宛先に変数を使いたいのですがどうしたらこの症状が出ないように出来るのでしょうか?

お手数ですがよろしくお願い致します。

レンタルサーバー(ロリポップ)にCGIを設置してサイトを作成しています。
メールフォームを作ってフォームから指定されたメールアドレスに自動返信するようにしたいのですが、うまく動作しなくて困っています。

利用環境は
Perl(ver.5.8.8)でsendmailについては以下のようになっています。
・SENDMAIL の利用は可能です。 postfixによるラッパーとなります。
・sendmailのパスは/usr/lib/sendmail もしくは/usr/sbin/sendmail どちらでも利用可。

現在メールを送るとこ...続きを読む

Aベストアンサー

これは、postfixの正しい挙動だと思います。 それは、
$to の定義において、 @の前に \ を置いてエスケープしているのにシングルクォートで括っているから、postfixは 「foo02\@bar.jp」をローカルパートと判断し、「@サーバー名」 を付加しているのでしょう。

Qホームページから意見を送るsendmailのcgiスクリプト

表題のようなスクリプトを使っているのですが、
普通は特に問題ないのですが、「http://」などから始まる
URLのみを書き込んで送ると、空メール(何も記載されない)となって
届いてしまいます。どこがおかしいのかわかりません。
以下のようなスクリプトです。

@pairs = split(/&/,$buffer);
foreach $pair (@pairs) {

($name,$value) = split(/=/,$pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
$name =~ tr/+/ /;
$name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;

&jcode'convert(*name,'sjis');
&jcode'convert(*value,'sjis');

if ($name eq 'to') { $to = $value; }
if ($name eq 'from') { $from = $value; }
if ($name eq 'subject') { $subject = $value; }
if ($name eq 'body') { $body = $value; }

}

# cheack
if ($from eq "") { $from = "unknown\@."; }
if ($from eq " ") { $from = "unknown\@."; }


# send mail
&jcode'convert(*from,'jis');
&jcode'convert(*subject,'jis');
&jcode'convert(*body,'jis');
if (!(open(MAIL,"| $sendmail -t"))) { &error('システムエラー','メールの送信に失敗しました。'); }
print MAIL "To: $to\n";
print MAIL "From: $from\n";
print MAIL "Subject: $subject\n";
print MAIL "Content-Type: text/plain; charset=iso-2022-jp\n";
print MAIL "$body\n";
close(MAIL);

# view html
&jcode'convert(*from,'sjis');
&jcode'convert(*subject,'sjis');
&jcode'convert(*body,'sjis');
$body =~ s/\r\n/\r/g;
$body =~ s/\n/\r/g;
$body =~ s/\r/<BR>/g;

表題のようなスクリプトを使っているのですが、
普通は特に問題ないのですが、「http://」などから始まる
URLのみを書き込んで送ると、空メール(何も記載されない)となって
届いてしまいます。どこがおかしいのかわかりません。
以下のようなスクリプトです。

@pairs = split(/&/,$buffer);
foreach $pair (@pairs) {

($name,$value) = split(/=/,$pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
$name =~ tr/+/ /;
$name =~ s/%([a-fA-F0-9][a-fA-F0-...続きを読む

Aベストアンサー

こんにちは。

解決になるか分かりませんが、
sendmailのヘッダと本文の間は1行入れる必要があったと思います。

なので...
"Content-Type: text/plain; charset=iso-2022-jp\n";

の改行を\n\nにしてみてください
# もしかしたら"Subject: $subject\n"の方かも?

QCGI/Perlという本はありますがCGI/PHPという本はないのはなぜですか?

アマゾンで調べると表題でCGI/Perlという本はありますがCGI/PHPという本はないのはなぜですか?

Aベストアンサー

なぜそのような書籍が無いのか結論から申し上げると「需要が無い」からです。
その理由はPHPとCGIの動作に起因し、PHP利用の最大のメリット(?なのでしょうか?)であるHTML組み込みなど利用できなくなるからです。

動作の概略(あくまで概略なので細かくするとキリがありません)を示しますと(右に長いのでテキストエディタなどにコピペしてみていただくと見やすいかと思います)

CGIの動作
 ブラウザ-[INTERNET]->Webサーバー -[CGI]-> システム:処理言語{Perl/C/Ruby...etc.}+プログラム:処理結果 -[CGI]-> Webサーバー -[INTERNET]->ブラウザ

PHPの動作
 ブラウザ-[INTERNET]->Webサーバー:PHP:処理結果 -[INTERNET]->ブラウザ

PHPを単体で処理できるようにインストール設定すればPHPをCGIとして利用することも可能です。当然、利用範囲がCGIの域を出なくなり、PHPとしてのメリットがなくなってしまいます。
そのような非効率的な運用利用をする方はほとんどいないので書籍にしても需要が無いと思います(何らかの事情で必要な方なら、WebサーバとCGIがしっかり理解できていれば簡単に実現できるかと思います)。

ちなみに、代表的なWebサーバApacheは外部組み込み機能を使ってPerlを「PHPの動作」と同じ動きをさせることができます。
そちらは「CGI」の範疇ではなく「Webサーバー構築」の分野ですのでそういった書籍を参考にしてください。

なぜそのような書籍が無いのか結論から申し上げると「需要が無い」からです。
その理由はPHPとCGIの動作に起因し、PHP利用の最大のメリット(?なのでしょうか?)であるHTML組み込みなど利用できなくなるからです。

動作の概略(あくまで概略なので細かくするとキリがありません)を示しますと(右に長いのでテキストエディタなどにコピペしてみていただくと見やすいかと思います)

CGIの動作
 ブラウザ-[INTERNET]->Webサーバー -[CGI]-> システム:処理言語{Perl/C/Ruby...etc.}...続きを読む

QCSVファイルをCGIでダウンロード

Perlを使ってCGIを書いています。
申し込みフォームを送信すると、CSVファイルに書き込むのとメールで送信するというCGIを作りました。
そこで、その作ったCSVファイルをFTPソフトを使うのではなく、ブラウザ上でCGIを使ってダウンロードしたいのですが、どうしたらよいのでしょう?

環境は
OS:Linux、PerlのバージョンはPerl5です。

Aベストアンサー

すみません、ダウンロードでしたね。
それならばブラウザのURLでそのCSVファイル名を直接指定してやればOKだと思うのですが。。。


このカテゴリの人気Q&Aランキング

おすすめ情報