スキップしてメイン コンテンツに移動

IMAPの外部接続が禁止されてメールの通知が受け取れない問題

IMAPの外部接続が禁止されてメールの通知が受け取れない問題

IMAP による外部からのメールサーバ接続が禁止され、代わりに desknet’s のメールクライアントを使うように運用ポリシーが変更されたが、お客さんからのメールやZACの承認依頼などに気がつかなくて困るという問題がある。
G-Suite を入れて GMail を使いたいが、直近では実現しそうにないのでなんとかする。
社内のPCからはメールサーバーへの IMAP接続が許可されているため、社内のPCを定期的に起動/シャットダウンさせ、営業時間内に届いたメールについて、Slack 経由で通知させる。

PC の自動起動/シャットダウン

PC の自動シャットダウン

メールフィルタや通知のスクリプトを用意する

# coding: utf-8
import imapy
import requests
from imapy.query_builder import Q
import json
import os
PASSWD = "xxxxxxxxx"
WEBHOOKURL = (
"https://hooks.slack.com/services/xxxxxxxxxx"
)
def archive(emails, to_box):
"""メールをフォルダに移動して既読にする"""
for email in emails:
email.move(to_box).mark(["Seen"])
email.mark("Seen")
def archive_sales(emails):
archive(emails, "INBOX.Archives.2018.Sales")
def archive_2018(emails):
archive(emails, "INBOX.Archives.2018")
def post_to_slack(message):
requests.post(
WEBHOOKURL,
data=json.dumps(
{
"text": message, # 投稿するテキスト
"channel": "@hogehoge",
"username": u"hogehoge", # 投稿のユーザー名
"icon_emoji": u":ghost:", # 投稿のプロフィール画像に入れる絵文字
"link_names": 1, # メンションを有効にする
}
),
)
UNSEEN_EMAIL_JSON = "unseen_emails.json"
def check_new_unread_mails(id_and_subject_dict):
""" 新着メールのうち、Slack通知していないものだけを新しく通知する """
# json.load して、比較。入力パラメータ側で、無いものがあれば、通知。
# ファイルを削除したのち、json.dump する
unread_email_num = len(id_and_subject_dict)
if os.path.exists(UNSEEN_EMAIL_JSON):
with open(UNSEEN_EMAIL_JSON, "r") as f:
last_unseen_email_dict = json.load(f)
else:
last_unseen_email_dict = {}
last_ids = set(last_unseen_email_dict.keys())
current_ids = set(id_and_subject_dict.keys())
diff_ids = last_ids ^ current_ids
new_ids = [i for i in diff_ids if i in current_ids]
if new_ids:
# slack
message = (
"unread email number is : {}\n".format(unread_email_num)
+ "new mail arrived. subjects are :"
+ ", \n".join([id_and_subject_dict[key] for key in new_ids])
)
post_to_slack(message)
if os.path.exists(UNSEEN_EMAIL_JSON):
os.remove(UNSEEN_EMAIL_JSON)
with open(UNSEEN_EMAIL_JSON, "w") as f:
json.dump(id_and_subject_dict, f)
box = imapy.connect(
host="mail.hogehoge.com",
username="hogehoge@hogehoge.com",
password=PASSWD,
port=143,
# ssl=True)
ssl=False,
)
# filter sales mails
q = Q()
query = q.header("Delivered-To", "sales@hogehoge.com")
sales_emails = box.folder("INBOX").emails(query)
archive_sales(sales_emails)
# archive ERP login notification
q = Q()
zac_emails = box.folder("INBOX").emails(q.sender("no-reply@jp.oro.com"))
zac_login_emails = [email for email in zac_emails if "ZACログインのお知らせ" in email["subject"]]
archive_2018(zac_login_emails)
# check unread mails
q = Q()
unseen_emails = box.folder("INBOX").emails(q.unseen())
unseen_email_dict = {email.uid: email["subject"] for email in unseen_emails}
check_new_unread_mails(unseen_email_dict)
box.logout()
view raw mailfilter.py hosted with ❤ by GitHub
python をインストールして、上記スクリプトを起動するバッチファイルを作成しておく。

スクリプトを定期実行する

  • 上記バッチファイルをタスクスケジューラーから実行する

コメント

このブログの人気の投稿

たべっ子動物をまじまじと食べてみたよ

たべっ子動物はギンビスの名作ですね。普段は動物の形なんてかまわずムシャムシャたべるんですけど、今日ふと見た形がなんだかよくわからん。書いてあるのも英語でわからんちんなので辞書で調べてみると、リスでした! 横からみるのか~! たべっこ動物を見ると、いつもジョジョの奇妙な冒険で敵役が食べていた事を思い出すなぁ~。そいつはラクダを最後に食べるんだ。

vim で "Shift + 3(#)" を押すと、カーソルが乗ってる単語で検索してくれる

この間、rhtml ファイルを編集していて、Ruby 部分のコードをコメントアウトしようと思い、入力モードにないまま "Shirt + 3(#)" を押すと、カーソルが乗っかっている単語がハイライトされるではありませんか! なんか検索してくれるみたいです。めっちゃ便利! vim のヘルプ |usr_03.txt| Moving around の、 ”SEARCHING FOR A WORD IN THE TEXT” に書いてありました。 SEARCHING FOR A WORD IN THE TEXT Suppose you see the word "TheLongFunctionName" in the text and you want to find the next occurrence of it. You could type "/TheLongFunctionName", but that's a lot of typing. And when you make a mistake Vim won't find it. There is an easier way: Position the cursor on the word and use the "*" command. Vim will grab the word under the cursor and use it as the search string. The "#" command does the same in the other direction. You can prepend a count: "3*" searches for the third occurrence of the word under the cursor. "*" と "#" は同じ機能で検索の方向が違うそうです。そして、 "3*" みたいな使い方も出来るとか。 奥がふかいですね~ vim って。 そしていつも分からないのが、編集画面からバッファ部分へコピペする方法です。できたら便...

三友フレッシュフーズというコーヒー屋さんのチラシ

三友フレッシュフーズ という、駒沢公園の西側にあるコーヒ屋さんでよくコーヒーを買います。スターバックスとかで買うよりも断然安いし、お店で焙煎しているようなので(カウンターの奥にごっつい釜がみえます)気持ち的に美味しいような気がしますね。 そのお店で配っている、コーヒーの美味しい入れ方、というチラシがあって、そこに出てくるキャラがかなりユルくてかわいいのです。なんかいつもそのチラシをもらってしまいます。 友達のyanchi が大学に一緒に通っていた頃によく、よくわからないネコの漫画をノートの端っこに書いていたのですが、それみたいだなぁ~。 全然関係ないですが、昨日、無くしたと思って勘違いしていたフレンチプレスできるマグカップが売っているところを探して渋谷をうろついていたら、AppleStore に人だかりができていました。近くにいってみると、見物人の一人のお姉さんが警備員のおじさんに「あれ、誰ですか」ときいていました。なんと、コーネリアスがライブをしていたのでした。東京はすごいや。