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