diff --git a/lnbits/extensions/smtp/crud.py b/lnbits/extensions/smtp/crud.py index e5ab1d1f7..2eee4c3d9 100644 --- a/lnbits/extensions/smtp/crud.py +++ b/lnbits/extensions/smtp/crud.py @@ -1,8 +1,6 @@ from http import HTTPStatus from typing import List, Optional, Union -from starlette.exceptions import HTTPException - from lnbits.helpers import urlsafe_short_hash from . import db diff --git a/lnbits/extensions/smtp/models.py b/lnbits/extensions/smtp/models.py index 0b3138e9a..e2f3fc13f 100644 --- a/lnbits/extensions/smtp/models.py +++ b/lnbits/extensions/smtp/models.py @@ -1,18 +1,18 @@ -from fastapi.params import Query -from pydantic.main import BaseModel +from fastapi import Query +from pydantic import BaseModel class CreateEmailaddress(BaseModel): - wallet: str = Query(...) # type: ignore - email: str = Query(...) # type: ignore - testemail: str = Query(...) # type: ignore - smtp_server: str = Query(...) # type: ignore - smtp_user: str = Query(...) # type: ignore - smtp_password: str = Query(...) # type: ignore - smtp_port: str = Query(...) # type: ignore - description: str = Query(...) # type: ignore + wallet: str = Query(...) + email: str = Query(...) + testemail: str = Query(...) + smtp_server: str = Query(...) + smtp_user: str = Query(...) + smtp_password: str = Query(...) + smtp_port: str = Query(...) + description: str = Query(...) anonymize: bool - cost: int = Query(..., ge=0) # type: ignore + cost: int = Query(..., ge=0) class Emailaddresses(BaseModel): @@ -30,10 +30,10 @@ class Emailaddresses(BaseModel): class CreateEmail(BaseModel): - emailaddress_id: str = Query(...) # type: ignore - subject: str = Query(...) # type: ignore - receiver: str = Query(...) # type: ignore - message: str = Query(...) # type: ignore + emailaddress_id: str = Query(...) + subject: str = Query(...) + receiver: str = Query(...) + message: str = Query(...) class Emails(BaseModel): diff --git a/lnbits/extensions/smtp/smtp.py b/lnbits/extensions/smtp/smtp.py index b9a2dce38..a8830254d 100644 --- a/lnbits/extensions/smtp/smtp.py +++ b/lnbits/extensions/smtp/smtp.py @@ -1,9 +1,9 @@ -import os import re import socket -import sys +import time from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText +from email.utils import formatdate from http import HTTPStatus from smtplib import SMTP_SSL as SMTP @@ -25,7 +25,12 @@ async def send_mail(emailaddress, email): valid_email(emailaddress.email) valid_email(email.receiver) + ts = time.time() + date = formatdate(ts, True) + msg = MIMEMultipart("alternative") + msg = MIMEMultipart("alternative") + msg["Date"] = date msg["Subject"] = email.subject msg["From"] = emailaddress.email msg["To"] = email.receiver diff --git a/lnbits/extensions/smtp/tasks.py b/lnbits/extensions/smtp/tasks.py index ed569daeb..9c544473f 100644 --- a/lnbits/extensions/smtp/tasks.py +++ b/lnbits/extensions/smtp/tasks.py @@ -1,20 +1,11 @@ import asyncio -from http import HTTPStatus -import httpx from loguru import logger -from starlette.exceptions import HTTPException from lnbits.core.models import Payment from lnbits.tasks import register_invoice_listener -from .crud import ( - delete_email, - get_email, - get_emailaddress, - get_emailaddress_by_email, - set_email_paid, -) +from .crud import get_email, get_emailaddress, set_email_paid from .smtp import send_mail @@ -27,8 +18,7 @@ async def wait_for_paid_invoices(): async def on_invoice_paid(payment: Payment) -> None: - if not payment.extra or "smtp" != payment.extra.get("tag"): - # not an lnurlp invoice + if payment.extra.get("tag") != "smtp": return email = await get_email(payment.checking_id) diff --git a/lnbits/extensions/smtp/views.py b/lnbits/extensions/smtp/views.py index 1ba53341d..df208a77b 100644 --- a/lnbits/extensions/smtp/views.py +++ b/lnbits/extensions/smtp/views.py @@ -1,9 +1,7 @@ from http import HTTPStatus -from fastapi import Request -from fastapi.params import Depends +from fastapi import Depends, HTTPException, Request from fastapi.templating import Jinja2Templates -from starlette.exceptions import HTTPException from starlette.responses import HTMLResponse from lnbits.core.models import User @@ -16,9 +14,7 @@ templates = Jinja2Templates(directory="templates") @smtp_ext.get("/", response_class=HTMLResponse) -async def index( - request: Request, user: User = Depends(check_user_exists) # type: ignore -): +async def index(request: Request, user: User = Depends(check_user_exists)): return smtp_renderer().TemplateResponse( "smtp/index.html", {"request": request, "user": user.dict()} ) diff --git a/lnbits/extensions/smtp/views_api.py b/lnbits/extensions/smtp/views_api.py index 5001c1a5a..08a05ef3d 100644 --- a/lnbits/extensions/smtp/views_api.py +++ b/lnbits/extensions/smtp/views_api.py @@ -1,8 +1,6 @@ from http import HTTPStatus -from fastapi import Query -from fastapi.params import Depends -from starlette.exceptions import HTTPException +from fastapi import Depends, HTTPException, Query from lnbits.core.crud import get_user from lnbits.core.services import check_transaction_status, create_invoice @@ -17,18 +15,17 @@ from .crud import ( delete_emailaddress, get_email, get_emailaddress, - get_emailaddress_by_email, get_emailaddresses, get_emails, update_emailaddress, ) -from .smtp import send_mail, valid_email +from .smtp import valid_email ## EMAILS @smtp_ext.get("/api/v1/email") async def api_email( - g: WalletTypeInfo = Depends(get_key_type), all_wallets: bool = Query(False) # type: ignore + g: WalletTypeInfo = Depends(get_key_type), all_wallets: bool = Query(False) ): wallet_ids = [g.wallet.id] if all_wallets: @@ -98,9 +95,7 @@ async def api_smtp_make_email(emailaddress_id, data: CreateEmail): @smtp_ext.delete("/api/v1/email/{email_id}") -async def api_email_delete( - email_id, g: WalletTypeInfo = Depends(get_key_type) # type: ignore -): +async def api_email_delete(email_id, g: WalletTypeInfo = Depends(get_key_type)): email = await get_email(email_id) if not email: @@ -118,8 +113,8 @@ async def api_email_delete( ## EMAILADDRESSES @smtp_ext.get("/api/v1/emailaddress") async def api_emailaddresses( - g: WalletTypeInfo = Depends(get_key_type), # type: ignore - all_wallets: bool = Query(False), # type: ignore + g: WalletTypeInfo = Depends(get_key_type), + all_wallets: bool = Query(False), ): wallet_ids = [g.wallet.id] if all_wallets: @@ -136,7 +131,7 @@ async def api_emailaddresses( async def api_emailaddress_create( data: CreateEmailaddress, emailaddress_id=None, - g: WalletTypeInfo = Depends(get_key_type), # type: ignore + g: WalletTypeInfo = Depends(get_key_type), ): if emailaddress_id: emailaddress = await get_emailaddress(emailaddress_id) @@ -158,7 +153,7 @@ async def api_emailaddress_create( @smtp_ext.delete("/api/v1/emailaddress/{emailaddress_id}") async def api_emailaddress_delete( - emailaddress_id, g: WalletTypeInfo = Depends(get_key_type) # type: ignore + emailaddress_id, g: WalletTypeInfo = Depends(get_key_type) ): emailaddress = await get_emailaddress(emailaddress_id) diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index f2ff24bdd..000000000 --- a/package-lock.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "name": "lnbits-legend", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "devDependencies": { - "prettier": "2.1.1" - } - }, - "node_modules/prettier": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.1.1.tgz", - "integrity": "sha512-9bY+5ZWCfqj3ghYBLxApy2zf6m+NJo5GzmLTpr9FsApsfjriNnS2dahWReHMi7qNPhhHl9SYHJs2cHZLgexNIw==", - "dev": true, - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - } - } - }, - "dependencies": { - "prettier": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.1.1.tgz", - "integrity": "sha512-9bY+5ZWCfqj3ghYBLxApy2zf6m+NJo5GzmLTpr9FsApsfjriNnS2dahWReHMi7qNPhhHl9SYHJs2cHZLgexNIw==", - "dev": true - } - } -}