LoginSignup
10
8

More than 5 years have passed since last update.

WordPressを利用してslackからメールを送信する

Posted at

なんかイチから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;
} 
  1. これを有効化されたWordPressテーマディレクトリにtpl_mailfromslack.phpとして保存(ファイル名はなんでもいい)
  2. 固定ページを作成、適当にわかりづらいslug名をつけて、「テンプレート」を「mail from slack」にする
  3. 公開する
  4. slackのintegrateから「OutBound WebHooks」で、このテンプレートが指定された固定ページのURLを指定
  5. 再度ファイル編集する、####_API_TOKEN_#### の部分に、slackから指定されたAPIキーを入れる
  6. APIキーが書かれたtpl_mailfromslack.phpに更新する
  7. あとは適当に実験するべし

順序は前後してもいいんだけど、要はAPIキーを入れてねってこと。

wp_mail()からの戻り値をjson_encodeしてるのは、slackに結果を返すため。
slackからOutbound webhooksによるPOST時に、指定URLを叩き、その結果を取得します。そのとき決められたjsonを出力できると、その内容をslackのチャネルにエコーしてくれます。

wp_safe_redirect( home_url() );は、POSTじゃなく普通にその固定ページを開いた時や、tokenが無い・間違ってる時に、安全にトップページへリダイレクトしてくれます。

WordPressは簡単なフレームワークとしての利用価値も、結構ありますよ(強引すぎるが)

10
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
8