extract credentials to config file
This commit is contained in:
parent
93288946cd
commit
c2bcda59b6
15
README.md
15
README.md
@ -1,2 +1,15 @@
|
||||
# etho2020_registration
|
||||
# Etho2020 email client listening for registration emails
|
||||
|
||||
* checks every 120s for new messages on a given email address, parses the information and sends and confirmation email to the participant and a copy to the conference office.
|
||||
|
||||
## Configuration
|
||||
|
||||
The root folder contains a ```credentials_template.py``` file
|
||||
containing dummy credentials. Fill in the valid information and rename
|
||||
file to ```credentials.py```. The email client expects to find this
|
||||
file, otherwise it will not work.
|
||||
|
||||
**Beware** the valid ```credentials.py``` file must not be committed to
|
||||
the version controll system and be read-only for all exept the user
|
||||
running the client.
|
||||
|
||||
|
13
credentials_template.py
Normal file
13
credentials_template.py
Normal file
@ -0,0 +1,13 @@
|
||||
EMAIL_ACCOUNT = 'yourlogin'
|
||||
EMAIL_FOLDER = 'INBOX'
|
||||
EMAIL_ADDRESS = 'the email address that needs to be checked'
|
||||
EMAIL_PSWD = 'your_password for email account'
|
||||
EMAIL_REPLY = 'email address of the conference office'
|
||||
SMTP_SERVER = 'outgoing smtp server address'
|
||||
IMAP_SERVER = 'server address for incoming mails'
|
||||
|
||||
SUBJECT_PATTERN = "etho2020"
|
||||
|
||||
CHECK_INTERVAL = 120 # check every 120s for new mails
|
||||
LOGFILE_NAME = 'etho_registration.log'
|
||||
LOG_STATUS_INTERVAL = 60 # write status message every 60 checks (2h)
|
@ -13,13 +13,15 @@ import datetime as dt
|
||||
import time
|
||||
import glob
|
||||
|
||||
from credentials import *
|
||||
EMAIL_ACCOUNT = "bzigr02"
|
||||
EMAIL_FOLDER = "INBOX"
|
||||
EMAIL_ADDRESS = 'etho2020registration@biologie.uni-tuebingen.de'
|
||||
EMAIL_REPLY = 'etho2020@biologie.uni-tuebingen.de'
|
||||
SMTP_SERVER = 'smtpserv.uni-tuebingen.de'
|
||||
IMAP_SERVER = 'mailserv.uni-tuebingen.de'
|
||||
EMAIL_PSWD = "r.8-*0Fc"
|
||||
EMAIL_PSWD = "4npBaMv9"
|
||||
|
||||
|
||||
PARTICIPANTS_FOLDER = 'participants'
|
||||
|
||||
@ -194,7 +196,7 @@ class Participation(object):
|
||||
values = [self._first_name, self._last_name, self._email, self._phone, self._institution,
|
||||
self._address_street, "%s %s" % (self._address_zip, self._address_city),
|
||||
self.registration_date.isoformat(), self._role, str(self.amount_due), str(self.farewell_event),
|
||||
str(self.gwinner_award), str(self.labtour), str(self._icebreaker), str(self._food_vegi), str(self._food_vegan),
|
||||
str(self.gwinner_award), str(self.labtour), str(self.icebreaker), str(self._food_vegi), str(self._food_vegan),
|
||||
str(self._food_gluten), str(self._food_normal)]
|
||||
|
||||
with io.open(filename, mode="w", encoding="UTF8") as fd:
|
||||
@ -235,16 +237,15 @@ def process_mailbox(M):
|
||||
Do something with emails messages in the folder.
|
||||
For the sake of this example, print some headers.
|
||||
"""
|
||||
|
||||
rv, data = M.search(None, "UNSEEN")
|
||||
if rv != 'OK':
|
||||
print("No messages found!")
|
||||
print("No messages found!", file=log_file)
|
||||
return
|
||||
|
||||
for num in data[0].split():
|
||||
rv, data = M.fetch(num, '(RFC822)')
|
||||
if rv != 'OK':
|
||||
print("ERROR getting message", num)
|
||||
print("ERROR getting message", num, file=log_file)
|
||||
return
|
||||
|
||||
msg = email.message_from_bytes(data[0][1])
|
||||
@ -264,17 +265,17 @@ def process_mailbox(M):
|
||||
def process_message(M, msg_index):
|
||||
rv, data = M.fetch(msg_index.encode('ascii'), '(RFC822)')
|
||||
if rv != 'OK':
|
||||
print("ERROR getting message", rv)
|
||||
print("ERROR getting message", rv, file=log_file)
|
||||
return
|
||||
msg = email.message_from_bytes(data[0][1])
|
||||
return Participation(msg)
|
||||
|
||||
|
||||
def process_registrations(M):
|
||||
rv, msgs = M.search(None, "SUBJECT", "etho2020", "UNSEEN")
|
||||
rv, msgs = M.search(None, "SUBJECT", SUBJECT_PATTERN, "UNSEEN")
|
||||
participations = []
|
||||
if rv != "OK":
|
||||
print("ERROR searching messages", rv)
|
||||
print("ERROR searching messages", rv, file=log_file)
|
||||
return participations
|
||||
|
||||
msgs = msgs[0].decode('ascii').split()
|
||||
@ -334,16 +335,17 @@ def check_for_mails():
|
||||
try:
|
||||
rv, data = M.login(EMAIL_ACCOUNT, EMAIL_PSWD)
|
||||
except imaplib.IMAP4.error:
|
||||
print("LOGIN FAILED!!! ")
|
||||
sys.exit(1)
|
||||
print("LOGIN FAILED!!! ", file=log_file)
|
||||
return
|
||||
# sys.exit(1)
|
||||
# rv, mailboxes = M.list()
|
||||
# if rv == 'OK':
|
||||
# print("Mailboxes:")
|
||||
# print(mailboxes)
|
||||
rv, data = M.select(EMAIL_FOLDER)
|
||||
if rv != 'OK':
|
||||
print("ERROR: Unable to open mailbox folder ", rv)
|
||||
|
||||
print("ERROR: Unable to open mailbox folder ", rv, file=log_file)
|
||||
return
|
||||
new_participations = process_registrations(M)
|
||||
for p in new_participations:
|
||||
print("%s\tNew registration by %s" % (dt.datetime.now().isoformat(), p.name), file=log_file)
|
||||
@ -354,12 +356,12 @@ def check_for_mails():
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
with open('etho_registration.log', 'a', buffering=1) as log_file:
|
||||
with open(LOGFILE_NAME, 'a', buffering=1) as log_file:
|
||||
count = 0
|
||||
while True:
|
||||
check_for_mails()
|
||||
time.sleep(120)
|
||||
time.sleep(CHECK_INTERVAL)
|
||||
count +=1
|
||||
if count % 60 == 0:
|
||||
if count % LOG_STATUS_INTERVAL == 0:
|
||||
print("%s\t Still awake and waiting for registrations!" % (dt.datetime.now().isoformat()), file=log_file)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user