Send Birthday Wish as SMS/Mail with Python 3 Fast2SMS API

Python 3 Fast2SMS API Bot to Send Birthday Wish as SMS or Mail to Multiple Contacts on Phone in Command Line

code.py

# 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)

Leave a Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.