feat: add SMTP server and mail sender scripts
Implement an SMTP server using aiosmtpd and a mail sender script. The server handles incoming messages and prints their content, while the mail sender constructs and sends an email message. These changes enable local email testing for the CNP assignment, improving development efficiency.
This commit is contained in:
parent
c318712180
commit
644926a361
2 changed files with 47 additions and 0 deletions
14
CNP/Wireshark/SMTP/mail-sender.py
Normal file
14
CNP/Wireshark/SMTP/mail-sender.py
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
import smtplib
|
||||||
|
from email.message import EmailMessage
|
||||||
|
|
||||||
|
# the email message
|
||||||
|
msg = EmailMessage()
|
||||||
|
msg['Subject'] = 'CNP Assignment Email'
|
||||||
|
msg['From'] = 'aadit@example.com'
|
||||||
|
msg['To'] = 'shreyas@example.com' # used example.com just to not have a DNS error.
|
||||||
|
msg.set_content('Hello World. This is a message that is to be captured for the CNP FISAC II.')
|
||||||
|
|
||||||
|
#SMTP server running on localhost on port 25
|
||||||
|
with smtplib.SMTP('127.0.0.1', 25) as server:
|
||||||
|
server.set_debuglevel(1) # debug output to see the SMTP conversation (for dev log)
|
||||||
|
server.send_message(msg)
|
33
CNP/Wireshark/SMTP/smtp-server.py
Normal file
33
CNP/Wireshark/SMTP/smtp-server.py
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
import asyncio
|
||||||
|
import uvloop
|
||||||
|
from aiosmtpd.controller import Controller
|
||||||
|
|
||||||
|
# handler that just prints the message content
|
||||||
|
class PrintHandler:
|
||||||
|
async def handle_DATA(self, server, session, envelope):
|
||||||
|
print("Message from:", envelope.mail_from)
|
||||||
|
print("Recipients:", envelope.rcpt_tos)
|
||||||
|
print("Message data:")
|
||||||
|
print(envelope.content.decode('utf8', errors='replace'))
|
||||||
|
print("End of message")
|
||||||
|
# Respond with a success code
|
||||||
|
return '250 Message accepted for delivery'
|
||||||
|
|
||||||
|
# uvloop for better performance
|
||||||
|
asyncio.set_event_loop_policy(uvloop.EventLoopPolicy())
|
||||||
|
|
||||||
|
def run_server():
|
||||||
|
# SMTP server controller, binding to localhost on port 25
|
||||||
|
controller = Controller(PrintHandler(), hostname='127.0.0.1', port=25)
|
||||||
|
controller.start()
|
||||||
|
print("SMTP server running on port 25. Press Ctrl+C to stop.")
|
||||||
|
try:
|
||||||
|
# Run forever
|
||||||
|
asyncio.get_event_loop().run_forever()
|
||||||
|
except KeyboardInterrupt:
|
||||||
|
pass
|
||||||
|
finally:
|
||||||
|
controller.stop()
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
run_server()
|
Loading…
Add table
Reference in a new issue