35
死闘! OG Mailinglist 2015-02-20 at Drupal Cafe Osaka 28 刀祢邦芳(Tone, Kuniyoshi)

死闘!Og mailinglist

Embed Size (px)

Citation preview

死闘!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: <[email protected]>

● 引用のゴミの削除○ 行頭に>がある行は削除

● メール送受信は推奨設定の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 forwardsall 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-

mimedecodeOR

● 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 Videoshttps://www.ostraining.com/courses/categories/drupal/この中”Organic Groups Version 2”が参考になった

34

END

35