働き方改革関連法が施行されて以降、私が勤めている会社でも出退勤管理をするようになり、当初はみんなオフィスに出勤していたので、入居ビルの入退室管理システムで十分でした。そこにコロナが直撃し、リモートワークが多くなり、自宅から働いている人は出勤表システムに直接入力が必要になり、これが案外面倒!ということで、自動化したいという声が上がっています。
案としては、
①出勤:Outlookから最初に送信したメール時刻
②退勤:Outlookから最後に送信したメール時刻
をまずは、第一段階として取得したいと考えています。
が、私Pythonまだ初心者なので、どなたかお分かりになる方教えてください!
Power Automateを使った方法も大歓迎です。
Jetsetter
2021.04.24 09:30:40
(2021.05.08 15:08:54 更新)
379
こんにちは、アンドノート公式アカウントです。アンドノートのご利用ありがとうございます。
Pythonを利用する場合、次のようなコードで本日最初に送信したメールと最後に送信したメールの時刻を取得することができます。
こちらは、メールサービスとしてOutlook 365を利用している場合の例になりますが、例えばGmailの場合はimap_hostをimap.gmail.comにすれば利用が可能だと思います。
usernameにはメールアドレスを、passwordにはパスワードを設定してください。
また、送信済みのメールを含むメールボックス名(この例では「送信済みアイテム」)も利用環境によって違うと思いますので、適宜mailboxを変更してみてください。
import imaplib
import email.utils
import time
import base64
# 参考:https://stackoverflow.com/questions/12776679/imap-folder-path-encoding-imap-utf-7-for-python
def utf7_encode(s):
""""Encode a string into RFC2060 aka IMAP UTF7"""
s = s.replace('&', '&-')
unipart = out = ''
for c in s:
if 0x20 <= ord(c) <= 0x7f:
if unipart != '':
out += '&' + base64.b64encode(unipart.encode('utf-16-be')).decode('ascii').rstrip('=') + '-'
unipart = ''
out += c
else:
unipart += c
if unipart != '':
out += '&' + base64.b64encode(unipart.encode('utf-16-be')).decode('ascii').rstrip('=') + '-'
return out
# 接続情報
imap_host = 'outlook.office365.com'
username = 'username@example.com'
password = 'xxxxxxxx'
mailbox = '送信済みアイテム'
# メールサーバーに接続
imap = imaplib.IMAP4_SSL(imap_host)
imap.login(username, password)
# 受信ボックスを選択
imap.select(utf7_encode(mailbox))
# 今日送信したメールを取得
typ, list = imap.search(None, '(ON {0})'.format(time.strftime('%d-%b-%Y')))
# 送信時刻の一覧を取得
sent_times = []
for num in list[0].split():
typ, data = imap.fetch(num, '(RFC822)')
raw_email = data[0][1]
message = email.message_from_string(raw_email.decode('utf-8'))
date = email.utils.parsedate(message.get('Date'))
sent_times.append('{:02d}時{:02d}分{:02d}秒'.format(date[3], date[4], date[5]))
# 最初と最後の送信時刻を出力
print(sent_times[0])
print(sent_times[len(sent_times) - 1])
# メールサーバーへの接続を切断
imap.close()
imap.logout()
このスクリプトを実行すると、その日の最初と最後のメールの送信時間が
09時10分50秒
15時15分25秒
のような形で出力されると思います。
Andnote公式
2021.05.08 16:41:28
(2021.05.08 16:58:50 更新)
コメントするには ログイン していただく必要があります。