mirror of
https://github.com/mail-in-a-box/mailinabox.git
synced 2026-03-27 19:37:22 +01:00
rename test modules to not conflict with global package names (e.g. dns)
This commit is contained in:
78
tests/test_mail.py
Executable file
78
tests/test_mail.py
Executable file
@@ -0,0 +1,78 @@
|
||||
#!/usr/bin/python3
|
||||
# Tests sending and receiving mail by sending a test message to yourself.
|
||||
|
||||
import sys, imaplib, smtplib, uuid, time
|
||||
|
||||
if len(sys.argv) < 3:
|
||||
print("Usage: tests/mail.py hostname emailaddress password")
|
||||
sys.exit(1)
|
||||
|
||||
host, emailaddress, pw = sys.argv[1:4]
|
||||
|
||||
# Attempt to login with IMAP. Our setup uses email addresses
|
||||
# as IMAP/SMTP usernames.
|
||||
M = imaplib.IMAP4_SSL(host)
|
||||
M.login(emailaddress, pw)
|
||||
M.select()
|
||||
print("IMAP login is OK.")
|
||||
|
||||
# Attempt to send a mail to ourself.
|
||||
mailsubject = "Mail-in-a-Box Automated Test Message " + uuid.uuid4().hex
|
||||
emailto = emailaddress
|
||||
msg = """From: {emailaddress}
|
||||
To: {emailto}
|
||||
Subject: {subject}
|
||||
|
||||
This is a test message. It should be automatically deleted by the test script.""".format(
|
||||
emailaddress=emailaddress,
|
||||
emailto=emailto,
|
||||
subject=mailsubject,
|
||||
)
|
||||
server = smtplib.SMTP(host, 587)
|
||||
#server.set_debuglevel(1)
|
||||
server.starttls()
|
||||
server.login(emailaddress, pw)
|
||||
server.sendmail(emailaddress, [emailto], msg)
|
||||
server.quit()
|
||||
print("SMTP submission is OK.")
|
||||
|
||||
while True:
|
||||
# Wait so the message can propagate to the inbox.
|
||||
time.sleep(10)
|
||||
|
||||
# Read the subject lines of all of the emails in the inbox
|
||||
# to find our test message, and then delete it.
|
||||
found = False
|
||||
typ, data = M.search(None, 'ALL')
|
||||
for num in data[0].split():
|
||||
typ, data = M.fetch(num, '(BODY[HEADER.FIELDS (SUBJECT)])')
|
||||
imapsubjectline = data[0][1].strip().decode("utf8")
|
||||
if imapsubjectline == "Subject: " + mailsubject:
|
||||
# We found our test message.
|
||||
found = True
|
||||
|
||||
# To test DKIM, download the whole mssage body. Unfortunately,
|
||||
# pydkim doesn't actually work.
|
||||
# You must 'sudo apt-get install python3-dkim python3-dnspython' first.
|
||||
#typ, msgdata = M.fetch(num, '(RFC822)')
|
||||
#msg = msgdata[0][1]
|
||||
#if dkim.verify(msg):
|
||||
# print("DKIM signature on the test message is OK (verified).")
|
||||
#else:
|
||||
# print("DKIM signature on the test message failed verification.")
|
||||
|
||||
# Delete the test message.
|
||||
M.store(num, '+FLAGS', '\\Deleted')
|
||||
M.expunge()
|
||||
|
||||
break
|
||||
|
||||
if found:
|
||||
break
|
||||
|
||||
print("Test message not present in the inbox yet...")
|
||||
|
||||
M.close()
|
||||
M.logout()
|
||||
|
||||
print("Test message sent & received successfully.")
|
||||
Reference in New Issue
Block a user