Google+ Seguidores

sábado, 13 de agosto de 2016

Screenshot y envio de correo con Python

    7

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: http://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.

7 comentarios:
Write comentarios
  1. Interesante muchas gracias.. Hoy por esta lectura aprendí algo nuevo. Gracias

    ResponderEliminar
  2. ¿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

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

      Eliminar
  3. Excelente pagina pythondiario! gracias por tus aportes

    ResponderEliminar
  4. Este comentario ha sido eliminado por el autor.

    ResponderEliminar

Tu comentario es importante y nos motiva a seguir escribiendo...

Entradas más recientes

© 2014 Mi diario Python. Designed by Bloggertheme9 | Distributed By Gooyaabi Templates
Powered by Blogger.