¿Podría sugerir un servidor SMTP simple con las API más básicas (por ejemplo, leer, escribir, eliminar correo electrónico) que podrían ejecutarse en un linux box? Solo necesito convertir el meollo del correo electrónico en formato XML y FTP a otra máquina.un servidor smtp simple
Respuesta
Tome un vistazo a este SMTP sink server:
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()
Se utiliza para volcar smtpd.SMTPServer
mensajes de correo electrónico a los archivos.
¡ESTO ES INCREIBLE! – fixxxer
Gracias, soy autor del servidor de sumidero SMTP. Acabo de aprender de @zero que el comando es más simple para la prueba: 'sudo /usr/lib/python2.4/smtpd.py -n -c DebuggingServer localhost: 25' – twinsant
hmm, modifíquelo con:' sudo python -m smtpd -c DebuggingServer -n localhost: 25' – twinsant
Hay Python SMTP server.
Este módulo ofrece varias clases para implementar servidores SMTP. Una es una implementación genérica de que no se puede hacer, que se puede anular, mientras que las otras dos ofrecen estrategias específicas de envío de correo.
Sí, Lo sé. Pero, ¡no puedo entender cómo leer el correo electrónico con esa lib! ¿Una forma de resolver este problema, quizás? – fixxxer
Si bien este enlace puede responder a la pregunta, es mejor incluir las partes esenciales de la respuesta aquí y proporcionar el enlace de referencia. Las respuestas de solo enlace pueden dejar de ser válidas si la página vinculada cambia. –
En realidad, hay 2 cosas necesarias para enviar un correo electrónico:
- Un servidor SMTP - Esto puede ser el Python SMTP Server o se puede usar Gmail o el servidor de su proveedor de Internet. Lo más probable es que no necesites ejecutar el tuyo.
- Una biblioteca SMTP: algo que enviará una solicitud de correo electrónico al servidor SMTP. Python se envía con una biblioteca llamada smtplib que puede hacer eso por usted. Hay toneladas de información sobre cómo usarlo aquí: http://docs.python.org/library/smtplib.html
Para leer, hay dos opciones dependiendo del servidor del que está leyendo el correo electrónico.
- Para una POP Servidor de Correo - Se puede usar la biblioteca poplib pitón: http://docs.python.org/library/poplib.html
- Para un IMAP Servidor de Correo - Se puede usar la biblioteca imaplib pitón: http://docs.python.org/library/imaplib.html
Estos son buenos ejemplos para empezar.
smtpd - servidores SMTP muestra
http://pymotw.com/2/smtpd/index.html
smtplib - cliente de Protocolo Simple Mail Transfer
Para conseguir el guión de Hasen trabajando en Python 3 que tenía que ajustar ligeramente:
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()
Twisted tiene incorporado un servidor SMTP. Ver 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()
Un enfoque más moderno es el uso de la biblioteca de aiosmtpd (documentación disponible here).
Puede encontrar un buen ejemplo aquí: https://aiosmtpd.readthedocs.io/en/latest/aiosmtpd/docs/controller.html.
- 1. Un simple servidor local SMTP
- 2. ¿Cómo construir un servidor smtp?
- 3. Crear un servidor SMTP C#
- 4. Calcular servidor de servidor smtp
- 5. Buen servidor SMTP en Windows para un servidor de producción
- 6. Cómo validar el servidor SMTP
- 7. ¿Un servidor SMTP local bueno, gratuito, simple y sin "prueba" para desarrollo?
- 8. Uso de tls-extra para smtp simple
- 9. ¿Puede Google App Engine usar un servidor SMTP de terceros?
- 10. Servidor SMTP ficticio para fines de desarrollo
- 11. servidor de desarrollo smtp para windows
- 12. Servidor SMTP para MAC - ¿Alguna sugerencia?
- 13. Envío de correo sin instalar un servidor SMTP
- 14. ¿Cómo enviar un correo directamente al servidor SMTP sin autenticación?
- 15. Servidor de imágenes simple
- 16. Servidor DNS muy simple
- 17. Servidor HTTP simple lib
- 18. Servidor Java HTTPS simple
- 19. Servidor HTTP simple
- 20. Un servidor Http simple con Java/Socket?
- 21. C# Cómo hacer un simple servidor UDP
- 22. Escribiendo un simple servidor de correo electrónico
- 23. Escribir un servidor web simple en Ruby
- 24. ¿Debo limpiar el servidor SMTP? Si es así, ¿cómo hacerlo?
- 25. ¿Servidor web simple en C++?
- 26. Servidor muy simple en C
- 27. Programa Simple Cliente/Servidor Java
- 28. ¿Servidor multiproceso simple en C++?
- 29. Biblioteca simple del servidor AtomPub
- 30. Diferencia entre el envío de un mensaje de correo a un servidor Exchange y el envío a un servidor SMTP
Algunas lecturas interesantes sobre el envío de correo electrónico con el código: http://www.codinghorror.com/blog/2010/04/so-youd-like-to-send-some-email-through-code.html – tgray