Pourriez-vous s'il vous plaît suggérer un serveur SMTP simple avec les API très basiques (je veux dire par très basique, lire, écrire, supprimer e-mail) qui pourrait être exécuté sur une machine Linux? J'ai juste besoin de convertir le crux de l'email en format XML et le FTP sur une autre machine.un simple serveur smtp
Répondre
Jetez un oeil à cette 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()
Il utilise smtpd.SMTPServer
pour vider des e-mails aux fichiers.
C'est génial! – fixxxer
Merci, je suis l'auteur du serveur récepteur SMTP. Je viens d'apprendre de @zero que la commande est plus simple pour le test: 'sudo /usr/lib/python2.4/smtpd.py -n -c DebuggingServer localhost: 25' – twinsant
hmm, modifiez-le avec:' sudo python -m smtpd -c DebuggingServer -n localhost: 25' – twinsant
Il est Python SMTP server.
Ce module offre plusieurs classes pour implémenter des serveurs SMTP. L'une est une implémentation générique à ne rien faire, qui peut être surchargée, alors que les deux autres offrent des stratégies spécifiques d'envoi de courrier.
Oui, Je sais.Mais, je suis incapable de comprendre comment lire le courrier électronique avec cette lib! Un moyen de contourner ce problème, peut-être? – fixxxer
Bien que ce lien puisse répondre à la question, il est préférable d'inclure les parties essentielles de la réponse ici et de fournir le lien pour référence. Les réponses à lien uniquement peuvent devenir invalides si la page liée change. –
Il y a vraiment 2 choses nécessaires pour envoyer un email:
- Un serveur SMTP - Cela peut être le Python SMTP Server ou vous pouvez utiliser GMail ou le serveur de votre fournisseur d'accès Internet. Les chances sont que vous n'avez pas besoin de courir le vôtre.
- Une bibliothèque SMTP - Quelque chose qui va envoyer une demande par courriel au serveur SMTP. Python est livré avec une bibliothèque appelée smtplib qui peut le faire pour vous. Il y a des tonnes d'informations sur la façon de l'utiliser ici: http://docs.python.org/library/smtplib.html
Pour la lecture, il y a deux options en fonction de ce serveur que vous lisez l'e-mail de.
- Pour un POP Serveur de messagerie - Vous pouvez utiliser la bibliothèque python poplib: http://docs.python.org/library/poplib.html
- Pour un IMAP Serveur de messagerie - Vous pouvez utiliser la bibliothèque python imaplib: http://docs.python.org/library/imaplib.html
Ce sont des exemples bien pour un début.
smtpd - serveurs SMTP exemples
http://pymotw.com/2/smtpd/index.html
smtplib - Protocole Simple Mail Transfer client
Pour obtenir le script de Hasen travailler en Python 3 je devais modifier légèrement:
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 a une commande interne du serveur SMTP. Voir 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()
Une approche plus moderne consiste à utiliser la bibliothèque aiosmtpd (documentation disponible here).
Vous pouvez trouver un bon exemple: https://aiosmtpd.readthedocs.io/en/latest/aiosmtpd/docs/controller.html.
- 1. Recommander un serveur SMTP extensible
- 2. Comment construire un serveur smtp?
- 3. Serveur SMTP de développement
- 4. SMTP: commande Unix simple
- 5. Déboguer un serveur SMTP avec un proxy
- 6. Serveur SMTP IIS
- 7. Serveur SMTP avec godaddy
- 8. Comment valider le serveur SMTP
- 9. Un bon serveur SMTP local gratuit, simple et non "test" pour le développement?
- 10. Lamson (serveur SMTP Python) Erreur
- 11. Réponse du serveur SMTP: 451
- 12. Développement Linux/serveur smtp minimal et serveur pop3
- 13. Serveur SMTP Windows pour API email
- 14. Configuration requise pour le serveur SMTP
- 15. Échange de courrier sans serveur SMTP
- 16. Configuration d'un serveur de messagerie SMTP
- 17. Utilisation du Dropfolder du serveur Microsoft SMTP
- 18. Sendmail exécute un serveur SMTP (démon) en arrière-plan?
- 19. l'envoi de courrier à un serveur smtp configuré
- 20. dans la connexion à un serveur smtp avec python
- 21. UNIX: Envoyer un e-mail à l'aide du serveur SMTP
- 22. configuration serveur SMTP dans php geekmail
- 23. Comment savoir quel serveur SMTP est utilisé?
- 24. Paramètres du nom du serveur SMTP
- 25. erreur d'exécution. Problème avec le serveur SMTP
- 26. Le serveur SMTP IIS6 s'arrête sans raison?
- 27. Serveur SMTP pour MAC - Des suggestions?
- 28. Besoin d'aide installation serveur Windows 2008 serveur SMTP
- 29. Possibilité d'ajouter un serveur local en tant que SMTP virtuel sur un autre serveur?
- 30. Envoyer un message en utilisant localhost SMTP
Quelques lectures intéressantes sur l'envoi de courriels avec le code: http://www.codinghorror.com/blog/2010/04/so-youd-like-to-send-some-email-through-code.html – tgray