Eメールによる新しいアカウントの登録を改造したい

Eメールによる新しいアカウントの登録を改造したい

- Takuya Kawatani の投稿
返信数: 12

新しいアカウントのEメールによる自己登録では、ユーザが新しいユーザ名とパスワードを選択してサインアップした場合、アカウント確定用メールが自動的にユーザのメールアドレスに送信されますが、このアカウント確定用メールを自動的には送信しないように改造することは可能でしょうか。

アカウント取得の申請は自由にできるが、アカウントの発行は管理者によるチェックの上で行うという仕組みを作りたいと考えています。

アカウント確定用メールの送信については lib/moodlelib.php(1.92+)の4400行あたりに関係していると思うのですが、ユーザでなく管理者にメールが届くようにできないかと、

    return email_to_user($user, $supportuser, $subject, $message, $messagehtml);

のuserをadminに変更してみたり、行をコメントアウトしてみたりしましたが、動作が停止してしまうだけでした。悲しい

よい方法があればご教授いただけると幸いです。

Takuya Kawatani への返信

Re: Eメールによる新しいアカウントの登録を改造したい

- Tatsuya Shirai の投稿

 もっと良い方法が実は用意されているのかも知れませんが,私は知りません.

 でも,川谷さんの発想は(少々乱暴ですが^^)とても面白い方法ですし,もしかしたらユーザ登録の認証方法としては重要な選択肢かも知れません.

 ただ,解決策はもう一工夫必要です.$userの変数は,function email_to_user()の中で,

$user->deleted
$user->auth
$user->emailstop
$user->id
fullname($user)
などなど

という様に,多くのメンバが参照されています.ですので,たとえば$user->idに管理者の方のユーザIDのみを設定してもうまくいかないでしょう.

 自信はありませんが,user/view.phpの冒頭の以下のコードを参考にすれば,

    if (! $user = get_record("user", "id", $id) ) {
        error("No such user in this course");
    }

$user = get_record("user", "id", '1'); でしょうか.(ここではサイト管理者の方のユーザIDを1としましたが,これは各サイトによって異なるでしょう.サイト管理者が複数存在する場合も考えられます.

 誰か一人にその仕事を請け負って頂くのであれば,例えばconfig.phpの中で,

$CFG->admin_email_confirm_userid = 1; (変数名も数字も適当です)

のように設定し,

if (! $user_admin = get_record("user", "id", $CFG->admin_email_confirm_userid) ) {
    error("No such user in this course");
} else $user = $user_admin;
return email_to_user($user, $supportuser, $subject, $message, $messagehtml);

のようにすれば,その管理者宛にメールが届くかも知れません.なお,ここで$user_adminのユーザが管理者かどうかはチェックしていませんので,$CFG->admin_email_confirm_useridを間違えて一般ユーザのユーザIDを設定してしまうと,そのユーザに意味不明のメールが大量に届いてビックリ仰天,という可能性もあります(笑).

 あ,もちろん,上記コードは全くチェックしていません.あくまでアイディアだけです.

Tatsuya Shirai への返信

Re: Eメールによる新しいアカウントの登録を改造したい

- Tatsuya Shirai の投稿

ん? function email_to_user()の一つ目の引数は$user (To:でしょうね)で,二つ目の引数は$fromですね.

 ということは,もしかしたら,もっと単純に,余計なことは一切しないで,

return email_to_user($supportuser, $supportuser, $subject, $message, $messagehtml);

という風に,第一引数も$supportuserにしてしまえば良いのかも知れません.自分から自分にメールを送信する.


$supportuser = generate_email_supportuser();

ですか.$CFG->supportemailが設定されていればそのアドレスですね.

これは[サイト管理]-[サーバ]-[Eメール]の下の方で設定するサポートメールのアドレスのようですよ.こちらに設定したユーザ宛に送られてきそうです.ただ,送信元と送信先とではチェックの甘さが全然違うので,やはりこのままではダメかも知れません.メールアドレス($CFG->supportemail)をキーにして,get_record()で$userを取得する必要があるかも知れません.

Tatsuya Shirai への返信

Re: Eメールによる新しいアカウントの登録を改造したい

- Mitsuhiro Yoshida の投稿
画像 Developers 画像 Particularly helpful Moodlers 画像 Translators
白井先生

ここに面白い投稿がありました。笑顔

[Admin approving self registrations?]
http://moodle.org/mod/forum/discuss.php?d=97938

Mitsuhiro Yoshida への返信

Re: Eメールによる新しいアカウントの登録を改造したい

- Takuya Kawatani の投稿

白井先生、吉田先生、早速に返信をくださりありがとうございます。職場で投稿して帰宅してみると、もうお二人から返信があったので驚きました。

白井先生の示してくださったソースコード(という言い方でよいのでしょうか?)も、吉田先生の示してくださった英語の投稿も、理解するには時間がかかりそうですが、がんばってみます。赤面

Mitsuhiro Yoshida への返信

Re: Eメールによる新しいアカウントの登録を改造したい

- Tatsuya Shirai の投稿

 おお,素晴らしい.

 他にも同じことを考える方が居るというのは,確かに,予想の範囲内のことでしたね.

 まだ詳しく読んでいませんが,本家の方で(選択肢の一つとして)動く可能性はあるのでしょうか.

Tatsuya Shirai への返信

Re: Eメールによる新しいアカウントの登録を改造したい

- Takuya Kawatani の投稿

白井先生

>return email_to_user($supportuser, $supportuser, $subject, $message, $messagehtml);
>
>という風に,第一引数も$supportuserにしてしまえば良いのかも知れません.自分から自分にメールを送信する.

この方法で管理者宛てのメール送信ができました!ありがとうございました。

アカウント登録者に対するメッセージの修正などが必要ですが、今日はここまでにします。

Takuya Kawatani への返信

Re: Eメールによる新しいアカウントの登録を改造したい

- Tatsuya Shirai の投稿

 良かった.きちんとメールが送られたようですね.

 ここで言うような管理者による確認が必要,という認証方法は意外とニーズが多い気がします.実は私も無秩序にユーザ登録できてしまうのはどうかなぁと常々考えていました.かといっていちいち,手動入力するのも大変です(年度の初めは覚悟を決めて行ないますが).

http://moodle.org/mod/forum/discuss.php?d=96654#p426947

 それでフッと上の書き込みの件を思い出しました.案の定,喉もと過ぎて,そのまま忘れていました(笑).

 川谷さんの方法の唯一の欠点は,ユーザが入力したメールアドレスが本当に正しいメールアドレスか,を確認できない点ですよね.この点を考えると,

  1. 新規のユーザがフォームで情報を入力する
  2. 新規のユーザに確認メールが送られる
  3. 新規のユーザが指定されたWebアドレスにアクセスする(到達確認完了)
  4. 新規のユーザの登録の確認メールが管理者に送られる
  5. 管理者が新規のユーザの登録を承認するために指定されたWebアドレスにアクセスする
  6. 新規のユーザの登録が完了(新規のユーザに登録完了のメールを送信)

一見,面倒ですが,よくWebサービスにアカウント登録する際に取る手順ですよね.フリーのメーリングアドレスの登録サービスではこのような方法が取られています.

 ちょっと改造が大掛かりになりそうですが...それに管理者は長期休暇を取れませんが(苦笑).

Tatsuya Shirai への返信

Re: Eメールによる新しいアカウントの登録を改造したい

- Tatsuya Shirai の投稿

 どうやらMDL-15636はこの問題への対策の検討も包含しているようです.

 期待しましょう.

Tatsuya Shirai への返信

Re: Eメールによる新しいアカウントの登録を改造したい

- Takuya Kawatani の投稿

moodleの機能として実装されるかもしれないのですね。期待しています。

白井先生ご指摘の「ユーザが入力したメールアドレスが本当に正しいメールアドレスか,を確認できない」点はクリアできませんが、機能が実装されるまでのつなぎのつもりで次のように修正してみました。

moodle1.9.2+ (Build: 20081001)
moodle/lib/moodlelib.php

4412行
    $user->mailformat = 1;  // Always send HTML version as well
// アカウント確定用メールを新規ユーザでなくサイト管理者に送るための修正 ここから
    $user->maildisplay = 2;  //行追加
    return email_to_user($supportuser, $user, $subject, $message, $messagehtml);  //変更:$user <-> $supportuser 入替
// アカウント確定用メールを新規ユーザでなくサイト管理者に送るための修正 ここまで

私は lib/db/install.xml を修正して maildisplay の初期値を 0 (非公開)にしているので、$user->maildisplay = 2; を追加しました。
(最初はこの行を追加していなかったので、新規ユーザのメールアドレスが noreply@~ になっていました。)
return email_to_user()は、第一引数 $user と第二引数 $supportuser とを入れ替えることで、アカウント確定用メールが新規ユーザからサイト管理者へのメールとして送信されるようになりました。
これで、アカウントを発行するときにメーラーの返信機能で新規ユーザに送信できるようになりました。

また、アカウント作成(申請)後にユーザに表示されるメッセージを次のようにしてみました。

moodledata/lang/ja_utf8/moodle.php

$string['emailconfirmsent'] = '<p><b>ご登録ありがとうございます。</b>
<p>アカウントの作成希望のメールがサイト管理者宛てに送信されました。
<p>サイト管理者による確認が終わり次第、アカウントの発行について記載したメールを返信します。
<p>もし3日以内にアカウント発行についてのメールが届かない場合は、お手数ですが、サイト管理者にご連絡ください。';

Takuya Kawatani への返信

Re: Eメールによる新しいアカウントの登録を改造したい

- Tatsuya Shirai の投稿

> return email_to_user()は、第一引数 $user と第二引数 $supportuser とを入れ替えることで、アカウント確定用メールが新規ユーザからサイト管理者へのメールとして送信されるようになりました。
>これで、アカウントを発行するときにメーラーの返信機能で新規ユーザに送信できるようになりました。

なるほど(笑).一つ一つは考えてみれば簡単なことですが,意外と瞬間的には気付かないものですね.管理者からの返信に答えたユーザのみ認証するというマニュアルでの運用を行えば,登録時のメールアドレス入力ミスを少しでも防ぐことができそうですね.なるほどなるほど.

Tatsuya Shirai への返信

Re: Eメールによる新しいアカウントの登録を改造したい

- Tatsuya Shirai の投稿

 MartinはMDL-15636については懐疑的なようですね.本日,書き込みがありました.確かに大規模システムの場合は管理者の負担が膨大なものになりますが,比較的小さなサイトであれば有用な機能だと思うのですけれどもね.Keyを自由に登録したい人たちのグループに公開する,というアイデアも確かに悪くはありません.

 もちろん,危惧されているように,メールアドレスだけから,その人が信用できる人かどうかは分かりません.でも,現状の”自己登録”を”Eメールによる自己登録”は自由すぎます.私も先日までこの設定をNoにし忘れていたため,気付いたらロシアの方がヘンテコリンな名前で自己登録されていました^^; わざわざロシアから来て頂いたのは嬉しいのですが...

 オプション(”Eメールによる自己登録+管理者による認証”を追加)とすれば,それほど改良は大変では無いかも.ついでに,自己登録の際に自己紹介も入力しないとダメとすれば,もう少し安心ですね.「あ,あの研究会で会った人だ」とか「あ,卒業生か」と分かりますからね.