Python - Envío de correo electrónico mediante SMTP
Página anteriorPágina siguiente
El Protocolo simple de transferencia de correo (SMTP) es un protocolo que maneja el envío de correo electrónico y el enrutamiento de correo electrónico entre servidores de correo.
Python proporciona smtplib módulo, que define un objeto de sesión de cliente SMTP que se puede utilizar para enviar correo a cualquier máquina de Internet con un demonio de escucha SMTP o ESMTP.
Aquí hay una sintaxis simple para crear un objeto SMTP, que luego se puede usar para enviar un correo electrónico:
import smtplib smtpObj = smtplib.SMTP( [host [, port [, local_hostname]]] )
Aquí está el detalle de los parámetros −
-
anfitrión − Este es el host que ejecuta su servidor SMTP. Puede especificar la dirección IP del host o un nombre de dominio como tutorialspoint.com. Este es un argumento opcional.
-
puerto − Si proporciona host argumento, entonces necesita especificar un puerto, donde el servidor SMTP está escuchando. Por lo general, este puerto sería el 25.
-
nombre_host_local − Si su servidor SMTP se está ejecutando en su máquina local, puede especificar solo localhost a partir de esta opción.
Un objeto SMTP tiene un método de instancia llamado sendmail , que normalmente se usa para hacer el trabajo de enviar un mensaje. Toma tres parámetros −
-
El remitente − Una cadena con la dirección del remitente.
-
Los receptores − Una lista de cadenas, una para cada destinatario.
-
El mensaje − Un mensaje como una cadena con el formato especificado en los distintos RFC.
Ejemplo
Aquí hay una manera simple de enviar un correo electrónico usando el script de Python. Pruébalo una vez −
#!/usr/bin/python import smtplib sender = '[email protected]' receivers = ['[email protected]'] message = """From: From Person <[email protected]> To: To Person <[email protected]> Subject: SMTP e-mail test 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"
Aquí, ha colocado un correo electrónico básico en el mensaje, usando una comilla triple, teniendo cuidado de formatear los encabezados correctamente. Un correo electrónico requiere un De , A y Asunto encabezado, separado del cuerpo del correo electrónico con una línea en blanco.
Para enviar el correo utiliza smtpObj para conectarse al servidor SMTP en la máquina local y luego usar sendmail junto con el mensaje, la dirección de origen y la dirección de destino como parámetros (aunque las direcciones de origen y destino están dentro del propio correo electrónico, no siempre se utilizan para enrutar el correo).
Si no está ejecutando un servidor SMTP en su máquina local, puede usar smtplib cliente para comunicarse con un servidor SMTP remoto. A menos que esté utilizando un servicio de correo web (como Hotmail o Yahoo! Mail), su proveedor de correo electrónico debe haberle proporcionado los detalles del servidor de correo saliente que puede proporcionarles, de la siguiente manera −
smtplib.SMTP('mail.your-domain.com', 25)
Enviar un correo electrónico HTML usando Python
Cuando envía un mensaje de texto usando Python, todo el contenido se trata como texto simple. Incluso si incluye etiquetas HTML en un mensaje de texto, se muestra como texto simple y las etiquetas HTML no se formatearán de acuerdo con la sintaxis HTML. Pero Python ofrece la opción de enviar un mensaje HTML como un mensaje HTML real.
Al enviar un mensaje de correo electrónico, puede especificar una versión de Mime, un tipo de contenido y un juego de caracteres para enviar un correo electrónico HTML.
Ejemplo
El siguiente es el ejemplo para enviar contenido HTML como un correo electrónico. Pruébalo una vez −
#!/usr/bin/python import smtplib message = """From: From Person <[email protected]> To: To Person <[email protected]> MIME-Version: 1.0 Content-type: text/html Subject: SMTP HTML e-mail test This is an e-mail message to be sent in HTML format <b>This is HTML message.</b> <h1>This is headline.</h1> """ try: smtpObj = smtplib.SMTP('localhost') smtpObj.sendmail(sender, receivers, message) print "Successfully sent email" except SMTPException: print "Error: unable to send email"
Envío de archivos adjuntos como correo electrónico
Para enviar un correo electrónico con contenido mixto es necesario configurar Content-type encabezado a multiparte/mixto . Luego, las secciones de texto y archivos adjuntos se pueden especificar dentro de límites .
Un límite comienza con dos guiones seguidos de un número único, que no puede aparecer en la parte del mensaje del correo electrónico. Un límite final que indica la sección final del correo electrónico también debe terminar con dos guiones.
Los archivos adjuntos deben estar codificados con el pack("m") función para tener codificación base64 antes de la transmisión.
Ejemplo
El siguiente es el ejemplo, que envía un archivo /tmp/test.txt como archivo adjunto. Pruébalo una vez −
#!/usr/bin/python import smtplib import base64 filename = "/tmp/test.txt" # Read a file and encode it into base64 format fo = open(filename, "rb") filecontent = fo.read() encodedcontent = base64.b64encode(filecontent) # base64 sender = '[email protected]' reciever = '[email protected]' marker = "AUNIQUEMARKER" body =""" This is a test email to send an attachement. """ # Define the main headers. part1 = """From: From Person <[email protected]> To: To Person <[email protected]> Subject: Sending Attachement MIME-Version: 1.0 Content-Type: multipart/mixed; boundary=%s --%s """ % (marker, marker) # Define the message action part2 = """Content-Type: text/plain Content-Transfer-Encoding:8bit %s --%s """ % (body,marker) # Define the attachment section part3 = """Content-Type: multipart/mixed; name=\"%s\" Content-Transfer-Encoding:base64 Content-Disposition: attachment; filename=%s %s --%s-- """ %(filename, filename, encodedcontent, marker) message = part1 + part2 + part3 try: smtpObj = smtplib.SMTP('localhost') smtpObj.sendmail(sender, reciever, message) print "Successfully sent email" except Exception: print "Error: unable to send email"
python
- Tipos de datos de Python
- Operadores de Python
- Declaración de paso de Python
- Argumentos de la función de Python
- Diccionario de Python
- Manejo de excepciones de Python Uso de la instrucción try, except y finalmente
- Biblioteca Python del sensor de temperatura TMP006 con Raspberry pi,
- Sensor de temperatura Python y Raspberry Pi
- Promedio de Python:cómo encontrar el PROMEDIO de una lista en Python
- Intercambiar dos variables de Python sin usar una tercera
- Java - Envío de correo electrónico