The whole thing looks something like this :
def send_email(recipient, subject, html_content):
try:
# Replace image URLs in the HTML template so that they point to the content IDs
html_content = html_content.replace('src=“logo.png”', 'src=“cid:logo_img” alt=“company logo”')
html_content = html_content.replace('src=“banner.png”', 'src=“cid:banner_img” alt=“Company banner”')
# Create the outer container as “related” to enable inline images
message = MIMEMultipart(“related”)
message[“From”] = f “Comdirect <{FROM_EMAIL}>”
message[“To”] = recipient
message[“Subject”] = subject
# Create a multipart/alternative container for the plain text and HTML versions
alternative_part = MIMEMultipart(“alternative”)
# Create the plain text content (should reflect the essential content if possible)
plain_text = (
“Dear '\n\n”
“We ask for your understanding and thank you for your help in making our online offer as secure as possible.\n\n”
“With kind regards,\n”
“Thomas Schaufler\n”
)
# First add the plain text and then the HTML part (the HTML part is displayed in HTML-capable clients)
alternative_part.attach(MIMEText(plain_text, “plain”))
alternative_part.attach(MIMEText(html_content, “html”))
# Attach the alternative part to the main container
message.attach(alternative_part)
# Load the inline images (logo.png and banner.png) from the BASE_DIR and attach them as an attachment
logo_path = os.path.join(BASE_DIR, “logo.png”)
banner_path = os.path.join(BASE_DIR, “banner.png”)
# Embed logo
with open(logo_path, “rb”) as f:
logo_data = f.read()
logo_img = MIMEImage(logo_data)
logo_img.add_header(“Content-ID”, “<logo_img>”)
logo_img.add_header(“Content-Disposition”, “inline”, filename=“logo.png”)
message.attach(logo_img)
# Embed banner
with open(banner_path, “rb”) as f:
banner_data = f.read()
banner_img = MIMEImage(banner_data)
banner_img.add_header(“Content-ID”, “<banner_img>”)
banner_img.add_header(“Content-Disposition”, “inline”, filename=“banner.png”)
message.attach(banner_img)
# Establish the connection to the SMTP server, start TLS, login and send the e-mail
with smtplib.SMTP(SMTP_SERVER, SMTP_PORT) as server:
server.starttls()
server.login(SMTP_USER, SMTP_PASS)
server.sendmail(SMTP_USER, recipient, message.as_string())
print(f “Email successfully sent to {recipient}.”)
except Exception as e:
print(f “Error sending to {recipient}: {e}”)
- how can i include a plain text in my send mail logic so that i can send my mail in html and plain text at the same time via mime?
i have tried it now with several approaches but unfortunately when i receive the message i see that only the html part is loaded and i have 0% text in the email at mail-tester.com