なんかイチからPHP書くのもしんどいし、ちょうどいいラッパーがないかと探したらWordPressが居たので、これを利用してSlackからメールを送信する。
肝は、WordPressの安全なPOSTゲット、およびwp_mail()
関数など。メールヘッダー部分などは、コピペです(コピペ元が探せなかったのですが、ありがとうございます)
tpl_mailfromslack.php
<?php
/*
Template Name: mail from slack
これは、WordPressテーマ上で動作させることを前提としていて、
専用に1こ固定ページをつくり、このテンプレートを読み込ませ、
その固定ページのURIでslack apiと連携させ動作させる
あと、tokenは slack api outbound webhooksで設定したのをいれる
送信先アドレスで、headersにいれてあるfromのアドレスを許可するように
↑Google groupsなど
*/
if( isset($_POST['token']) && $_POST['token'] == '####_API_TOKEN_####' ) {
// mailfromslackならばこっち
$text = $_POST['text'];
$text_arr = preg_split('/[\s]+/', $text, 4);
$sendUser = htmlspecialchars($_POST['user_name']);
$fromCh = htmlspecialchars($_POST['channel_name']);
$addTo = '送信先メールアドレス';
$setSubject = '[slack #'.$fromCh.'] '.$text_arr[1];
$setText = $sendUser.'が slack #'.$fromCh." から送信 \n\n".$text_arr[2]."\n\n"."-- \n".'slackより自動送信';
$headers[] = 'From: '.$sendUser.' <tpl_mailfromslack.php@example.com>';
$headers[] = 'Cc: あればなんかメールアドレス';
$return = wp_mail( $addTo, $setSubject, $setText, $headers );
if($return){
echo json_encode(array('text' => '送信実行!ちゃんと送れてるか確認してね'));
} else {
echo json_encode(array('text' => '送信失敗!'."\n".'この失敗は wp_mail() 関数による判断です。'));
}
} else {
// mailfromslackじゃなければ404
wp_safe_redirect( home_url() );
exit;
}
- これを有効化されたWordPressテーマディレクトリに
tpl_mailfromslack.php
として保存(ファイル名はなんでもいい) - 固定ページを作成、適当にわかりづらいslug名をつけて、「テンプレート」を「mail from slack」にする
- 公開する
- slackのintegrateから「OutBound WebHooks」で、このテンプレートが指定された固定ページのURLを指定
- 再度ファイル編集する、
####_API_TOKEN_####
の部分に、slackから指定されたAPIキーを入れる - APIキーが書かれたtpl_mailfromslack.phpに更新する
- あとは適当に実験するべし
順序は前後してもいいんだけど、要はAPIキーを入れてねってこと。
wp_mail()
からの戻り値をjson_encode
してるのは、slackに結果を返すため。
slackからOutbound webhooksによるPOST時に、指定URLを叩き、その結果を取得します。そのとき決められたjsonを出力できると、その内容をslackのチャネルにエコーしてくれます。
wp_safe_redirect( home_url() );
は、POSTじゃなく普通にその固定ページを開いた時や、tokenが無い・間違ってる時に、安全にトップページへリダイレクトしてくれます。
WordPressは簡単なフレームワークとしての利用価値も、結構ありますよ(強引すぎるが)