80 lines
3.1 KiB
Python
80 lines
3.1 KiB
Python
from sqlalchemy import extract
|
|
from database import engine, SessionLocal
|
|
import models
|
|
import logging, sys
|
|
import smtplib
|
|
from email.mime.multipart import MIMEMultipart
|
|
from email.mime.text import MIMEText
|
|
from email.mime.application import MIMEApplication
|
|
from os.path import exists
|
|
import datetime
|
|
from create_payment_slip import create_payment_slip
|
|
import os
|
|
|
|
|
|
logging.basicConfig(stream=sys.stderr, level=logging.DEBUG)
|
|
|
|
def payment_slip_delivered(member: models.Members, year: int):
|
|
return db.query(models.Deliveries.delivery_date)\
|
|
.filter(models.Deliveries.member_id == member.id, extract('year', models.Deliveries.delivery_date) == year)\
|
|
.count()
|
|
|
|
def send_mail(member: models.Members):
|
|
delivered = payment_slip_delivered(member, 2024)
|
|
if delivered:
|
|
logging.debug(f'Member: {member.member_surname} already mailed or delivered!')
|
|
return
|
|
|
|
smtp_server = 'mail.gmx.com'
|
|
smtp_port = 587
|
|
smtp_username = 'zisco@gmx.at'
|
|
#TODO Secure
|
|
smtp_password = '57spunk07'
|
|
|
|
from_email = 'sv.stthomas@gmx.at'
|
|
to_email = member.member_email
|
|
subject = 'Mitgliedsbeitrag 2024'
|
|
body = f'Liebes Mitglied,\n\nDein Zahlschein für 2024 liegt bei.\nDu kannst gerne mittels beiliegendem, aufgedrucktem QR-Code überweisen.\nDanke sagt Dein Team vom Sportverein!'
|
|
|
|
msg = MIMEMultipart()
|
|
msg['From'] = from_email
|
|
msg['To'] = to_email
|
|
msg['Subject'] = subject
|
|
msg.attach(MIMEText(body))
|
|
|
|
path_to_file = os.path.join(os.getenv('APPDATA'), "sust", "payment_slips","mail",f"{member.member_zip}_payment_slip_member{member.id}.pdf")
|
|
if not exists(path_to_file):
|
|
create_payment_slip(member=member)
|
|
|
|
with open(path_to_file, 'rb') as f:
|
|
attachment = MIMEApplication(f.read(), _subtype='pdf')
|
|
attachment.add_header('Content-Disposition', 'attachment', filename=f'{member.member_zip}_payment_slip_member{member.id}.pdf')
|
|
msg.attach(attachment)
|
|
|
|
with smtplib.SMTP(smtp_server, smtp_port) as smtp:
|
|
smtp.starttls()
|
|
smtp.login(smtp_username, smtp_password)
|
|
smtp.send_message(msg)
|
|
|
|
newDelivery = models.Deliveries(delivery_date = datetime.datetime.now(),
|
|
member_id = member.id,
|
|
delivered_by_id = 186,
|
|
delivery_year = datetime.date.today())
|
|
|
|
db.add(newDelivery)
|
|
db.commit()
|
|
|
|
logging.debug(f'Sent mail to {member.member_email}')
|
|
|
|
db = SessionLocal()
|
|
models.Base.metadata.create_all(bind=engine)
|
|
#members = db.query(models.Members).filter(models.Members.member_email != None, ~models.Members.id.in_([183,51,200,49])).all()
|
|
#members = db.query(models.Members).filter(models.Members.member_active == True).all()
|
|
#members = db.query(models.Members).filter(models.Members.id.in_([2,3,9,199]), models.Members.member_active == True, models.Members.member_printed == False).all()
|
|
members = db.query(models.Members).filter(models.Members.id.in_([8])).all()
|
|
|
|
for member in members:
|
|
if member.member_email:
|
|
send_mail(member=member)
|
|
else:
|
|
logging.debug(f'Member {member.member_surname} has no email associated!') |