Как создать postfix-подобный сервер с помощью python smtpd

Что касается библиотеки python smtpd, я пытаюсь переопределить метод process_message, но когда я пытаюсь подключиться к нему с помощью клиента и отправить сообщение, скажем, на учетную запись gmail, он просто распечатывает сообщение на консоли, но я хочу, чтобы оно действительно отправлялось вывести сообщение, подобное постфиксу, на локальном компьютере. Как мне этого добиться?

Я гуглил smtpd, но не нашел много полезного сообщения

import smtpd
import asyncore

class CustomSMTPServer(smtpd.SMTPServer):

    def process_message(self, peer, mailfrom, rcpttos, data, **kwargs):
        print('Receiving message from:', peer)
        print('Message addressed from:', mailfrom)
        print('Message addressed to  :', rcpttos)
        print('Message length        :', len(data))
        return

server = CustomSMTPServer(('127.0.0.1', 1025), None)

asyncore.loop()

person Leslie Binbin    schedule 14.04.2019    source источник
comment
Вы пытаетесь отправить электронное письмо или получить электронное письмо? Приведенный выше код предназначен для получения сообщения.   -  person MJPinfield    schedule 14.04.2019
comment
Отправьте электронное письмо, но без использования smtplib для подключения и аутентификации на других smtp-серверах, таких как gmail, я хочу, чтобы этот код сам был smtp-сервером, когда он получает электронное письмо, он может передать его на другой smtp-сервер.   -  person Leslie Binbin    schedule 15.04.2019


Ответы (1)


Ссылаясь на ответ Роберта Патта, вы будете бороться с доставляемостью. Лучшим решением будет размещение локального SMTP-сервера (конечно, наилучшим решением будет использование AmazonSES или API, например MailGun). DigialOcean есть хороший туториал. Затем вы можете использовать приведенный ниже код Python для отправки электронного письма.

import smtplib

sender = '[email protected]'
receivers = ['[email protected]']

message = """From: No Reply <[email protected]>
To: Person <[email protected]>
Subject: Test Email

This is a test e-mail message.
"""

try:
    smtpObj = smtplib.SMTP('localhost')
    smtpObj.sendmail(sender, receivers, message)         
    print("Successfully sent email")
except SMTPException:
    print("Error: unable to send email")

Надеюсь, это поможет!

person MJPinfield    schedule 15.04.2019