Envío automático de correo de cumpleaños con Python

¿Estás aburrido de enviar felicitaciones de cumpleaños a tus amigos o te olvidas de enviar felicitaciones a tus amigos o quieres desearles a las 12 AM pero siempre te quedas dormido? ¿Por qué no automatizar esta sencilla tarea escribiendo un script de Python?

Lo primero que hacemos es importar seis bibliotecas: 

Aparte de esto, también cree una hoja de Excel para contener registros como este: Nombre , Correo electrónico , Contacto , Cumpleaños y Año

Acercarse:

  • Para la parte de envío de correo electrónico, definimos una función sendEmail() que iniciará una sesión de Gmail, enviará el correo electrónico y cerrará la sesión.
  • Para la parte de SMS, debemos tener una cuenta en www.fast2sms.com de donde obtendremos una clave API. Esta clave de API se usa para enviar SMS a través de números móviles usando su cuenta en fast2sms, luego creamos una función sendsms() que verificará la clave de API y enviará SMS.
  • En la sección del código del controlador, leemos los datos de la hoja de Excel y hacemos coincidir la fecha de hoy con cualquiera de los cumpleaños. Si hay una coincidencia, llamamos a las funciones sendEmail() y sendsms() y también agregamos el año actual en la hoja de Excel. Además, hemos utilizado ToastNotifier de la biblioteca win10toast para mostrar notificaciones de escritorio una vez que el correo electrónico y el SMS se han enviado correctamente.

A continuación se muestra la implementación:

Python

# import required packages
import pandas as pd
import datetime
import smtplib
import time
import requests
from win10toast import ToastNotifier
 
# your gmail credentials here
GMAIL_ID = 'your_email_here'
GMAIL_PWD = 'your_password_here'
 
# for desktop notification
toast = ToastNotifier()
 
# define a function for sending email
def sendEmail(to, sub, msg):
   
    # connection to gmail
    gmail_obj = smtplib.SMTP('smtp.gmail.com', 587)
     
    # starting the session
    gmail_obj.starttls()    
     
    # login using credentials
    gmail_obj.login(GMAIL_ID, GMAIL_PWD)  
     
    # sending email
    gmail_obj.sendmail(GMAIL_ID, to,
                   f"Subject : {sub}\n\n{msg}")
     
    # quit the session
    gmail_obj.quit() 
     
    print("Email sent to " + str(to) + " with subject "
          + str(sub) + " and message :" + str(msg))
     
    toast.show_toast("Email Sent!" ,
                     f"{name} was sent e-mail",
                     threaded = True,
                     icon_path = None,
                     duration = 6)
 
    while toast.notification_active():
        time.sleep(0.1)
 
# define a function for sending sms       
def sendsms(to, msg, name, sub):
   
    url = "https://www.fast2sms.com/dev/bulk"
    payload = f"sender_id=FSTSMS&message={msg}&language=english&route=p&numbers={to}"
     
    headers = {
        'authorization': "API_KEY_HERE",
        'Content-Type': "application/x-www-form-urlencoded",
        'Cache-Control': "no-cache",
        }
 
    response_obj = requests.request("POST", url,
                                data = payload,
                                headers = headers)
    print(response_obj.text)
    print("SMS sent to " + str(to) + " with subject :" +
          str(sub) + " and message :" + str(msg))
     
    toast.show_toast("SMS Sent!" ,
                     f"{name} was sent message",
                     threaded = True,
                     icon_path = None,
                     duration = 6)
 
    while toast.notification_active():
        time.sleep(0.1)
 
# driver code
if __name__=="__main__":
   
      # read the excel sheet having all the details
    dataframe = pd.read_excel("excelsheet.xlsx")  
     
    # today date in format : DD-MM
    today = datetime.datetime.now().strftime("%d-%m")
     
    # current year in format : YY
    yearNow = datetime.datetime.now().strftime("%Y")
     
    # writeindex list
    writeInd = []                                                  
 
    for index,item in dataframe.iterrows():
       
        msg = "Many Many Happy Returns of the day dear " + str(item['NAME'])
                
        # stripping the birthday in excel
        # sheet as : DD-MM
        bday = item['Birthday'].strftime("%d-%m")       
         
        # condition checking
        if (today == bday) and yearNow not in str(item['Year']):   
             
            # calling the sendEmail function
            sendEmail(item['Email'], "Happy Birthday",
                      msg)   
             
            # calling the sendsms function
            sendsms(item['Contact'], msg, item['NAME'],
                    "Happy Birthday")  
             
            writeInd.append(index)                                 
 
    for i in writeInd:
       
        yr = dataframe.loc[i,'Year']
         
        # this will record the years in which
        # email has been sent
        dataframe.loc[i,'Year'] = str(yr) + ',' + str(yearNow)            
 
    dataframe.to_excel('excelsheet.xlsx',
                index = False)

Publicación traducida automáticamente

Artículo escrito por ashutoshkrris y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

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