Compare commits

...

2 Commits

Author SHA1 Message Date
Adrien Bourmault 3589ab01cd
fix mime config 2024-09-16 19:13:09 +02:00
Adrien Bourmault 02c155cbe5
fix headers content type 2024-09-16 19:06:19 +02:00
9 changed files with 27 additions and 30 deletions

View File

@ -2,5 +2,4 @@ From: =?UTF-8?Q?Secr=c3=a9taire_de_Libre_en_Communs?= <secretaire@a-lec.org>
To: <COURRIEL_INSCRIPTION> To: <COURRIEL_INSCRIPTION>
Bcc: <secretaire@a-lec.org>, <tresorier@a-lec.org> Bcc: <secretaire@a-lec.org>, <tresorier@a-lec.org>
Subject: =?UTF-8?Q?=5bSecr=c3=a9tariat=5d_Confirmation de votre adh=c3=a9sion?= Subject: =?UTF-8?Q?=5bSecr=c3=a9tariat=5d_Confirmation de votre adh=c3=a9sion?=
Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Content-Transfer-Encoding: quoted-printable

View File

@ -3,5 +3,4 @@ From: =?UTF-8?Q?Tr=c3=a9sorier_de_Libre_en_Communs?= <tresorier@a-lec.org>
To: <COURRIEL-COTISANT> To: <COURRIEL-COTISANT>
Bcc: <tresorier@a-lec.org> Bcc: <tresorier@a-lec.org>
Subject: =?UTF-8?Q?Modalit=c3=a9s_de_r=c3=a8glement_de_votre_cotisation_ANNEE_CIVILE?= Subject: =?UTF-8?Q?Modalit=c3=a9s_de_r=c3=a8glement_de_votre_cotisation_ANNEE_CIVILE?=
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable Content-Transfer-Encoding: quoted-printable

View File

@ -2,5 +2,4 @@ From: tresorier@a-lec.org
To: tresorier@a-lec.org To: tresorier@a-lec.org
Subject: Suivi automatique des cotisations Subject: Suivi automatique des cotisations
MIME-Version: 1.0 MIME-Version: 1.0
Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Content-Transfer-Encoding: quoted-printable

View File

@ -8,5 +8,4 @@ Content-Type: multipart/mixed; boundary="------------3yxkFgv0AINs5nd0i6BJrWaV"
This is a multi-part message in MIME format. This is a multi-part message in MIME format.
--------------3yxkFgv0AINs5nd0i6BJrWaV --------------3yxkFgv0AINs5nd0i6BJrWaV
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable Content-Transfer-Encoding: quoted-printable

View File

@ -115,8 +115,10 @@ def setup_workdir():
def sendmail_with_attachment(headers, data, attachment_path=None, filename=None): def sendmail_with_attachment(headers, data, attachment_path=None, filename=None):
# Parse headers # Create a multipart message
msg = MIMEMultipart() msg = MIMEMultipart()
# Add the headers without manually setting Content-Type or MIME-Version
for header in headers.split("\n"): for header in headers.split("\n"):
if ": " in header: if ": " in header:
key, value = header.split(": ", 1) key, value = header.split(": ", 1)
@ -128,8 +130,8 @@ def sendmail_with_attachment(headers, data, attachment_path=None, filename=None)
# Add the attachment only if attachment_path is provided # Add the attachment only if attachment_path is provided
if attachment_path and filename: if attachment_path and filename:
attachment = MIMEBase('application', 'octet-stream')
with open(attachment_path, "rb") as attach_file: with open(attachment_path, "rb") as attach_file:
attachment = MIMEBase('application', 'octet-stream')
attachment.set_payload(attach_file.read()) attachment.set_payload(attach_file.read())
encoders.encode_base64(attachment) encoders.encode_base64(attachment)
attachment.add_header('Content-Disposition', f'attachment; filename={filename}') attachment.add_header('Content-Disposition', f'attachment; filename={filename}')

View File

@ -3,5 +3,4 @@ From: =?UTF-8?Q?Tr=c3=a9sorier_de_Libre_en_Communs?= <tresorier@a-lec.org>
To: <COURRIEL_DONNEUR> To: <COURRIEL_DONNEUR>
Bcc: <tresorier@a-lec.org> Bcc: <tresorier@a-lec.org>
Subject: =?UTF-8?Q?Libre_en_Communs_:_modalit=c3=a9s_de_r=c3=a8glement_de_votre_don?= Subject: =?UTF-8?Q?Libre_en_Communs_:_modalit=c3=a9s_de_r=c3=a8glement_de_votre_don?=
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable Content-Transfer-Encoding: quoted-printable

View File

@ -2,5 +2,4 @@ From: tresorier@a-lec.org
To: tresorier@a-lec.org To: tresorier@a-lec.org
Subject: Suivi automatique des dons Subject: Suivi automatique des dons
MIME-Version: 1.0 MIME-Version: 1.0
Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Content-Transfer-Encoding: quoted-printable

View File

@ -8,5 +8,4 @@ Content-Type: multipart/mixed; boundary="------------3yxkFgv0AINs5nd0i6BJrWaV"
This is a multi-part message in MIME format. This is a multi-part message in MIME format.
--------------3yxkFgv0AINs5nd0i6BJrWaV --------------3yxkFgv0AINs5nd0i6BJrWaV
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable Content-Transfer-Encoding: quoted-printable

View File

@ -78,36 +78,38 @@ def setup_workdir():
os.makedirs(path) os.makedirs(path)
# Send email with attachment via SMTP, password fetched from file # Send email with attachment via SMTP, password fetched from file
def sendmail_with_attachment(headers, body, attachment_path, attachment_filename): def sendmail_with_attachment(headers, data, attachment_path=None, filename=None):
# Create a multipart message
msg = MIMEMultipart() msg = MIMEMultipart()
# Add headers # Add the headers without manually setting Content-Type or MIME-Version
for header in headers.split("\n"): for header in headers.split("\n"):
if ": " in header: if ": " in header and "Content-Type" not in header and "Mime-Version" not in header:
key, value = header.split(": ", 1) key, value = header.split(": ", 1)
msg[key] = value.strip() msg[key] = value.strip()
# Email body # Add the email body
msg.attach(MIMEText(body, 'plain', 'utf-8')) body = MIMEText(data, 'plain', 'utf-8')
msg.attach(body)
# Attach PDF file # Add the attachment only if attachment_path is provided
if attachment_path: if attachment_path and filename:
with open(attachment_path, "rb") as attachment: with open(attachment_path, "rb") as attach_file:
part = MIMEBase('application', 'octet-stream') attachment = MIMEBase('application', 'octet-stream')
part.set_payload(attachment.read()) attachment.set_payload(attach_file.read())
encoders.encode_base64(part) encoders.encode_base64(attachment)
part.add_header('Content-Disposition', f'attachment; filename={attachment_filename}') attachment.add_header('Content-Disposition', f'attachment; filename={filename}')
msg.attach(part) msg.attach(attachment)
# Send email # Send the email
try: try:
with smtplib.SMTP(SMTP_SERVER, SMTP_PORT) as server: with smtplib.SMTP(SMTP_SERVER, SMTP_PORT) as server:
server.starttls() # Secure the connection server.starttls() # Start TLS encryption
server.login(SMTP_USER, smtp_get_secret()) # Fetch SMTP password from file server.login(SMTP_USER, smtp_get_secret())
server.sendmail(SMTP_USER, msg['To'], msg.as_string()) server.sendmail(SMTP_USER, msg['To'], msg.as_string())
print(f"Email sent to {msg['To']}") print("Email sent successfully")
except Exception as e: except Exception as e:
print(f"Error sending email: {e}") print(f"Failed to send email: {e}")
# Notify unpaid donors # Notify unpaid donors
def notify_unpaid(record): def notify_unpaid(record):