Sending long emails in Python
How to send mail using SMTPlib and Python with many line bodies
If you are sending long emails using Python it is best to use MIMEText
when building your message. Here is an example:
First setup your libraries
import smtplib, ssl
import os
# get an api key at https://app.mailslurp.com/sign-up
import mailslurp_client
from smtplib import SMTP
from mailslurp_client import CreateInboxDto
api_key = os.environ.get('API_KEY')
assert api_key is not None
# create a mailslurp configuration
configuration = mailslurp_client.Configuration()
configuration.api_key['x-api-key'] = api_key
context = ssl.create_default_context()
Code example
from email.mime.text import MIMEText
with mailslurp_client.ApiClient(configuration) as api_client:
inbox_controller = mailslurp_client.InboxControllerApi(api_client)
inbox1 = inbox_controller.create_inbox_with_options(CreateInboxDto(inbox_type="SMTP_INBOX"))
inbox2 = inbox_controller.create_inbox_with_options(CreateInboxDto(inbox_type="SMTP_INBOX"))
smtp_access = inbox_controller.get_imap_smtp_access(inbox_id=inbox1.id)
# create long message
text = ""
for i in range(1, 42):
text += "This is line {}\n".format(i)
context = ssl.create_default_context()
try:
server = smtplib.SMTP(smtp_access.secure_smtp_server_host, smtp_access.secure_smtp_server_port)
server.ehlo()
server.starttls(context=context)
server.ehlo("test_client")
server.login(smtp_access.smtp_username, smtp_access.smtp_password)
# recipients
subject = "A message with a 41-line body"
from_address = inbox1.email_address
to_address = inbox2.email_address
# send message
message = MIMEText(text)
# Set the email subject and 'From' and 'To' headers
message["Subject"] = subject
message["From"] = from_address
message["To"] = to_address
server.sendmail(from_address, to_address, message.as_string())
# now fetch email from inbox2
wait_for_controller = mailslurp_client.WaitForControllerApi(api_client)
email = wait_for_controller.wait_for_latest_email(inbox_id=inbox2.id)
assert email.subject == subject
# assert sent all lines
assert "This is line 41" in email.body
finally:
server.quit()