メールサーバの容量チェック
以前会社でさくらのメールサーバを運用していた時、1人で大量に容量を使いすぎないように、定期的にチェックして容量が大きい人は容量を空けてもらう依頼を出していた時がありました。
毎日目視でチェックするのはしんどかったので、スクレイピングでチェックするツールを作成し、該当者に自動でメール送信をするプログラムを作っていたので共有します。
使用している技術
Pythonを使用しているのですが、開発時期がちょっと前なのでバージョンは2系になります。
また、さくらのコントロールパネルの画面をスクレイピングしており、BeautifulSoupを使用しています。
スクレイピングは毎日cronで定期実行しており、該当者にはsmtplibを使用してメールを送信しています。
メールの送信周りの設定は今回は触れませんので各自でお願いします。
また、今回は例として、さくらのドメイン名はtest.sakura.ne.jpとし、送信するメールの宛先のドメインはtest.jpであるとします。
そしてメールの容量は1人6GBまで使用できることになっており、すでに5GBを超えている人に対してアラートメールを送るようにしています。
スクレイピングツールの中身
# -*- coding: utf-8 -*- import re import mechanize import BeautifulSoup import smtplib from email.mime.text import MIMEText # コントロールパネルの画面 url_user = 'https://secure.sakura.ad.jp/rscontrol/main/user' # ログイン画面 url_login = 'https://secure.sakura.ad.jp/rscontrol/' # コントロールパネルのアカウントを入力してください。 domain_name = 'test.sakura.ne.jp' password = 'pppppppppp' # 以下はコントロールパネルへのログイン処理 br = mechanize.Browser() br.open(url_login) br.select_form(name='login') br['domain'] = domain_name br['password'] = password br.submit() br.open(url_user) # 画面をスクレイピング bs = BeautifulSoup.BeautifulSoup(br.response().read()) viewbox = bs.findAll('table', { "class":"viewbox" }) all_tr = viewbox[1].findAll('tr') for tr in all_tr: td = tr.find('td', {"class":"alnum"}) if td is None: continue capacity = tr.findAll('td', {"class":"right"})[0].text if capacity.count('GB') == 0: continue capa_num = capacity.replace('GB','') if float(capa_num) < 5: continue mailaddress = user + '@test.jp' msg = MIMEText( "メールの容量がそろそろパンパンですよ。\n1人6GBまでって決まってるんだけど。\n早くサーバから削除してね。\n容量を超えたらメールが受信できなくなって困るのはあなたですよ。",'plain','utf-8') msg['Subject'] = '【警告】メールの容量がもういっぱい' msg['From'] = 'Alert@test.jp' msg['To'] = mailaddress msg['CC'] = 'testtest@test.jp' # この例ではtesttest@test.jpというメールアカウントから送るようになっていますが、各々の環境に合わせて設定してください。 s = smtplib.SMTP() s.connect() s.sendmail('testtest@test.jp', [mailaddress,'testtest2@test.jp'], msg.as_string()) s.close()
cronの設定
最後にcronを設定しましょう。
みんなが出社してくる朝9時にメールが流れるようにします。
※今回は/var/www/html/batch/にmail_check.pyというファイル名で置いてあるとします。
00 9 * * * python /var/www/html/batch/mail_check.py
独学プログラマー Python言語の基本から仕事のやり方まで
- 作者:コーリー・アルソフ
- 発売日: 2018/02/24
- メディア: 単行本
ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装
- 作者:斎藤 康毅
- 発売日: 2016/09/24
- メディア: 単行本(ソフトカバー)
ゲームを作りながら楽しく学べるPythonプログラミング (Future Coders(NextPublishing))
- 作者:田中 賢一郎
- 発売日: 2017/03/24
- メディア: Kindle版
- 作者:柴田 淳
- 発売日: 2016/12/22
- メディア: 単行本