Added Send mail functionality & Dockerized application #1

Merged
PeterSurda merged 11 commits from cis-kuldeep/influx-smtp-gateway:master into master 2022-02-21 07:41:14 +01:00
3 changed files with 16 additions and 16 deletions
Showing only changes of commit 8488446e37 - Show all commits

View File

@ -3,8 +3,7 @@
SMTP gateway accessible from InfluxDB for sending alerts. SMTP gateway accessible from InfluxDB for sending alerts.
# create .env file with following parameters # create .env file with following parameters
server_host = 0.0.0.0 server_name = smtp.gmail.com
PeterSurda marked this conversation as resolved Outdated

remove as it's matched with docker service

remove as it's matched with docker service
server_port = 8081
to_mail = test111@mailinator.com to_mail = test111@mailinator.com
from_mail = test@gmail.com from_mail = test@gmail.com
PeterSurda marked this conversation as resolved Outdated

add smtp server name

add smtp server name
from_mail_password = test@123 from_mail_password = test@123

View File

@ -3,7 +3,7 @@ version: '3.8'
services: services:
web: web:
PeterSurda marked this conversation as resolved Outdated

smtp-gateway:

`smtp-gateway:`
build: . build: .
ports: expose:
PeterSurda marked this conversation as resolved Outdated

perhaps this should be inside the Dockerfile

perhaps this should be inside the `Dockerfile`
- 8081:8081 - "8081"
PeterSurda marked this conversation as resolved Outdated

If we only use this internally inside a docker service, we should use expose, not port.

If we only use this internally inside a docker service, we should use `expose`, not `port`.
env_file: env_file:
- ./.env - ./.env

25
main.py
View File

@ -1,6 +1,6 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
""" """
Serve cloud init files SMTP webhook server
PeterSurda marked this conversation as resolved Outdated

change docstring

change docstring
""" """
import os import os
@ -13,20 +13,19 @@ from email.mime.text import MIMEText
import cherrypy import cherrypy
class CloudInitApp: class SMTPWebhookApp:
PeterSurda marked this conversation as resolved Outdated

class name

class name
""" """
PeterSurda marked this conversation as resolved Outdated

should log to stdout or stderr (research which one is more appropriate)

should log to stdout or stderr (research which one is more appropriate)
Serve cloud init files SMTP webhook server
PeterSurda marked this conversation as resolved Outdated

docstring

docstring
""" """
PeterSurda marked this conversation as resolved
Review

this should go under __main__

this should go under `__main__`
def _send_mail(self): def _send_mail(self):
PeterSurda marked this conversation as resolved Outdated

remove CONFIG and only use environment variables
if some variable missing, display a helpful error message and quit with non-zero error code

remove `CONFIG` and only use environment variables if some variable missing, display a helpful error message and quit with non-zero error code
try: try:
# pylint: disable=deprecated-lambda
cl = cherrypy.request.headers['Content-Length'] cl = cherrypy.request.headers['Content-Length']
PeterSurda marked this conversation as resolved Outdated

override from env variables

override from env variables
rawbody = cherrypy.request.body.read(int(cl)) rawbody = cherrypy.request.body.read(int(cl))
req_body = json.loads(rawbody) req_body = json.loads(rawbody)
subject = req_body['subject'] subject = req_body['subject']
body = req_body['body'] body = req_body['body']
PeterSurda marked this conversation as resolved Outdated

debug we don't need

debug we don't need
client = smtplib.SMTP('smtp.gmail.com') client = smtplib.SMTP(SERVER_NAME)
msg = MIMEText(body, 'plain', 'utf-8') msg = MIMEText(body, 'plain', 'utf-8')
PeterSurda marked this conversation as resolved Outdated

port 587

port 587
msg['Subject'] = Header(subject, 'utf-8') msg['Subject'] = Header(subject, 'utf-8')
msg['From'] = FROM_MAIL msg['From'] = FROM_MAIL
@ -45,26 +44,28 @@ class CloudInitApp:
@cherrypy.expose @cherrypy.expose
def send_mail(self): def send_mail(self):
""" """
v1 api endpoint user-data api endpoint for send mail
""" """
PeterSurda marked this conversation as resolved Outdated

docstring

docstring
return self._send_mail() return self._send_mail()
ROOT = CloudInitApp() ROOT = SMTPWebhookApp()
PeterSurda marked this conversation as resolved Outdated

except (SMTPConnectionError, TimeoutError) as e:

`except (SMTPConnectionError, TimeoutError) as e:`
if __name__ == "__main__": if __name__ == "__main__":
try: try:
SERVER_HOST = os.environ["server_host"] SERVER_NAME = os.environ["server_name"]
SERVER_PORT = int(os.environ["server_port"])
TO_MAIL = os.environ["to_mail"] TO_MAIL = os.environ["to_mail"]
PeterSurda marked this conversation as resolved Outdated

SERVER_PORT should default to 587 and be an integer.

`SERVER_PORT` should default to `587` and be an integer.
FROM_MAIL = os.environ["from_mail"] FROM_MAIL = os.environ["from_mail"]
FROM_MAIL_PASSWORD = os.environ["from_mail_password"] FROM_MAIL_PASSWORD = os.environ["from_mail_password"]
except: # noqa:E722 # to_mail = "test111@mailinator.com"
# from_mail = "test@gmail.com"
# from_mail_password = "test@123"
PeterSurda marked this conversation as resolved Outdated

except KeyError

`except KeyError`
except KeyError:
raise "Please check missing environment variables: to_mail, from_mail, \ raise "Please check missing environment variables: to_mail, from_mail, \
from_mail_password" from_mail_password"
cherrypy.server.socket_host = SERVER_HOST cherrypy.server.socket_host = "0.0.0.0"
PeterSurda marked this conversation as resolved Outdated

except smtplib.SMTPException

`except smtplib.SMTPException`
cherrypy.server.socket_port = SERVER_PORT cherrypy.server.socket_port = 8081
ENGINE = cherrypy.engine ENGINE = cherrypy.engine
cherrypy.tree.mount(ROOT, config={}) cherrypy.tree.mount(ROOT, config={})