色々事情があって、OpenPNE の「メッセージを送る」画面でメッセージ送信をすると、OpenPNE のユーザのメールアドレスに直接メールを送信する機能を Perl で実装した。
OpenPNE ではメールアドレスは暗号化されているので、OpenPNE のソースを元に、以下のような復号化スクリプトを書いて復号を行った。
#!/usr/local/bin/php
<?php
$address = $argv[1];
define('ENCRYPT_KEY', 'hogehoge_key');
$path ="/www/lib/include";
set_include_path(get_include_path() . PATH_SEPARATOR . $path);
include_once 'Crypt/Blowfish.php';
$blowfish = new Crypt_Blowfish(ENCRYPT_KEY);
$address = base64_decode($address);
$address = $blowfish->decrypt($address);
echo $address;
?>
で、不思議なことに、hogehoge3@exsample.co.jp宛のメールアドレスにはメールが届くのに、hoge@exsample.co.jp宛には届かない。
どちらも、ちゃんと存在しているメールアドレスなのにだ。
原因は、復号されたメールアドレスにあった。
どうも、上記のスクリプトで復号すると、24バイト以下のメールアドレスの後ろに 0x00 のコード(NULL)がセットされてた・・・
一応、後ろにスペースがセットされてたらやだなと思って、Perl 側で、
$address =~ s/\s//g;
な置換はかけてたんだけど、NULL値は \s じゃ引っかからんのね・・・
ということで、
$address =~ s/[\x00]//g;
として不要な NULL値を削ってやったら、問題なくメールが届くようになった。
ああ、ほんまに、ラピッドサイトサーバは maillog が見れないんで駄目駄目サーバだ。
独自のシステムを動かしたい企業は、月数千円の金をケチるのはやめて、WebARENA とかを使うべきである。(・・・て話は、この間もしたな(^^;)