まさはる's Weblog

まさはる's Weblog
Macintoshとオーディオの話題

2006年10月29日

LaCoocan(その2)

Category : Web / Posted at 2006年10月29日 20:13

 9月上旬にLaCoocanに引っ越してからそろそろ2ヶ月になるところなので、私が使っている範囲でいくつか分かった点などを。

 まず、アクセスログは入手できません。欲しいのであれば、自分で作るか他社のサービスを利用する必要があります。あと、サーバーの動作はけっこう緩慢でサクサクとは動作しません。
 良い点としては、定期にスクリプトを実行できる機能がありブラウザで簡単に設定できるようになっているのと、転送量の制限がないということです。これらを引っ括めて全体的な印象は価格相当かなという感じです。

CGI定期実行設定画面
CGI定期実行の設定

 ちなみにうちの定期実行スクリプトには、前日のアクセスログを自分あてにメールで送信するCGIを設定しています。

 表には、「メールで送信するCGIを設定しています」といとも簡単に設定したような書き方をしていますが、これまでPerlで日本語のメールを送ったことがなかったので、えらく苦労しましたw。
 苦労した原因は、Encode和訳)を使ってiso-2022-jpのメールを送ろうとしたことと添付ファイルの扱いで、Encodeの方はPerl/Unicodeを、添付ファイルはMIMEの基礎を参考にしてなんとか送信できるようになりました。
 それにしても、Perlのバージョンが5.8.8未満でUTF-8ソースの場合はuse utf8;をしないといけないとは...てっきりそのまま使えるものだと思っていましたw。

 以下は、UTF-8ソースからiso-2022-jpでメールを送信する場合のテストプログラムです。このプログラムを試す場合は、1行目のPerlのパス、$mailerのsendmailのパス、$emailの値及び最終ヘッダー(Subject: $subject)の後の「(ここは改行だけの行)」を空行に修正して、ブラウザで呼び出してください。正常に送信できれば「mailtest ok」と表示されるようになっています。

・メール送信テストCGIのサンプル


#!/usr/local/bin/perl -wT
use strict;
use Encode;
use utf8; # Encode使用&Perl 5.8.8未満&UTF-8ソースの場合は指定する
use MIME::Base64;
BEGIN {
    $ENV{PATH} = "/bin:/usr/bin";                # 環境のクリーンナップ
}
 
# 設定
my $mailer  = '/usr/sbin/sendmail';
my $email   = 'aaa@bbb.com';
my $name    = 'mailtest';
my $subject = 'メール送信テストabc123のタイトル';
my $message = 'メール送信テストabc123の本文です。';
 
# タイトルのエンコード
$subject = encode('iso-2022-jp', $subject);      # iso-2022-jpにエンコード
$subject = encode_base64($subject, '');          # Base64にエンコード
$subject = '=?iso-2022-jp?B?' . $subject . '?='; # ヘッダー文字列の追加
 
# 本文のエンコード
$message = encode('iso-2022-jp', $message);      # iso-2022-jpにエンコード
 
# メール送信
open MAIL, "| $mailer -t -f'$email'" or die "Cannot open sendmail: $!";
print MAIL <<END_OF_MESSAGE;
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset=iso-2022-jp
From: $name <$email>
To: $email
Subject: $subject
(ここは改行だけの行)
$message
END_OF_MESSAGE
close MAIL or die "Cannot close sendmail: $!";
 
# 結果表示
print "Content-type: text/plain; charset=UTF-8\n\n";
print "$name ok\n";
このページのトップに戻る