Added AWS SES email

This commit is contained in:
2026-04-26 01:49:14 -04:00
parent 86e897c54d
commit fe19511d11
3 changed files with 137 additions and 608 deletions
+5 -316
View File
@@ -1,29 +1,17 @@
from flask import session, jsonify
from app.api.schemas.user_update import UserUpdateSchema
# from app.models.loan import Loan
from app.utils.logger import logger
from app.api.services.base_service import BaseService
# from app.api.schemas.eligibility_check import EligibilityCheckSchema
from marshmallow import ValidationError
from app.api.enums import TransactionType
# from app.api.integrations import SimbrellaIntegration
from app.extensions import db
from app.models import Members, MembersActions, MembersProfile, Payments, MembersProducts, ProvisionActions
# from app.api.services.offer_analysis import OfferAnalysis
from app.api.helpers.response_helper import ResponseHelper
from werkzeug.security import generate_password_hash, check_password_hash
from app.api.schemas.user import UserSchema
from app.api.schemas.start_profile import StartProfileSchema
from app.api.schemas.profile_links import ProfileLinksSchema
from flask_mail import Mail, Message
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from sendgrid import SendGridAPIClient
from sendgrid.helpers.mail import Mail
# from sendgrid import SendGridAPIClient
# from sendgrid.helpers.mail import Mail
import datetime
import jwt
@@ -31,10 +19,7 @@ import random
from app.config import Config
import smtplib, ssl
from email.message import EmailMessage
from app.notifications.aws.aws_mailer import send_email_ses
from app.notifications.mail_factory import send_email_factory
class AccountService(BaseService):
@@ -583,39 +568,8 @@ class AccountService(BaseService):
for key in url_list.keys():
url_list_value = url_list[key]
logger.info(f"URL LIST : {key} : {url_list_value}")
#
# firstname = str(validated_data.get('firstname'))
# lastname = str(validated_data.get('lastname'))
# account_name = str(validated_data.get('account_name'))
# phone = str(validated_data.get('phone'))
# full_address = str(validated_data.get('full_address'))
# # email = str(validated_data.get('email'))
# profile_data = {
# "firstname": firstname,
# "lastname": lastname,
# "account_name": account_name,
# "phone": phone,
# "full_address": full_address,
# # "email": email,
# }
# Members.set_member_update_profile(uid, profile_data)
# # Read the saved data
# member_data = Members.get_member_by_uid(uid)
# personal_data = {
# "firstname": member_data.firstname,
# "lastname": member_data.lastname,
# "account_name": member_data.account_name,
# "email": member_data.email,
# "phone": member_data.phone,
# "full_address": member_data.full_address,
# "country": member_data.country,
# }
external_links = {
"facebook_url": "https://facebook.com",
"twitter_url": "twitter.com",
@@ -651,276 +605,11 @@ class AccountService(BaseService):
@staticmethod
def process_test_email(data):
logger.info(f"Email Test Enter 001", exc_info=True)
send_email_ses(
send_email_factory(
to_email="ameye@chiefsoft.com",
subject="Test from Merms",
html_content="<strong>Hello from AWS SES</strong>"
)
# AccountService.test_new_mailer()
# AccountService.send_register_mail('ameye@chiefsoft.com', 'pend-uid---', 100, 'olutest', 'Ameyetest')
logger.info(f"Email Test", exc_info=True)
@staticmethod
def test_new_mailer_old():
logger.info("test_new_mailer 000 ")
# --- Email Configuration ---
sender_email = "support@mermsemr.com" # Enter your email address
receiver_email = "ameye@chiefsoft.com" # Enter the recipient's address
# Use the App Password generated in Step 1
app_password = "flhf cjjx bguv fycg"
app_password = "flhfcjjxbguvfycg"
# --- Create the Email Message ---
# msg = EmailMessage()
# msg.set_content("This is the body of the email sent from Python.")
msg = MIMEText("This is the body of my email.")
msg['Subject'] = "Subject Line from Python"
msg['From'] = sender_email
msg['To'] = receiver_email
# --- Connect to Gmail's SMTP Server and Send the Email ---
smtp_server = "smtp.gmail.com"
port = 587 # STARTTLS
context = ssl.create_default_context()
logger.info("test_new_mailer 003 ")
try:
logger.info("test_new_mailer 000 44")
with smtplib.SMTP(smtp_server, port) as server:
logger.info("test_new_mailer 000 44-1")
server.ehlo()
logger.info("test_new_mailer 000 44-2")
server.starttls(context=context)
server.ehlo()
logger.info("test_new_mailer 000 55")
server.login(sender_email, app_password)
logger.info("test_new_mailer 000 66")
server.send_message(msg)
logger.info("test_new_mailer 000 77")
logger.info("Email sent successfully!")
except smtplib.SMTPAuthenticationError:
logger.error("Authentication error: Check your username and password.")
except smtplib.SMTPConnectError as e:
logger.error(f"Connection error: {e}")
except smtplib.SMTPException as e:
logger.error(f"An unexpected SMTP error occurred: {e}")
except Exception as e:
logger.error(f"An unrelated error occurred: {e}")
@staticmethod
def test_new_mailer():
# Replace these with your actual details
SENDGRID_API_KEY = "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"
FROM_EMAIL = 'support@mermsemr.com' # Must be a verified sender in SendGrid
TO_EMAIL = 'works@chiefsoft.com'
message = Mail(
from_email=FROM_EMAIL,
to_emails=TO_EMAIL,
subject='Sending with Twilio SendGrid is Fun',
html_content='<strong>and easy to do anywhere, even with Python</strong>'
)
try:
# Initialize the SendGrid client
sg = SendGridAPIClient(SENDGRID_API_KEY)
# Send the email
response = sg.send(message)
# Print status codes: 202 means the request was accepted for delivery
print(f"Status Code: {response.status_code}")
print(f"Body: {response.body}")
print(f"Headers: {response.headers}")
except Exception as e:
logger.error(f"An unrelated error occurred: {e}")
# logger.info("test_new_mailer 000 ")
# # --- Email Configuration ---
# sender_email = "support@mermsemr.com" # Enter your email address
# receiver_email = "ameye@chiefsoft.com" # Enter the recipient's address
# # Use the App Password generated in Step 1
# app_password = "flhf cjjx bguv fycg"
# app_password = "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"
#
# # --- Create the Email Message ---
# # msg = EmailMessage()
# # msg.set_content("This is the body of the email sent from Python.")
# msg = MIMEText("This is the body of my email.")
# msg['Subject'] = "Subject Line from Python"
# msg['From'] = sender_email
# msg['To'] = receiver_email
#
# # --- Connect to Gmail's SMTP Server and Send the Email ---
# smtp_server = "smtp.sendgrid.net"
# port = 587 # STARTTLS
#
# context = ssl.create_default_context()
# logger.info("test_new_mailer 003 ")
# try:
# logger.info("test_new_mailer 000 44")
# with smtplib.SMTP(smtp_server, port) as server:
# logger.info("test_new_mailer 000 44-1")
# server.ehlo()
# logger.info("test_new_mailer 000 44-2")
# server.starttls(context=context)
# server.ehlo()
# logger.info("test_new_mailer 000 55")
# server.login(sender_email, app_password)
# logger.info("test_new_mailer 000 66")
# server.send_message(msg)
# logger.info("test_new_mailer 000 77")
# logger.info("Email sent successfully!")
#
# except smtplib.SMTPAuthenticationError:
# logger.error("Authentication error: Check your username and password.")
#
# except smtplib.SMTPConnectError as e:
# logger.error(f"Connection error: {e}")
# except smtplib.SMTPException as e:
# logger.error(f"An unexpected SMTP error occurred: {e}")
# except Exception as e:
# logger.error(f"An unrelated error occurred: {e}")
def send_register_mail(signup_email, pending_uid, pending_id, firstname, lastname):
pending_member = {
"email": signup_email,
"pending_uid": pending_uid,
"first_name": firstname,
"last_name": lastname,
"pending_id": pending_id,
}
jwt_part = jwt.encode(
{"user": pending_member, 'exp': datetime.datetime.utcnow() + datetime.timedelta(minutes=3330)},
AccountService.JWT_SECRET_KEY, algorithm='HS256'
)
panel_url = panel_url = AccountService.THIS_SITE_URL # "https://qa-panel.mermsemr.com"
link_url = str(panel_url) + '/csignup/' + jwt_part
msg_body = f"""
Hello {firstname},
You received this message for account verification
Follow the link:{link_url}
For any Support
Reach Out
support@mermsemr.com
"""
sender_email = AccountService.SEND_EMAIL_FROM
sender_password = AccountService.SEND_EMAIL_PASS
receiver_email = signup_email
subject = "Verify your MERMS(AI) Account Setup"
body = msg_body
html_body = f"""\
<html>
<head></head>
<body style="font-size:14px;line-height:1.5;">
<table width="550px" border="0" cellpadding="3" cellspacing="3" background-color="#F0F8FF" style="font-size:16px">
<tr>
<td style="text-align:center">
<img style="width:150px; height:auto;" src="mermsemr.com/images/logo-pink.png" />
</td>
</tr>
<tr>
<td>
Hello <b>{firstname}!</b>
</td>
</tr>
<tr>
<td>
You have received this message for your account verification<br>
</td>
</tr>
<tr>
<td>
Follow the link: <a href="{link_url}">link</a> to complete the verification process.<br>
</td>
</tr>
</table>
</body>
</html>
"""
msg = MIMEMultipart()
msg['Subject'] = subject
msg['From'] = sender_email
msg['To'] = receiver_email
msg.attach(MIMEText(html_body, 'html')) # or 'html' for HTML content
try:
# For Gmail, use 'smtp.gmail.com' and port 587 (TLS) or 465 (SSL)
# For other providers, consult their documentation for SMTP server and port
server = smtplib.SMTP('smtp.gmail.com', 587)
# server.starttls() # Enable TLS encryption
server.login(sender_email, sender_password)
server.sendmail(sender_email, receiver_email, msg.as_string())
print("Email sent successfully!")
except Exception as e:
print(f"Error sending email: {e}")
logger.error(f"Error sending email: {e}")
finally:
server.quit() # Close the connection
# @staticmethod
# def get_profile_data(data):
#
# try:
# with db.session.begin():
#
# validated_data = AccountService.validate_data(data, UserSchema())
# user_token = validated_data.get('token')
# uid = str(validated_data.get('uid'))
# member_data = Members.get_member_by_uid(uid)
#
# personal_data = {
# "firstname": member_data.firstname,
# "lastname": member_data.lastname,
# "account_name": member_data.account_name,
# "phone": "911 111 1111",
# "full_address": "100 White House, Washington, DC 00000",
# "country": member_data.country,
# }
#
# external_links = {
# "facebook_url": "facebook.com",
# "twitter_url": "twitter.com",
# "blogger_url": "blogger.com",
# "google_url": "google.com",
# "linked_url": "linkedin.com",
# "website_url": "www.mysite.com",
# }
#
# profile_data = {
# "personal_data": personal_data,
# "external_links": external_links,
# }
#
# return ResponseHelper.success(data=profile_data)
#
# except ValidationError as err:
#
# logger.error(f"Validation Error: {getattr(err, 'messages', str(err))}")
# db.session.rollback()
# return ResponseHelper.unprocessable_entity(result_description="Validation exception")
#
# except ValueError as err:
# logger.error(f"{getattr(err, 'messages', str(err))}")
# db.session.rollback()
# return ResponseHelper.error(result_description=str(err))
#
# except Exception as e:
# logger.error(f"An error occurred: {str(e)}", exc_info=True)
# db.session.rollback()
# return ResponseHelper.internal_server_error()