We are ACORN!

プログラムやサーバーの設定など、技術的な記事を載せております。

PHP Server slack さくらのレンタルサーバー プログラミング

さくらのレンタルサーバーのメールをslackに通知する

投稿日:2019-01-28 更新日:

今までメールを自分で作ったスクリプトで携帯に転送していたんですが、キャリアメールをやめたのでslackにメッセージを投げることにしました。
前提として、プランがスタンダードである必要があります。
何せ、このブログがさくらのレンタルサーバー スタンダードプランで運用されています。
(それ以外のプランは出来るか分かりません。少なくともライトプランは出来ません)

slackチームを作る

まずはslackにチームを作らなければなりません。自分一人のチームでもいいです。
「slack 使い方」などとgoogleで検索するといいかもしれません。
また、通知するメールアドレスが「dummy@example.com」だとすると、slackのユーザー名も「dummy」に合わせてください。

それが出来たら、通知するbotを作ります。

botを作る

  1. チームにログインした状態で以下のリンクをクリックします。
    https://my.slack.com/services/new/bot
  2. そうするとユーザー名を決める画面になりますので、適当に決めます。
    ここでは「bot」にします。
    Add Bot integration」という画面をクリックすると、次の画面に行きます。
  3. API Tokenという欄が一番上にあると思いますので、そのキーをコピーしておきます。
    メモ帳か何かにコピーしておくといいですね。
  4. Save integration」を押して終了です。

通知用のプログラムを作る

わたしはPHPerなので、PHPで作ります。

まず、さくらのレンタルサーバーのpostfixは特殊な環境変数を付けてきます。
LOGNAMEFROMというものです。
LOGNAMEは受信者のメールアドレス、FROMは文字通り、送信元のメールアドレスです。

ソースはこんな感じになります。

#!/usr/local/bin/php
<?php
// 先ほどのAPI Tokenです。
CONST API_TOKEN = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';

$user   = getenv('LOGNAME');
$sender = getenv('FROM');
$slack = explode('@', $user)[0];

$text = urlencode($user . '宛てに' . $sender . 'さんからメールが届きました');
$url = "https://slack.com/api/chat.postMessage?token=".API_TOKEN.
        "&channel=@".$slack."&username=bot&text=".$text."&as_user=true";

file_get_contents($url);
exit;

slackに放り投げっぱなしで何のフォローもしてませんが、まあいいでしょう。

メール受信のトリガーを設定する

  1. さくらのレンタルサーバーにSSHでログインします。
    参照:さくらのサポート情報 SSHについて<
  2. 先ほど作ったファイルを、ホームディレクトリ直下に転送します。SFTPがいいかもしれませんね。
    ここでは、slack.phpという名前にしています。
    そして、chmod 700 slack.phpという風に権限を付けます。
  3. ホームディレクトリの直下にMailBoxというディレクトリがあります。
    その下に各ユーザーのメールボックスがあります。ここでは、「dummy」という名前のユーザーであるとします。
    そうすると/home/example/MailBox/dummy/.mailfilterというファイルがあると思います。
    (ない場合は、コントロールパネルからダミーのメールアドレスに転送する設定をするといいです)
    それを編集します。

    メールの転送が設定されている場合は、

    cc "!dummy@example.com"
    

    のようになっていると思います。

    これを、

    cc "|/home/example/slack.php"
    

    とします。

これで設定完了です。

テスト

テストでメールを送ってみてください。botからメッセージが届くはずです。

あとがき

最低限どのアカウントに誰からメールがあったのか分かるので、これが来たらメーラーを立ち上げて見ればいいことになります。メーラーで定期巡回しなくていいので、スマホの電池の持ちも良くなるんじゃないでしょうか。

最近は格安SIMなども流行っているので、キャリアメールを持っていない人も多くなっているんじゃないでしょうか。
一方でメールが届いたらすぐに通知してほしい、というニーズもあるはずです。
それを無料で叶えるのがslackへの通知だと言えるでしょう。

-PHP, Server, slack, さくらのレンタルサーバー, プログラミング


comment

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

関連記事

MarkDownDiagram

マークダウンで画面遷移図などのダイアグラムを作れるツールをブラウザベースで作ってくださった方がおられます。 大変重宝していて、業務で使いまくりです。 https://github.com/wakufa …

【PHP】DBライブラリ 「idiorm」

フレームワークを使うには簡単すぎる、かといってPDOを使ってガリガリ書くのは面倒。 そんな時に役立つライブラリが「idiorm」です。(なんて読むんでしょうか?) GitHubで公開しています。 ht …

【PHP】 全角記号のときmb_strwidthが1を返す

PHPで全角の判断に、mb_strwidthを使っていました。 mb_strwidth == (mb_strlen*2) だったら全角文字、みたいな。 そうしたら、「◎」を入れたらうまくいかないとクラ …

【PHP】 Macからの日本語名ファイルを正しく扱う

久しぶりに仕事ではまりました。 ファイルをアップロードして、その日本語名を利用するシステムなのですが、Macも含まれます。 それで、会社からMac miniを借りてダウンロード、アップロード実験をして …

qmail(with smtp auth) + vpopmail + ezmlm-idx + dovecot + qmailadminなサーバ構築

概要 「今時qmailかよ」っていう人もいるかもしれませんが、長年qmailサーバを組んで来て不都合を感じたことがないので、このまま定年までこれで行けるんじゃないかと思っています(笑) それで、Cen …