Untitled

mail@pastecode.io avatar
unknown
plain_text
7 months ago
3.9 kB
2
Indexable
Never
import os 
import boto3
from datetime import datetime, timedelta
from boto3.dynamodb.conditions import Key
from email.mime.text import MIMEText

def lambda_handler(event, context):
    query_from_dynamoDB()
    
def query_from_dynamoDB() :
    alert_date = datetime.now().date() + timedelta(days = 30)
    alert_date = datetime.strftime(alert_date, format = "%Y-%m-%d")
    
    dynamodb_client = boto3.client("dynamodb")
    response = dynamodb_client.query(
        TableName = 'test-table',
        IndexName = 'expiryDate',
        Select = 'ALL_ATTRIBUTES',
        KeyConditions = {
            'dummyCol' : {
                'AttributeValueList' : [{
                        'S' : 'A'
                    }],

            'ComparisonOperator' : 'EQ'
            },
            'expiryDate' : {
                'AttributeValueList' : [{            # expiry_date - today < 30
                        'S' : alert_date             # expiry_date < today + 30
                    }],
            
            'ComparisonOperator' : 'LT'
            }
        }
    )

    Send_email_SES(response['Items'])
    # return response['Items']
    
def Generate_email_data(recipient, items) :
    recipient_name = recipient.split("@")[0]
    #body = f"Dear <b>{recipient_name}</b>, <br> <br> You got <b>{len(items)} domain(s)</b> about to expire, here is the detail : \n"
    
    table_content = "<!DOCTYPE html>\n<html>\n<head>\n<title>Page Title</title>\n</head>\n<body>\n"
    attributes = ['Domain name', 'Expiry date', 'Registration date']
    table_content += "<br><br><table border=\"1\" cellspacing=\"0\" cellpadding=\"10\" width=\"50%\">\n"
    # Header part
    table_content += "  <thead>\n      <tr align = \"center\">\n"
    for col in attributes : table_content += f"         <th>{col}</th>\n" 
    table_content += "      </tr>\n  </thead>\n"
    
    # Body part
    table_content += "  <tbody>\n"
    for item in items :
        date_diff = datetime.strptime(item['expiryDate']['S'], "%Y-%m-%d").date() - datetime.now().date()
        table_content += "      <tr align = \"center\">\n"
        table_content += f"         <td width=\"25%\">{item['domainName']['S']}</td>\n"
        table_content += f"         <td width=\"50%\">{item['expiryDate']['S']} <b><i>({date_diff.days} days until expire)</b></i></td>\n"
        table_content += f"         <td width=\"25%\">{item['registrationDate']['S']}</td>\n"
        table_content += "      </tr>\n"

    table_content += "  </tbody>\n"
    table_content += "</table>\n<br><br>"
    table_content += "</body>\n</html>"

    #end_body = "Please ask for extension the expiry date of the domain(s) above.<br><br>Best regards,<br><br>\t  STYL Solutions"
    # full_body = body + table_content + end_body
    print(table_content)
    return table_content

def Send_email_SES(items) :
    ses_client = boto3.client("ses")
    recipient_list = ['dangquangvkl@gmail.com', 'tient4199@gmail.com', 'pham.tan.anh.vu@styl.solutions']
    Subject = {
        "Data" : f"ALERT ! You got {len(items)} domain(s) about to expire !",
        'Charset' : 'UTF-8'
    }

    for recipient in recipient_list :
        response = ses_client.send_email(
            Source = "anhvuphamtan@gmail.com",
            Destination = {
                "ToAddresses" : [recipient]
            },

            Message = {
                'Subject' : Subject,
                'Body' : {
                    'Text' : {
                        'Data' : MIMEText(Generate_email_data(recipient, items), "html").as_string(),
                        'Charset' : 'UTF-8'
                    }
                }
            }
        )


response = query_from_dynamoDB()

# for item in response : 
#     print(item['domainName']['S'], item['expiryDate']['S'])


# Generate_email_data("anhvuphamtan@gmail.com", response)