68user's page 掲示板

Prev< No. 1461〜1466> Next  [最新発言に戻る] [過去ログ一覧]
No. 1461 # 68user 2000/12/14 (木) 02:38:32
@1458 masa さん
> UNIXでsendmailを使ってメールを送信するスクリプトをPerlで作ろうと
> 思っているのですが、添付ファイルを付けることは可能なのでしょうか?
モジュールが使えるなら
    http://www.parkcity.ne.jp/~chaichan/qanda/qa425.htm?00-12-13-19-49
で、ふじさんが述べておられる方法がお勧めです。

@1459 M.K さん
> これを最終金曜日だけ11:00起動でそれ以外は12:00に起動させる
> っていう方法はあるんでしょうか?
少なくとも FreeBSD の crontab では、それを実現する簡単な
方法はありません。
    金曜日の 11:00
    毎日 12:00
という二つのエントリを作って、スクリプト内で
    最終金曜日で12時台なら、処理終了
    金曜日 && 最終金曜日でない && 11時台なら、処理終了
とするのがいいでしょう。

試してませんが、*BSD や GNU の date なら、
    date +%m … 現在の月を求める
    date -v+7d +%m … 一週間後の月を求める
を利用して
    0 11 * * 5 [ `date +%m`!=`date -v+7d +%m` ] && run-script
    0 12 * * * [ `date +%w'!='5' -o `date +%m`!=`date -v+7d +%m` ) ] && run-script
てなことが可能かもしれません (条件合ってるかな?)。

@1460 辻さん
foo.cgi?.... という GET 形式は、? 以降の文字が QUERY_STRING
(疑問符文字列) という名前で取り出せることからわかるように、
? はエンコードする必要はありません。疑問符であることが重要なのです。

> URLのエンコードの対象はURL全てですか?
全て、というかパス (/~user...) も含めてエンコードが必要です。
ただし、引数を渡したい場合は ? はエンコードしません。
でなくて、ファイル名の一部に ? が含まれる場合は
エンコードが必要です。

この掲示板の上にある発言フォームから文字を入力すると、
    Name … 68user
    Email … 68user@X68000.startshop.co.jp
    Message … ほげほげ
というような、対応関係が生まれます。このようなフォームで
生成されたデータを POST で送るとき、クライアントは
application/x-www-form-urlencoded という mime type で
送信しなければいけません。「HTTP クライアントを作ってみよう」
では手抜きして送ってませんが、本来は送るべきです。

で、GET の場合も同様に x-www-form-urlencoded 形式ならば
?foo=bar は ?foo=bar でよいです。= は URL エンコードしません。
しかし、そうではなく 「foo=bar」という引数を渡したいのなら
?foo%3Dbar となります。

というふうに、本当は /~user/hoge.cgi?fuga=ABC!"$ DEF+
という例だけでは、どこをエンコードすべきかは明確には
なりません。なので、あの解説はあまりよろしくないですね。

例えば hoge.cgi?foo=bar&def=ghi は、フォームに foo、
bar という要素があるならこのまま送ればよいですが、
foo=「bar&def=ghi」という意味なら foo=bar%26def%3Dghi」
とすべきです。どちらなのかは hoge.cgi?foo=bar&def=ghi
だけでは正確には判断できません。

No. 1462 # nac 2000/12/14 (木) 02:56:19
こんばんは、質問をした本人のレスが遅れて申し訳ありません。
(しかも、ソースまで見て頂いて恐縮です。)

>サーバアプリケーションの名前を教えてください。qpopper ですか?
一般のプロバイダで実験したので、わかりませんでした。
今度他の qmail, sendmail が動いているサーバーで実験してみます。

さて、私も手元にあった、qpopper3.0.2 のソースを眺めてみました。
(POP_TERMINATE は '.' buffer は buffer[MAXMSGLINELEN] (MAMSGLINELEN=1024) と宣言されています)

pop_sendline ( p, buffer )
POP * p;
char * buffer;
{
        char * bp;

        /*
          * Byte stuff lines that begin with the termination octet
          */
        if ( *buffer == POP_TERMINATE )
                (void)fputc ( POP_TERMINATE, p->output );

        /*
          * Terminate the string at a <NL> if one exists in the buffer
          */
        bp = index ( buffer, NEWLINE );
        if ( bp != NULL )
                *bp = 0;

        /*
          * Send the line to the client
          */
        (void) fputs ( buffer, p->output );

        /*
          * Put a <CR><NL> if a newline was removed from the buffer
          */
        if ( bp != NULL )
                (void) fputs ( "\r\n", p->output );
}

これをみると、やはり、\n がなければそのまま出力されて
しまうようですね。なんとなく、最初から、\n があることを
想定しているような感じも受けます。

No. 1463 # 辻 義一 [E-mail] 2000/12/14 (木) 19:31:21
68user さん、何度もありがとうございます。

私は、HTMLにある<A>タグでリンクされているHTMLをGETするプログラムを作っています。フォームに関わるCGIを作ってるわけではないのですが、リンク先が掲示板で?で引数を渡すリンクがある場合は、正しく渡して、取り出したいと考えています。

この場合、GETなのか、POSTなのかはわからないのですが。ブラウザがフォームからの結果以外で単純にリンクから、ページを読み込むときは、GETを使っているのだと思うので、GETでいいのですか?

で、よくわかっていないのですが。この場合も、URLを%とかでエンコードすべきかは判断できないのですか?ブラウザはやっているように思えるのですが。。。

No. 1464 # 68user 2000/12/15 (金) 01:03:53
行頭に「>>1461」または「@1461」と書くと、
>>1461 68user
というふうにリンクを張るようにしました。このとき、自動的に
リンク先の発言者の名前を補完します。「さん」付けは
なしですが、御了承下さい。

また、「>>1461 ほげほげ」と、数字の後に何かを書くと、
>>1461 ほげほげ
とリンクだけが張られ、名前の補完はされません。しかしスクリプトが
どんどん汚くなってきた…。brush up が必要だなぁ。


>>1463 辻 義一
> GETでいいのですか?
foo.cgi?hoge.. という形式なら GET でよいです。

要は、HTML を読んで <A HREF="foo.cgi?hoge=fuga">..</A> という
部分から foo.cgi?hoge=fuga という文字列を切り出した場合、どこを
エンコードすべきかということですよね。普通は何もエンコードせず
デコードせず、そのまま使えばいいと思います。アンカーに書く
URL は既に URL エンコードされているはずだからです。

それを無理にエンコードする必要はないですが、あえて行うならば
?=&%#/.-*_ 以外の記号と 0x80〜0xff はエンコード、でいいのでは
ないでしょうか。

>>1462 nac
> これをみると、やはり、\n がなければそのまま出力されて
> しまうようですね。
そうですね。POP3 サーバとしては、本文の行がどれだけ長くても、
改行は付加しないのが普通ではないかと思います。基本的にクライ
アントにデータを流すだけですから。

No. 1465 # rosegarden 2000/12/15 (金) 01:13:32
>それを無理にエンコードする必要はないですが、あえて行うならば
>?=&%#/.-*_ 以外の記号と 0x80〜0xff はエンコード、でいいのでは
>ないでしょうか。

html の文法的には
hoge.cgi?foo=1&bar=2

hoge.cgi?foo=1&amp;bar=2
と書くそうなので、そういった html の文字参照の変換は
必要になるかも知れません。例えば、&#36; とか…。

No. 1466 # 辻 義一 [E-mail] 2000/12/15 (金) 19:19:18
68user さん。

ありがとうございます、エンコードもデコードもしなくて良いと言うことですか。楽は楽なのですが。~もそのままで良いのかな。。今のプログラムでGETできているので、このままで行こうかと思います。

rosegarden さん。
その変換について走っていますが、、タグ内の文字列(""で囲まれた部分)までは適用しなくても良いと思うのですが。しているのも見たことありませんし。

Prev< No. 1461〜1466> Next  [最新発言に戻る] [過去ログ一覧]