простой smtp-сервер

Не могли бы вы предложить простой SMTP-сервер с основными API-интерфейсами (по сути, я имею в виду, чтобы читать, писать, удалять электронную почту), которые можно запускать в Linux-окне? Мне просто нужно преобразовать суть электронной почты в формат XML и передать ее на другую машину.

6 Solutions collect form web for “простой smtp-сервер”

Взгляните на этот сервер-приемник SMTP :

from datetime import datetime import asyncore from smtpd import SMTPServer class EmlServer(SMTPServer): no = 0 def process_message(self, peer, mailfrom, rcpttos, data): filename = '%s-%d.eml' % (datetime.now().strftime('%Y%m%d%H%M%S'), self.no) f = open(filename, 'w') f.write(data) f.close print '%s saved.' % filename self.no += 1 def run(): foo = EmlServer(('localhost', 25), None) try: asyncore.loop() except KeyboardInterrupt: pass if __name__ == '__main__': run() 

Он использует smtpd.SMTPServer для smtpd.SMTPServer сообщений электронной почты в файлы.

Есть действительно 2 вещи, необходимые для отправки электронной почты:

  • SMTP-сервер. Это может быть либо Python SMTP Server, либо вы можете использовать GMail или сервер вашего интернет-провайдера. Скорее всего, вам не нужно запускать свои собственные.
  • Библиотека SMTP – то, что отправит запрос электронной почты на SMTP-сервер. Python поставляется с библиотекой под названием smtplib, которая может сделать это для вас. Существует много информации о том, как его использовать здесь: http://docs.python.org/library/smtplib.html

Для чтения есть два варианта в зависимости от того, на каком сервере вы читаете электронную почту.

Существует SMTP-сервер Python .

Этот модуль предлагает несколько классов для реализации SMTP-серверов. Один из них – это универсальная реализация do-nothing, которая может быть отменена, а две другие предлагают конкретные стратегии отправки почты.

Это хорошие примеры для начала.

smtpd – Примеры серверов SMTP

http://pymotw.com/2/smtpd/index.html

smtplib – Клиент протокола Simple Mail Transfer

http://pymotw.com/2/smtplib/index.html

У Twisted есть встроенный SMTP-сервер. См. http://twistedmatrix.com/documents/current/mail/examples/index.html.

 # Copyright (c) Twisted Matrix Laboratories. # See LICENSE for details. # You can run this module directly with: # twistd -ny emailserver.tac """ A toy email server. """ from __future__ import print_function from zope.interface import implementer from twisted.internet import defer from twisted.mail import smtp from twisted.mail.imap4 import LOGINCredentials, PLAINCredentials from twisted.cred.checkers import InMemoryUsernamePasswordDatabaseDontUse from twisted.cred.portal import IRealm from twisted.cred.portal import Portal @implementer(smtp.IMessageDelivery) class ConsoleMessageDelivery: def receivedHeader(self, helo, origin, recipients): return "Received: ConsoleMessageDelivery" def validateFrom(self, helo, origin): # All addresses are accepted return origin def validateTo(self, user): # Only messages directed to the "console" user are accepted. if user.dest.local == "console": return lambda: ConsoleMessage() raise smtp.SMTPBadRcpt(user) @implementer(smtp.IMessage) class ConsoleMessage: def __init__(self): self.lines = [] def lineReceived(self, line): self.lines.append(line) def eomReceived(self): print("New message received:") print("\n".join(self.lines)) self.lines = None return defer.succeed(None) def connectionLost(self): # There was an error, throw away the stored lines self.lines = None class ConsoleSMTPFactory(smtp.SMTPFactory): protocol = smtp.ESMTP def __init__(self, *a, **kw): smtp.SMTPFactory.__init__(self, *a, **kw) self.delivery = ConsoleMessageDelivery() def buildProtocol(self, addr): p = smtp.SMTPFactory.buildProtocol(self, addr) p.delivery = self.delivery p.challengers = {"LOGIN": LOGINCredentials, "PLAIN": PLAINCredentials} return p @implementer(IRealm) class SimpleRealm: def requestAvatar(self, avatarId, mind, *interfaces): if smtp.IMessageDelivery in interfaces: return smtp.IMessageDelivery, ConsoleMessageDelivery(), lambda: None raise NotImplementedError() def main(): from twisted.application import internet from twisted.application import service portal = Portal(SimpleRealm()) checker = InMemoryUsernamePasswordDatabaseDontUse() checker.addUser("guest", "password") portal.registerChecker(checker) a = service.Application("Console SMTP Server") internet.TCPServer(2500, ConsoleSMTPFactory(portal)).setServiceParent(a) return a application = main() 

Чтобы получить скрипт Hasen, работающий на Python 3, мне пришлось слегка его подстроить:

 from datetime import datetime import asyncore from smtpd import SMTPServer class EmlServer(SMTPServer): no = 0 def process_message(self, peer, mailfrom, rcpttos, data, **kwargs): filename = '%s-%d.eml' % (datetime.now().strftime('%Y%m%d%H%M%S'), self.no) print(filename) f = open(filename, 'wb') f.write(data) f.close print('%s saved.' % filename) self.no += 1 def run(): EmlServer(('localhost', 25), None) try: asyncore.loop() except KeyboardInterrupt: pass if __name__ == '__main__': run() 
  • Отправить e-mail через googleapi gmail python с помощью oauth2
  • Присоединить txt-файл в Python smtplib
  • Как отправить электронное письмо нескольким получателям, используя python smtplib?
  • Python: ошибка утверждения, "не называется"
  • Как заставить SMTPHandler не блокировать
  • SMTP через Exchange с использованием встроенной проверки подлинности Windows (NTLM) с использованием Python
  • Новое для Python, ошибка SMTP GMail
  • Как отправить электронное письмо с помощью Gmail в качестве поставщика с помощью Python?
  • Python - лучший язык программирования в мире.