死闘!
OG Mailinglist
2015-02-20 at Drupal Cafe Osaka 28
刀祢邦芳(Tone, Kuniyoshi)
自己紹介(1)
● 元TMUG 名誉会長
● IT業界40年
○ メインフレーム
○ Windows
○ UNIX
● 苦節10年 with Web+OSS 
● Drupalとの再会 in 2014/10
2
自己紹介(2)
● 仕事では
○ Actuate (BIRT)
○ Tableau
○ Pentaho (Spoon)
○ Zabbix
○ PHPRunner
○ その他
■ Wakanda, Ansible, Docker, Redmine, Magento など少々
● 使ってきた言語(順不同)
○ Powershell(最近)
○ JavaScript, Google Apps Script
○ COBOL, FORTRAN, PL/1
○ マクロ・アセンブラ(6502, System/370)
○ C,VB,PHPはあんまり使ってません
3
● 以前から高校の同期生のMLを管理
● MLには問題点が種々あったので「脱ML宣言」後
2011年7月にWordPress掲示板に移行
● しかし多くはROMなので投稿、コメントをIIJのML
サービスで配信(ホスティングサービスからのメー
ル送信は200通/時間の制限あり)
==>掲示板とMLの二重メンテが発生
● メールでの投稿を求める声が大きくDrupalにて実
現することを決意
課題と経緯
4
MLの欠点
● 文字化け・配信漏れ多発
● 添付ファイルの制限が厳しい
● 見栄えがメーラー依存(Webのブラウザ依存以上)
● スレッドが見えにくい
○ MLアーカイブをWebで見ても同様
○ 途中参加の人は議論に追いつくのが面倒
● 引用のゴミが邪魔
● これらの欠点が途中にDrupalを介在させることで
ある程度は改善されるであろう
5
D7でやりたいこと
1. ArticleにWebまたはメールで投稿
2. 投稿をメンバーにメール配信
3. そのメールへの返信メールを該当のArticleのコ
メントとして取り込む
4. Webまたはメールでのコメントもメンバーにメー
ル配信
6
実現案(A)
● Messaging
● Notifications
● Mail Comment
● Feeds
の組み合わせにトライ
(参考:http://www.streamconsulting.nl/index.php?q=node/43)
しかしながら
● メールの件名が尻切れトンボ
● メール返信時の引用を除外する設定がうまく動作しない
● cronでのfeedがうまく行ったりいかなかったり?
● モジュール本体とドキュメントが若干古い?
7
実現案(B)
● Organic groups
● OG Mailinglist(project:og_mailinglist)
の組み合わせにトライ(類似品og_mailing_listにご
注意!)
(参考:https://www.drupal.org/node/938718)
8
What is OG
● 実例
○ http://drupal-seminar.jp/node/160
● 機能
○ 1つのサイトに複数のGroupを定義し、そこに特
定のコンテンツタイプを関連付ける
○ Userは特定のGroupに特定のRoleで加入
(Subscribe)しコンテンツを作成・閲覧できる 
9
OGの構造
10
● グループの雛形となるコンテンツタイプ(複数可能)を作成
<例>運動部掲示板コンテンツタイプ、文化部掲示板コンテンツタイプ
● グループ用コンテンツタイプにグループコンテンツ(複数可能)と
そのメンバーを登録
<例>野球部グループ掲示板コンテンツを登録し、そこに野球部員を登録
● 記事用コンテンツタイプをいずれかのグループコンテンツタイプ
に関連付ける
<例>運動部掲示板用Article、文化部掲示板用News
● 記事用コンテンツ投稿時に投稿者の属するグループに関連付
けて投稿
<例>野球部員が野球部掲示板にArticleを投稿する
グループ用コンテンツタイプ
11
グループ用コンテンツ
12
これをML用のメールアドレスにする
@mg.sample.com
記事用コンテンツタイプ
13
記事用コンテンツタイプ追加フィールド
14
entityreference_prepopulateモジュールが
追加した機能(コンテンツ追加用のURLに指
定した値でGroupを指定するため)
記事用コンテンツの投稿
15
● メールでスレッドを紐付ける
○ Message-IDにノードIDを持たせる
例:Message-Id: <node-35-comment-0@mg.sample.com>
● 引用のゴミの削除
○ 行頭に>がある行は削除
● メール送受信は推奨設定のMailgunを用いる
○ 通常のメールサーバ(QmailやPostFix )も利用可能のよう
だが設定が面倒くさそう
○ GmailやWebホスティングだとSPAM防止のため単位時間
あたりのメール送信数が制限されることがあるが、
Mailgunは制限がない
OG Mailinglistの仕組み
16
Mailgunとは
● http://www.mailgun.com/
○ 参考 http://blog.katty.in/5558
● 商用メールサーバ
○ 10000 mails/month まで無料
○ Next 500,000 mails は$0.0005/mail
● メリット
○ RESTful APIで送受信するのでSMTP/IMAPのcron不要
○ SPAMとみなされにくい
■ uses SPF and DKIM for proper authentication
○ 送信エラーアドレスをMailgunで管理
● デメリット
○ localhostでテストできない
17
Mailgun設定(Account and Domain)
18
Mailgun設定(DNS)
19
Mailgun設定(Routes)
20
forward('http://sample.com/drupal/og_mailinglist/mailgun_callback_mime')
catch_all()
modules/og_mailinglist_mailgun/readme.txt参照
But generally, you will want to setup a catchall router which forwards
all emails sent to your domain to your Drupal site. To do so, click
"Create route", then set the "Filter Expression" to "catch_all()". Then set "Actions" to
"forward('http://BASE_URL_OF_YOUR_DRUPAL_SITE/og_mailinglist/mailgun_callback_mime')"
ここの設定でML投稿メールを受信する
インストールした主要モジュール
● drush en xxxx --resolve-dependenciesで依存関係含めてインストール
○ module_filter
○ admin_menu
○ admin_views
○ og
○ og_mailinglist
7.x-1.1-alpha2+10-dev (推奨版だとPHPエラー)
○ l10n_update
○ backup_migrate
○ views_bulk_operation
○ advanced_help
○ panels
○ entityreference_prepopulate
○ realname
○ save_draft
○ node_edit_protection
21
PHP関係では以下が必要
● PHPMailer
● apt-get install php-mail-
mimedecode
OR
● yum -y install php-pear-Mail-
mimeDecode
<==大変便利です ○ profile2
○ feeds
○ feeds_profile2
Organic groupsモジュールの環境設定
● admin/config/group画面
○ OG mailinglist以外はデフォルト設定で
OK?
● アカウント
○ GroupMembershipフィールドの設定
● 右のモジュールのみONにしている
22
GroupMembershipフィールド
23
チェックボックスの方がデフォルト設定しやすい
OG Mailinglistのセットアップ(1)
24
● 本文の最大サイズ(デフォルト: 100K)
● 1時間あたりの最大投稿数 (デフォルト
20件)
● スレッド化にIn-Reply-Toヘッダを用いる
● 投稿者自身にもメールを送信
などを設定する
OG Mailinglistのセットアップ(2)
25
● デフォルトのコンテントタイプとテキスト
形式
● 添付ファイルのフィールド名
● Mailgunの情報
● メールサーバのドメイン名
などを設定する
Email投稿に関するテキストフォーマットフィルター設定
26
返信メールの引用部分の
先頭に
>
がある場合はその行を削
除して投稿する
デフォルトのOG関係のViews
27
Group専用Panel
28
記事投稿用リン
クの環境設定
実際のパネル
29
最後の仕上げ
30
● Real Nameモジュール
○ ユーザのidではなく「氏名」を表示するため
○ 多分同窓会掲示板特有の要件であろう
● Theme
○ MAYOが色々カスタマイズできて便利
● 日付表示カスタマイズ
○ 「Y/n/j(D) - H:i」書式を全面的に使用
● Save Draftモジュール
○ WordPressでは標準の下書保存機能
● Node Edit Protection
○ 投稿の保存ミスを防ぐ
注意事項・課題
● MAYOのテーマを使うとコメントの日付が正しく表示されずに
@datetimeのまま
● メール投稿された記事をWebのHTMLエディタで編集しようとす
ると改行コードがなくなってしまう
○ CKEditorとテキストフォーマットフィルタリングの関連?
○ HTML記事を書きたい人は最初からWebで
● 画像・添付ファイル付きのメール投稿はメーラーに依存してでき
たりできなかったり。Gmailとの相性は良いが。
=>いっそのこと添付付きはエラーとする?
31
最終目標へ向けて
● ユーザーのフィールドに現在スプレッドシートで管理
しているもろもろの項目を追加する
○ これでユーザー自身がメールアドレスに加えて自分の住所や
電話番号の変更ができる
○ 一覧表のビューを作成し常に最新の名簿を提供する
○ 一応名簿ビューはできたが他のユーザの項目参照がができた
りできなかったり???
● 現在のWordPress掲示板のコンテンツを移行する
○ https://www.drupal.org/project/wordpress_migrate
で可能な限り以降
○ 最悪はコピペでも良いが・・・・
32
My Troubles (勉強になりました)
33
● Mailgunでのメール受信
○ modules/og_mailinglist_mailgun/readme.txtを見つけ
るのに手間取った
● CKEditor
○ Librariesを使うとPHPMailerでエラーになった
● Panelの作成は慎重に!
○ ViewとView Panesを間違った
● 短縮URLを知らなかった
○ Mailgunと繋がらなかった
参考資料・教材(未完も含む)
● Udemy(https://www.udemy.com/courses/)
○ DRUPAL 7 – Beginners to Advanced
https://www.udemy.com/drupal-7/
● Packt Publishing(https://www.packtpub.com/)
○ Drupal 7 Module Development [Video]
● OSTraining(https://www.ostraining.com/)
○ Drupal Videos
https://www.ostraining.com/courses/categories/drupal/
この中”Organic Groups Version 2”が参考になった
34
END
35

死闘!Og mailinglist