sql_to_xlsx/main.py
2025-01-22 22:44:10 +01:00

103 lines
3.2 KiB
Python

import mysql.connector
from openpyxl import Workbook
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email.mime.text import MIMEText
from email import encoders
import os
def connect_db(sql_query):
try:
connection = mysql.connector.connect(
host='192.168.145.196',
user='sql_to_xlsx',
password='2Uce5Uc5',
database='smsgw_control',
auth_plugin='mysql_native_password',
ssl_disabled=True,
use_pure=True
)
cursor = connection.cursor()
cursor.execute(sql_query)
results = cursor.fetchall()
column_headers = [i[0] for i in cursor.description]
return results, column_headers
except mysql.connector.Error as e:
print(f"Error connecting to DB: {e}")
return None
def write_to_excel(data, headers, file_name):
workbook = Workbook()
sheet = workbook.active
sheet.append(headers)
for row in data:
sheet.append(row)
workbook.save(file_name)
print(f"Excel file saved as {file_name}")
def send_email(subject, body, recipient_email, sender_email, filename, smtp_server, smtp_port, smtp_user, smtp_password):
try:
msg = MIMEMultipart()
msg['From'] = sender_email
msg['To'] = recipient_email
msg['Subject'] = subject
msg.attach(MIMEText(body, 'plain'))
with open(filename, 'rb') as attachment:
part = MIMEBase('application', 'octet-stream')
part.set_payload(attachment.read())
encoders.encode_base64(part)
part.add_header(
'Content-Disposition',
f'attachment; filename={os.path.basename(filename)}'
)
msg.attach(part)
with smtplib.SMTP(smtp_server, smtp_port) as server:
server.starttls()
server.login(smtp_user, smtp_password)
server.send_message(msg)
server.quit()
print("Email sent!")
except Exception as e:
print(f"Error: {e}")
if __name__ == "__main__":
sql_query = """SELECT
countryname_eng as Countryname, ifnull(network, 'Default') as Network, routingprices.mcc as MCC, routingprices.mnc as MNC, route, price
FROM
smsgw_control.routingprices
LEFT JOIN smsgw_control.E212_MCC ON routingprices.mcc = smsgw_control.E212_MCC.MCC
LEFT JOIN smsgw_control.E212_MCCMNC on routingprices.mcc = smsgw_control.E212_MCCMNC.MCC and routingprices.mnc = smsgw_control.E212_MCCMNC.MNC
WHERE
route = 'M1' AND clientid = '13283';"""
results, headers = connect_db(sql_query)
excel_file_name = "pricelist.xlsx"
write_to_excel(results, headers, excel_file_name)
subject = "Mexedia pricelist"
body = "Please find attached your pricelist"
recipient_email = "mark@42tele.com"
sender_email = "mark@42tele.com"
smtp_server = "smtp.eu.mailgun.org"
smtp_port = 587
smtp_user = 'stps@monitoring.fortytwo.mt'
smtp_password = 'f18c48a7076c868bef91eb8f0ca59d33-9776af14-d2648a16'
send_email(
subject, body, recipient_email, sender_email, excel_file_name, smtp_server, smtp_port, smtp_user, smtp_password
)