Initial commit
This commit is contained in:
@@ -0,0 +1,76 @@
|
||||
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
|
||||
|
||||
|
||||
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'
|
||||
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))
|
||||
|
||||
# es kann sein, dass die Mail-Adresse erst später ins System kam
|
||||
path_to_file = f'payment_slips\\mail\\{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_([89,149,132,102,106])).all()
|
||||
|
||||
for member in members:
|
||||
send_mail(member=member)
|
||||
Reference in New Issue
Block a user