CGIの添付ファイルでBase64で送るには

[上に] [前に] [次に]
WIN2000 2000/02/20(日) 03:06:06
どうしてもわかりません。
sendmailでの添付ファイルでuuencoodeで送信されるのは探すとあるのですが、Base64でEncodeされているものは見たことがありません。
Base64でencodeするにはどうしたらよいのでしょうか??
uuencodeの場合とどう違うのでしょうか?
初歩的な質問かもしれませんがどなたかご存じの方いらしたら教えてください。
よろしくお願いします。

しなのむし 2000/02/20(日) 03:30:00
mimew.plを使えば出来ます。
http://www.tohoho-web.com/cgi-bin/mimew.txt

詳しい使い方は、mimew.pl自体に書いてありますが

$fileにエンコードしたいデータが入っているとして

$file = &bodyencode($file);
$file .= &benflush;

みたいにするだけです。

あとは、uuencodeの場合と変わりはないのではないでしょうか。
Content-Transfer-Encoding: base64
とするくらいかな・・・

ラウォッチ 2000/02/20(日) 12:23:12
以下が参考になると思います。
http://www.parkcity.ne.jp/~chaichan/src/perl05.htm#sendmail

しなのむし 2000/02/20(日) 16:51:50
ラウォッチ氏

>$header =>>END;
$header =<<END;

>尚、このロジックはラウンジの
>B-Cus氏の発言スレッドを参考にさせて頂きました。

B-Cusさんが前に書いたものから、発展させて
ENCTYPE="multipart/form-data"のフォームから受けたデータを
どう処理するか、が書いてあれば実用的かもしれませんね。

B-Cus 2000/02/20(日) 18:17:35
> 「Errors-To:」を使用するとかいろいろです。
Errors-To は誤りです。エラーメールは
エンベロープの From 宛に戻るものです。

ラウォッチ 2000/02/20(日) 21:13:49
>>$header =>>END;
>$header =<<END;
ロジックそのものはテストしましたが、HTMLにした時、ミスりました。
しなのむしさん、ご指摘、ありがとうございました。

>Errors-To は誤りです。
上記2点、早速、直しました。

B-Cusさんまで、来てもらえて光栄です。
ありがとうございました。

しなのむし 2000/02/21(月) 02:14:30
>具体的には、-fオプションや -baオプション使用とか
>いろいろですが、通常 From へ戻ります。

ちょっと誤解を招きそうなので書きますが
B-Cusさんが書いているように、エラーメールは
エンベロープの From 宛に戻るもので
通常、単純にヘッダの From に戻るわけではありません。
やはり、一ユーザーがこの辺をコントロールするには
-fオプションでしょうか。

-baオプションって何でしょうか?(^^;


>Errors-To は誤りです。エラーメールは
>エンベロープの From 宛に戻るものです。

ほとんどの場合、ヘッダにあっても無視されるでしょうが
ヘッダのErrors-ToやFromにエラーメールを返す設定の
ところも稀にあるらしい。(不確か)
NiftyServeってそうなの?

B-Cus 2000/02/21(月) 03:57:04
とりあえずこれをもう一度読んで下さい>ラウォッチ氏
   ../200001/00010191.htm

Errors-To は、RFC1123 に違反しているらしいですが、
どこがどう違反しているかは知りません。あと、最近の
sendmail はデフォルトでは Errors-To を見ません。


> ヘッダのErrors-ToやFromにエラーメールを返す設定の
> ところも稀にあるらしい。(不確か)
Envelope from に返さない SMTP サーバは、Lotus の
cc:Mail が有名でしょうか (最新版ではどうなのか知らない)。
Microsoft のもそういうのがあるらしいけど、具体的な
ソフト名は知りません。

よくメーリングリストにエラーメールばらまいて
顰蹙かってます。

# http://java-house.etl.go.jp/ml/archive/j-h-b/012109.html
# http://www.join.ad.jp/tech/faq-j/misc/hints-of-cc:Mail
# http://www.flathill.gr.jp/~flathill/FreeBSD/ccMail.txt

ラウォッチ 2000/02/21(月) 09:45:28
実は、Envelope fromってよくわかりません。ヘッダのFromではないみたい...。 ^^;
もしよろしければ、教えて下さい。

WIN2000さんへ
私の為に、変な方向へいってしまって、ゴメンなさい!

WIN2000 2000/02/21(月) 23:05:54
みなさんたくさんありがとうございます。
最初にかけばよかったのかもですが。。。。
あるHPのをすこし変えて使ってるんですが、

$file = &bodyencode($file);
$file .= &benflush;

このファイル部分が、配列@になってるんですよ。
なのでそこをどうしたらよいのかが全然わからなくて・・・
その部分がどういう動きをしているのかが理解できなんです。
今更ですが、再び何かわかりましたらよろしくお願いします。

WIN2000 2000/02/21(月) 23:37:44
みなさんたくさんありがとうございます。
最初にかけばよかったのかもですが。。。。
あるHPのをすこし変えて使ってるんですが、

$file = &bodyencode($file);
$file .= &benflush;

このファイル部分が、配列@になってるんですよ。
なのでそこをどうしたらよいのかが全然わからなくて・・・
その部分がどういう動きをしているのかが理解できなんです。
今更ですが、再び何かわかりましたらよろしくお願いします。

しなのむし 2000/02/22(火) 01:46:54
>このファイル部分が、配列@になってるんですよ。
>なのでそこをどうしたらよいのかが全然わからなくて・・・

ソースを見ないことにはなんとも分からないですね。

>実は、Envelope fromってよくわかりません。

http://plaza17.mbn.or.jp/~chi/FreeBSD/HowTo/mail/envelop.html

B-Cus 2000/02/22(火) 04:53:56
あと、Received ヘッダに
 (envelope-from foo)
とか
 (envelope-from foo@bar.com)
などと書いてある場合があります。

WIN2000 2000/02/23(水) 10:45:27
たびたびすみません。
ソースはこうなってます。
他のサイトからそのまま遣わせてもらってるものです。
ですが、これですと添付が見れないメーラーがあるのです。
なのでこれをBase64でエンコードできないかなぁと思ってます。
お願いします。

foreach $file (0 .. $#FILE) {
($name,$filenum,$filename) = split("\0",$FILE[$file]);
print OUT "--$bound\n";
print OUT "Content-Type: application/octet-stream; name=\"$filename\"\n";
print OUT 'Content-Transfer-Encoding: X-uuencode' . "\n";
print OUT "Content-Disposition: attachment; filename=\"$filename\"\n\n";
if (open(UU,"$UUENCODE $tmp$filenum $filename |")) {
@UUFILE = <UU>;
close(UU);
print OUT @UUFILE;
}

if (-e "$tmp$filenum") { unlink("$tmp$filenum"); }

}

ラウォッチ 2000/02/23(水) 14:29:23
以下の感じになるとおもいます。(テストはしていません)
(だた、uuencodeをBase64にしただけ)

require 'mimew.pl';
foreach $file (0 .. $#FILE) {
   ($name,$filenum,$filename) = split("\0",$FILE[$file]);
   print OUT "--$bound\n";
   print OUT "Content-Type: application/octet-stream; name=\"$filename\"\n";
   print OUT 'Content-Transfer-Encoding: BASE64' . "\n";
   print OUT "Content-Disposition: attachment; filename=\"$filename\"\n\n";1

   open(UU,"$tmp$filenum");
   $wkdata = join('',<UU>);
   close(UU);
   &bodyencode($wkdata);
   &benflush;
}

尚、mimew.plは以下にあります。
http://www.tohoho-web.com/wwwmail2.htm

ラウォッチ 2000/02/23(水) 15:00:01
間違えました。

>&bodyencode($wkdata);
>&benflush;
$wkb64data = &bodyencode($wkdata);
$wkb64data .= &benflush;
print OUT "$wkb64data";

WIN2000 2000/02/24(木) 00:38:03
[[解決]]
ありがとうございます。
無事に解決しました。
でも、実際どのようにエンコードの違いがあるのかがよくわかりませんねぇ。
やっぱり難しいです・・・
お世話になりました。

[上に] [前に] [次に]