suin.io

XoopsMailer::setToUsers()はXoopsUserかUserUsersObjectしか受け付けない!

suin2008年9月26日

白扇につづいてLegacy用のプロフィールモジュールを開発していたところ、なぜか新規登録で承認キーのメールが来ない(管理者には通知メールが来る)現象がおこりました。とりあえず、承認キー送信用のオブジェクトをvar_dumpしてみたら、「["toUsers"]=> array(0) { }」と出ました。

えぇぇぇぇ!

これじゃ届かないな~。原因を探るべくメーラーの中身を探すことにしたのですが、関数getMailer()でオブジェクトを拾ってきてるらしい?grep検索で探すのもめんどくさかったので、getMailer()でググってみたら、こんな一節が出てきました。

getMailer() は、XOOPS 2.0 系と同じ実装である。

えぇぇぇぇ!

そうだったの~?XoopsMailerに原因があるらしいな~。まずは、toUsersがからだったので、setToUsersで検索してみたら、更なる驚くべき事実がわかりました。

//@ToDo $user should be either XoopsUser or UserUsersObject now
if ( in_array(strtolower(get_class($user)) , array("xoopsuser", "userusersobject"))) {
	array_push($this->toUsers, $user);
}

ひやぁぁぁぁ!

これは、クラス名がXoopsUserかUserUsersObjectじゃないと宛先にしてくれないというものです。つまり、UserUsersObjectを継承した私のProfileUsersObjectは仲間はずれにあっていたようです...。゜(つω`)゜。X2のものなので仕方ないことではあります。

XoopsMailerを継承して、いっそのことsetToUsers()をオーバーライドしてやろうかと思いましたが、各言語によってメーラーを切り替えているみたいなので、継承することはやめ、メール配信のときだけ、XoopsUserをnewして値を渡すか、setToEmails()で直接メールアドレスを渡すかすることにします。

RELATED POSTS