User Tools

Site Tools


servidor_de_correo_smtpd_en_pocos_segundos

Improvisar servidor SMTPD en segundos para recibir correos electrónicos

Código en python sin dependencias que pone en marcha un servidor de correo SMTPD que aceptará cualquier correo entrante a la dirección 0.0.0.0:25.

Muy útil para recibir un correo cualquiera con posibles adjuntos sin tener que instalar, configurar un servicio y crear la/s respectivas cuenta/s.

script_smtpd.py
#!/usr/bin/env python
# encoding: utf-8
#
# Copyright (c) 2008 Doug Hellmann All rights reserved.
# URL: http://pymotw.com/2/_sources/smtpd/index.txt
"""
"""
 
__version__ = "$Id$"
#end_pymotw_header
 
import smtpd
import asyncore
 
class CustomSMTPServer(smtpd.SMTPServer):
 
    def process_message(self, peer, mailfrom, rcpttos, data):
        print 'Receiving message from:', peer
        print 'Message addressed from:', mailfrom
        print 'Message addressed to  :', rcpttos
        print 'Message length        :', len(data)
	print 'Message body	     :', data
        return
 
server = CustomSMTPServer(('0.0.0.0', 25), None)
 
asyncore.loop()

Ejemplo de la salida del script al recibir un correo desde gmail con adjunto (adjunto.cnf).

./script_smtpd.py
Receiving message from: ('209.85.216.49', 35640)
Message addressed from: emisor@gmail.com
Message addressed to  : ['receptorinventado@dominio.org']
Message length        : 2909
Message body	     : Received: by vnbg62 with SMTP id g62so380705vnb.2
        for <receptorinventado@dominio.org>; Fri, 19 Jun 2015 16:02:05 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20120113;
        h=mime-version:reply-to:date:message-id:subject:from:to:content-type;
        bh=UsxED07zM3FTPUl4ewIceUPDPv1/clF+YPUmlqe4CCY=;
        b=UwjwLB2LLm7Wvb/PuRnaVMGPfPlAXF59G7PO9iTaxXQepXU3xx69O+kLY2O430zp8/
         MMKMR+o8S7+PykJBRXS1AdcYDl5r7ITOGJ+snVTkUaFcYubkc9mAm81pOTTgB2W/3sR/
         h4J12Gb8PhaVaKQYqF0NFR7zopiEZyFTrNcio6Fh1B+5ku3+wPipYSXyek7bi9/M1Ohv
         ++I29yjIN+q/UhLpioCMegAcVbslOEpH/qlyiaeNmR5n7IngwhIVxRBq9u1OssW6TdHX
         31F28Yj+OcX0HE5eW8WuLFhAtf+g+AoV+vISi/WxMvv9dJMWALxzgWQIxzlRtvALSoVk
         LIwg==
MIME-Version: 1.0
X-Received: by 10.52.32.34 with SMTP id f2mr14909156vdi.11.1434754925096; Fri,
 19 Jun 2015 16:02:05 -0700 (PDT)
Received: by 10.31.138.81 with HTTP; Fri, 19 Jun 2015 16:02:04 -0700 (PDT)
Reply-To: emisor@gmail.com
Date: Sat, 20 Jun 2015 01:02:04 +0200
Message-ID: <CAEvb=MFJsk_wgtrX04gZ62_-EqPaH64Ctcarmh-g+6sQ3_aLbw@mail.gmail.com>
Subject: Prueba desde Gmail
From: =?UTF-8?Q?NOMBRE_=E2=84=A2_?= <emisor@gmail.com>
To: receptorinventado@dominio.org
Content-Type: multipart/mixed; boundary=bcaec51d2b80a6a5d40518e6e9db
 
--bcaec51d2b80a6a5d40518e6e9db
Content-Type: multipart/alternative; boundary=bcaec51d2b80a6a5ce0518e6e9d9
 
--bcaec51d2b80a6a5ce0518e6e9d9
Content-Type: text/plain; charset=UTF-8
 
Hola, este es el cuerpo del mensaje.
 
-- 
GPG Key ID: ABE8AF92
 
--bcaec51d2b80a6a5ce0518e6e9d9
Content-Type: text/html; charset=UTF-8
 
<div dir="ltr">Hola, este es el cuerpo del mensaje.<br clear="all"><div><br>-- <br><div class="gmail_signature"><div dir="ltr"><div><div dir="ltr"><span style="background-color:rgb(255,255,255)">GPG Key ID: ABE8AF92</span><br></div></div></div></div>
</div></div>
 
--bcaec51d2b80a6a5ce0518e6e9d9--
--bcaec51d2b80a6a5d40518e6e9db
Content-Type: application/octet-stream; name="adjunto.cnf"
Content-Disposition: attachment; filename="adjunto.cnf"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_ib481arh0
 
aW5wdXQgeyBzdGRpbnt9Cn0gCgpmaWx0ZXIgewoKICAgIAlncm9rIHsKICAgICAgCQltYXRjaCA9
PiB7ICJtZXNzYWdlIiA9PiAiJXtJUE9SSE9TVDpjbGllbnRpcH0gLSAtIFxbJXtIVFRQREFURTp0
ZGQvTU1NL1lZWVk6SEg6bW06c3MgWiIgXSBsb2NhbGUgPT4gImVuIiB9Cgp9IAoKb3V0cHV0IHsg
CgoJZWxhc3RpY3NlYXJjaCB7IAoJCWhvc3QgPT4gbG9jYWxob3N0IGNsdXN0ZXIgPT4gZXNjbHVz
dGVyCgkJfSAKCXN0ZG91dCB7Y29kZWMgPT4gcnVieWRlYnVnIH0JCn0K
--bcaec51d2b80a6a5d40518e6e9db--
Timeout, server dominio.org not responding.

Posible problema.

Traceback (most recent call last):
  File "smtpd.py", line 12, in <module>
    import smtpd
  File "/root/smtpd.py", line 15, in <module>
    class CustomSMTPServer(smtpd.SMTPServer):
AttributeError: 'module' object has no attribute 'SMTPServer'
Traceback (most recent call last):
  File "email.py", line 12, in <module>
    import smtpd
  File "/root/smtpd.py", line 15, in <module>
    -V
AttributeError: 'module' object has no attribute 'SMTPServer

Solución: Renombrar el script y borrar también los ficheros pyc generados. La causa se debe a que el script no puede llamar igual que una de sus librerías, en el caso de usar el nombre “smtpd.py”, este fallará mostrando el primer error anteriormente comentado. Si no se borra el fichero “.pyc” correspondiente, se mostrará un error como el del segundo recuadro.

ls /usr/lib/python2.X/*.py
/usr/lib/python2.X/smtpd.py
servidor_de_correo_smtpd_en_pocos_segundos.txt · Last modified: 2020/12/25 22:57 by 127.0.0.1