perl



2011 4月5日

id:tokuhirom氏作の Email::MIME::MobileJP::Template を発見したので使ってみる。

PODにあるコードは動作しないので注意。renderメソッドのAPIが変わったのかな?ソースを見ると引数の最初に送り先のメールアドレスを指定しないとダメみたい。

それと、Email::MIME::MobileJP にあるソースも間違えているので注意。syntax=>’TTerse’ は newする時に引数で指定する事。

use Email::MIME::MobileJP::Template;
use Email::Sender::Simple;

    my $token='123';
    my $to_email = '<foo@hoge.jp>'; # <>で囲わないとdocomoで受信したときToがおかしなことに。

    my $mail_maker = Email::MIME::MobileJP::Template->new(
                    'Text::Xslate' => {
                            syntax => 'TTerse',
                            path => ['email_tmpl/']     # テンプレートの保存場所
                    }
    );

    my $mail = $mail_maker->render(
                    $to_email,                  # 送信先
                    'signup.eml',               # テンプレートファイル
                    {token => $token}    # テンプレートで利用する変数
    );
    # メールを送信
    Email::Sender::Simple->send($mail);

テンプレートファイル

path で指定したディレクトリにテンプレートファイルを作成する。MIMEヘッダはテンプレートでしか指定できない。Fromは記述しないと致命的なエラーとなるので注意。

./email_tmpl/signup.eml

Subject: [Example] サインアップ!
From: <name@hoge.com>

    以下をクリックせよ
    http://example.com/signup/[% token %]

携帯電話宛のメールが正しく送れない?

…つづきを読む







2011 4月1日

perlスクリプトをSpeedyCGIスクリプトとして動作させる場合、グローバル変数の値は保持され続ける。なので、一度接続したデータベースハンドルを使い回すことでデータベースへの接続コストを削減できる。

テスト用スクリプト …つづきを読む







2011 3月9日

perlのWAF(ウェブアプリケーションフレームワーク)である Mojolicious(Mojolicious::Lite)をアップロードだけで使えるのか試してみる。

簡単に使えるフレームワークとして、とりあえず Linux+Apacheで動けばおkという前提で。

なにせフレームワーク初心者の戯事なのでそのあたりは察してください。

…つづきを読む







2011 3月8日

メール送信に便利な Mail::Sendmail
大変便利なモジュールだけど、RFCに違反しているメールアドレスでは内部のエラーチェックに引っかかり送信出来ない。

例えばこんなメールアドレスには送信出来ない。
例)read_rfc822.@docomo.ne.jp

元ソースの正規表現部分

# regex for e-mail addresses where full=$1, user=$2, domain=$3
# see pod documentation about this regex

my $word_rx = '[\x21\x23-\x27\x2A-\x2B\x2D\x2F\w\x3D\x3F]+';
my $user_rx = $word_rx         # valid chars
             .'(?:\.' . $word_rx . ')*' # possibly more words preceded by a dot
             ;
my $dom_rx = '\w[-\w]*(?:\.\w[-\w]*)*'; # less valid chars in domain names
my $ip_rx = '\[\d{1,3}(?:\.\d{1,3}){3}\]';

$address_rx = '((' . $user_rx . ')\@(' . $dom_rx . '|' . $ip_rx . '))';
; # v. 0.61

@EXPORT_OK に $address_rx が設定されているので、$Mail::Sendmail::address_rx の正規表現を変更すればエラーチェックに引っかからないようになる。

my $word_rx = '[\x21\x23-\x27\x2A-\x2B\x2D\x2F\w\x3D\x3F\.]+'; # \.を追記する
my $user_rx = $word_rx . '(?:\.' . $word_rx . ')*' ;
my $dom_rx = '\w[-\w]*(?:\.\w[-\w]*)*'; # less valid chars in domain names
my $ip_rx = '\[\d{1,3}(?:\.\d{1,3}){3}\]';
my $address_rx = '((' . $user_rx . ')\@(' . $dom_rx . '|' . $ip_rx . '))';
$Mail::Sendmail::address_rx= $address_rx;

正規表現を無効にした場合、当然の事ながらその前にメールアドレスの正当性をチェックしておく必要があると思う。(携帯メールアドレスを有効にするなら Email::Valid::Loose 等)

  • 関連記事:perl でメールアドレスの有効性をチェックするモジュール
  • モダンなperlモジュール

    メール送信系のモジュールは山ほどあるので何がいいか悩むところ。Mail::Sendmail のエントリーだけど、 Email::Sender がモダンなモジュールとして紹介されているのでリンクを載せておく。

  • モダンPerlの世界へようこそ:第20回 Email::Sender:メールを送信する|gihyo.jp … 技術評論社
  • [Email::Sender]Perlでメールを送信するときはEmail::Senderを使いましょうというお話 – punitanのメモ
  • 気になる点は Moose に依存しているという事。

  • Perl5 によるメール送信 – 実践的な Email::Sender の利用方法






  • 2011 2月18日

    JavaScriptとかで書いてて便利な無名関数。
    perlでも出来たら何か便利かなぁ。

    my $sub = sub {print @_, "\n";};
    &$sub('Hello,world!');
    
    #実行結果
    Hello,world!

    関数型言語って何がすごいんですか – Gemmaの日記
    にあるJavaScriptの例をperlで書いてみる。 …つづきを読む