2010 7月28日

GD のインストールに散々悩んだあげく、あきらめかていたけど、
http://tech.hitsug.net/?CentOS%2FPerlモジュール
このページに rpmforge レポジトリを使った yum でのインストールが載っていたので試したら一発で出来た。。。

yum --enablerepo=rpmforge install perl-GD

いろいろな要因があるのだろうけど。









2010 7月2日

Email::Valid

http://search.cpan.org/~rjbs/Email-Valid-0.184/lib/Email/Valid.pm

現在でも更新されている感じのモジュール。携帯向けに Email::Valid::Loose と言うモジュールもある(有名なMIYAGAWAさん作)通常ならばこのモジュールでいいと思う。

Mail::CheckUser

http://search.cpan.org/~ilyam/Mail-CheckUser-1.21/CheckUser.pm

Data::Dumper の作者らしい。18 Sep 2003 となっているので更新はだいぶ前。でもこのモジュールはなかなか良くて、存在ユーザーをある程度(?)調べてくれる。存在ユーザーのチェックは送信先のメールサーバの設定によって違うのかもしれない。ソースに
## gTLD Wildcard IPs
$NXDOMAIN= {………}
って感じでトップレベルドメイン(?)のAレコードやらCNAMEと思われるものが定義されているけど、これって更新されないのかなぁ?

で、こちらのモジュールでは携帯向けのアドレスで @ の前に . が付くもの(abc..@docomo.ne.jp など)は使えません。RFC822違反だそうです。

そこで Mail::CheckUser::Loose なるモジュールを作成・・・した訳ではないけど、リメイクして使いました。

自分の環境では /usr/lib/perl5/site_perl/5.8.5/Mail/CheckUser.pm でしたので、/usr/lib/perl5/site_perl/5.8.5/Mail/CheckUser と言うディレクトリを作り、その中に CheckUser.pm をコピペして Loose.pm にリネーム。

その Loose.pm を数カ所変更するだけです。

7行目付近

package Mail::CheckUser;
↓ ::Loose を追記
package Mail::CheckUser::Loose;

190行目付近

sub last_check() {
    return $Mail::CheckUser::Last_Check;
}
↓ ::Loose を追記
sub last_check() {
    return $Mail::CheckUser::Loose::Last_Check;
}

214行目付近

my $STRING_RE = ('[' . quotemeta(join '',
                                 grep(!/[<>()\[\]\\\.,;:\@"]/, # ["], UnBug Emacs
                                      map chr, 33 .. 126)) . ']');
↓ \. を削除
my $STRING_RE = ('[' . quotemeta(join '',
                                 grep(!/[<>()\[\]\\,;:\@"]/, # ["], UnBug Emacs
                                      map chr, 33 .. 126)) . ']');

244行目付近

    my $resolver = $Mail::CheckUser::Net_DNS_Resolver || new Net::DNS::Resolver;
↓ ::Loose を追記
    my $resolver = $Mail::CheckUser::Loose::Net_DNS_Resolver || new Net::DNS::Resolver;

スキル不足で継承とかよくわからないので(汗

use Mail::CheckUser::Loose;
my $check_email='h.o.g.e.@docomo.ne.jp';

$Mail::CheckUser::Loose::Timeout = 15;
$Mail::CheckUser::Loose::Treat_Timeout_As_Fail = 'true';

if(check_email($check_email)) {
    print "有効なアドレスです。";
}else {
    print "無効なアドレスです。",last_check()->{reason};
}

こんな感じで使ったりしてます。

以下修正後の全ソース

..Continue reading..









2010 7月1日

IEの6,7,8を判別するJavascript
JavaScriptでIEかどうかをたったの1行で判別する方法

この両者のスクリプトを合わせてみた。
ライブラリを使いたくない(or使えない)状況で役に立つかも。
ちなみに「IEの6,7,8を判別するJavascript」のコードは間違っていたので少々修正。

if (typeof document.body.style.maxHeight != "undefined") {
    if (!/*@cc_on!@*/false){
        // Not IE.
        alert('Not IE.');
    }else if (document.documentMode >=8) {
        // IE8
        alert('IE8');
    }else {
        //IE7, IE8(IE7 mode)
        alert('IE7, IE8(IE7 mode)');
    }
} else {
    // IE6, older browsers
    alert(' IE6, older browsers');
}

Windows XP の IE8、IE7、FireFox、Chromeで確認OK.
Mac の Safari、FireFox、Opera、Chrome でもOK.