Skip to content

Instantly share code, notes, and snippets.

@ArnyminerZ
Created December 21, 2023 15:34
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ArnyminerZ/765e6b2b03c7ceca8c09a2ff22fb0d67 to your computer and use it in GitHub Desktop.
Save ArnyminerZ/765e6b2b03c7ceca8c09a2ff22fb0d67 to your computer and use it in GitHub Desktop.
Tarea 3 de DST

Hay que instalar una cosa:

python3 -m pip install py3-validate-email

Y ya puedes ejecutar el script:

python3 tarea3.py
from validate_email import validate_email
import sys
# Importamos los módulos que necesitamos de la librería email
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.application import MIMEApplication
# Importamos la librería smtplib
import smtplib
print("Crea un archivo PDF con tu nombre y tu DNI, y guárdalo en el directorio donde está este script.")
print("Debe llamarse documento.pdf")
print("Puedes mirar mi ejemplo, pero para tu caso, borra el que hay aquí, y crea el tuyo.")
print()
document_confirm = input("Escribe \"hecho\" para confirmar: ")
if document_confirm != "hecho":
print("Completa lo de antes, y vuelve a ejecutar el script.")
sys.exit(1)
print("Introduce tu nombre de usuario de la UPV (lo que va delante de @teleco.upv.es).")
username = input()
email_from = f"{username}@teleco.upv.es"
print()
full_name = input("Introduce tu nombre completo:")
print()
dni = input("Introduce tu DNI con letra: ")
print()
password = None
while password is None:
print("Introduce tu contraseña del correo de la UPV.")
print("Esta no es la misma que la que se usa para acceder a PoliformaT o la intranet.")
print("Si no tienes ni idea de cuál es, escribe 'ni idea'.")
password = input()
if password == "ni idea":
password = None
print("Menudo tonto jaja, anda, ve a la intranet (https://intranet.upv.es),")
print(" y en la sección Servicios > Correo electrónico > Utilidades.")
print("Dentro, ve a la sección Utilidades > Cambiar contraseña de correo")
print("Ahí dentro la puedes cambiar.")
print()
input("Cuando lo tengas, pulsa enter y te vuelvo a preguntar.")
# Creamos el objeto de la clase mensaje MIME Multipart
msg = MIMEMultipart("mixed", "frontera")
print("Vale, pues ya estaría todo, ahora introduce el correo al que quieres mandar la tarea.")
print("Yo te recomiendo que te lo mandes antes a ti para asegurarte que no la has liado.")
print("Pero se necesita gente con cohone, así que si tienes huevos mándalo directamente.")
print("El correo del profe para la tarea es: practica.dst@gmail.com")
print()
while True:
email_to = input("Destinatario: ")
es_valido = validate_email(
email_address=email_to,
check_format=True,
check_blacklist=False,
check_dns=False,
check_smtp=False
)
if es_valido:
break
else:
print("Dirección Incorrecta. Introduzca la dirección de destino de nuevo.")
msg.add_header('From', email_from)
msg.add_header('To', email_to)
msg.add_header('Subject', input("Asunto: "))
# Adjuntamos el texto
parte_texto = MIMEText(f'{full_name} {dni}', "plain", "utf-8")
msg.attach(parte_texto)
# Adjuntamos la imagen
fName = "documento.pdf"
subtipo = "pdf"
try:
file = open(fName, 'rb')
adjunto = MIMEApplication(file.read(), subtipo)
adjunto.add_header('Content-Disposition', 'attachment; filename = \"'+fName+'\"')
msg.attach(adjunto)
file.close()
except OSError as e:
print(e)
print("Correo no enviado")
sys.exit()
except:
print("Correo no enviado")
sys.exit()
# Enviamos el correo electrónico utilizando el protocolo SMTP
try:
# Establecemos la conexion con el servidor smtp de la UPV
mailServer = smtplib.SMTP("smtp.upv.es", 587)
mailServer.ehlo()
mailServer.starttls()
mailServer.login(user=username, password=password)
# Enviamos el mensaje
mailServer.sendmail(email_from, email_to, msg.as_string())
# Cierre de la conexión
mailServer.quit()
print("Correo electrónico enviado")
except smtplib.SMTPException as e:
print("Se ha producido un error STMP: "+str(e))
print("Correo electrónico no enviado")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment