opLiteMailTaskPluginの安定版の 1.0.0 および 1.2.0 をリリースしました。

1.0.0 と 1.2.0 は機能的にはほとんど違いありませんが、対応バージョンが違います

プラグインバージョン 対応するOpenPNEのバージョン
1.0.0 OpenPNE3.4.x
1.2.0 OpenPNE3.6.x

opLiteMailTaskPluginとは

OpenPNE3本体に含まれているものよりも、ずっと高速にデイリーニュースの送信と
誕生日お知らせメールの送信を行ないます。

さらに、こんな機能もあります

  • メール送信ログ記録
  • メンバーID範囲指定

メンバーID範囲指定は使い方によっては分散のメール送信もできるかなと思ったり思わなかったりするわけです。

ドキュメント

インストール手法や、利用については以下を御覧ください。

1.2.0向け (OpenPNE3.6.x運営者はこちら)
http://ex.bucyou.net/doc/opLiteMailTaskPlugin-1.2.0.html

1.0.0向け (OpenPNE3.4.x運営者はこちら)
http://ex.bucyou.net/doc/opLiteMailTaskPlugin-1.0.0.html

OpenPNE3.4 → 3.6 でメールテンプレ追加まわりの挙動が変化しました。

今までは、

管理画面から書き換えたメールテンプレをDBから取得
 ↓ なかったら
OpenPNEの ./template/* からテンプレート取得

とやっていましたが、メールテンプレートのデフォルト値を
設定している mail_template.yml から引っ張ってくるだけで
いいのでは?ってことを考えていました。
(実際にMLでも井上さんが提言してました。)

特にメールテンプレートのデフォルト値と ./template/* の
テンプレートに差異が生まれてしまうとかなり厄介です。

というわけで、以下の処理に変更

管理画面から書き換えたメールテンプレをDBから取得
 ↓ なかったら
mail_template.yml のデフォルト値を取得
 ↓ なかったら
OpenPNEの ./template/* からテンプレート取得

という処理になりました。

今回はそんな変更もあったので、プラグイン開発者向けな話しをしてみます。

以下は

  • ディレクトリは、 OpenPNE のディレクトリをカレントディレクトリと想定して書いています。
  • SNSは http://sns.example.com/ に設置しているものとします。

プラグインでのメールテンプレの追加

さて、プラグインで(管理者が文面を変更可能な)メールのテンプレートを追加するときはどうすれば良いか。
今回の変更の成果もあり、かんたんです。

プラグインのディレクトリconfig/ 以下に mail_template.yml
を作成して以下のようなファイルを作成します。

pc:                          #pc用のメール文面であることを示す。携帯用であればmobile
  hello_mail:                #メールテンプレートの名称。別のメールテンプレートと同じではいけない(pc・mobileは別として扱える)
    caption: "ハローメール"  #管理画面で出すテンプレート名称
    configurable: true       # true にすると管理画面で送信するか否かを選択可能になる
    title_configurable: true # trueでSubject変更可能に
    sample:                  # テンプレート文面サンプル
      ja_JP:                 # 言語指定 存在しない言語のテンプレートを取得しようとした場合、上にある言語が優先される
        - " {{ op.config.sns_name }} からのあいさつ" # Subjectテンプレ
        - |                  # 本文テンプレ
          こんにちはこんにちは!! {{ member.name }} さんこんにちは!
    variables:               # パラメタの説明(管理画面で利用)
      "op_config.sns_name": "SNS 名"
      "member.name": "受信者のニックネーム" 

Twig形式で作成することは今までこどおり。
Twig形式に関する情報は http://sns.example.com/pc_backend/help_template_format
で見ることができます。

もしくは http://www.twig-project.org/documentation で。

キャッシュをクリアすると

http://sns.example.com/pc_backend.php/mail/edit

に、今回追加したメールテンプレートが編集できるようになってます。

そして送信

さて、テンプレ追加したところで送信のロジックを書いていないので書きましょう。

メールを送りたいしかるべきポイントがきたら以下を呼び出します。

opMailSend::sendTemplateMail(テンプレ名, 相手のアドレス, 送信アドレス, パラメータ);

もっと具体的に行きます。メンバーID=1に対して 管理者アドレス(管理画面から設定)で
今回作成した hello_mail テンプレを利用して送ります。

$member = Doctrine::getTable('Member')->find(1); //メンバーID=1のMemberオブジェクト取得
$params = array('member' => $member); //メールテンプレ用パラメータ
opMailSend::sendTemplateMail('hello_mail', $member->getEmailAddress(), opConfig::get('admin_mail_address'), $params); //送信

これだけです。

ちなみに、Member::getEmailAddress() は 引数なしだと実行アプリケーションに依存してメールドレスを取得します。
(PC版であればPCアドレスを優先して、モバイルであればモバイルアドレスを優先します。)
Member::getEmailAddress(true) とするとモバイルのアドレスがある場合そちらを取得します。

なお、 sendTemplateMail() は モバイルのメールアドレスを 送信先に指定すると
モバイルのテンプレートを呼び出すことになります。
今回のようなモバイルのアドレスを指定する可能性がありそうな場合は、モバイルのテンプレートもしっかりと作成しましょう。

どもー。
全然ブログを作成する習慣が作れてませんが、とやかく、まとまってないことをまとめてみます。

今回のテーマはOpenPNE3.6の新機能です。
OpenPNE3.6は3.4との差分が多く、実用性がかなり向上しているということで
自分が開設しているSNSでは3.5.x-devをどんどん追うということをしていましたw
それくらい素晴らしい機能(もしくは今までなんで無かった)が多いバージョンなのであります。

以下、僕主観な感じなので全てではないです。

ログイン永続化

http://redmine.openpne.jp/issues/328

なんで無かった?ってことで付けました。
OpenPNE2系統とは内部的な仕組みは違うらしいです。

「かんたんログイン」に対する対処

「かんたんログイン」がヤバい件ということで、その段階的な対処の第一弾と言えるでしょう。
具体的には、こちらを御覧ください。

セッション維持時間問題の対処

http://redmine.openpne.jp/issues/1008

今まで、みじけぇ!!っていう意見が多くあったのもありその対処がされたようだ。
セッション維持時間を設定できるようになった上、今までよりずっと長く設定されるようになった。

モバイル自動リンク

http://redmine.openpne.jp/issues/1160

なんで無かったパート2
これもOpenPNE2系は若干異なっていて
なんと外部のサイトにもリンクされます。

…っといってもあの憎きCookie非対応のdocomo端末様がいらっしゃるので外部にはそのままつながりません。
セッションが維持されていない中間ページにジャンプします。

そこで、直接リンクをするか、メールでURLを送るか、Google Mobile Proxy(デフォルト)を利用するかを選ぶことができるわけです。
(docomoとauは内臓のフルブラウザへのリンクも用意している。)

この機能は設定でOffにできるようにしました。(OpenPNE.yml上)

さらにさらに、メールアドレスと電話番号もリンクできるように設定できます。(もちろんデフォルトではオフ)

[プラグイン開発者向け] メールテンプレート周りの改善

http://redmine.openpne.jp/issues/1329

メールタイトルが変更できるようになった上に、mail_template.yml に
テンプレート情報を作成するだけでメールテンプレートの追加が可能です。
これについては後でもうちょっとkwskやります。

[プラグイン開発者向け] スキンプラグインで画像を上書き

http://redmine.openpne.jp/issues/1116

僕が欲しかったので作った。反省はしない。(結構差し戻されましたが 🙁 その点は反省しています。)

どういう事かというと、 no_image.gif を 有効なスキンプラグインの web/images ディレクトリに置けば
そっちが優先されて表示されます。

よりデザイン拡張・変更にとって役に立つことでしょう。

(今後は管理画面から設定できるようにしたいが、その布石でもある)

その他パフォーマンスに関わる問題

ここは細かくは言いませんが、パフォーマンスを向上するためのIssueが幾つも作られていました。