Skip to content

Commit

Permalink
Add from address in email notification. #926
Browse files Browse the repository at this point in the history
  • Loading branch information
theyosh committed Jul 22, 2024
1 parent b5d6162 commit 212a9d7
Show file tree
Hide file tree
Showing 13 changed files with 103 additions and 33 deletions.
5 changes: 5 additions & 0 deletions gui/locale/ca.json
Original file line number Diff line number Diff line change
Expand Up @@ -1628,6 +1628,11 @@
"label": "Vermell",
"placeholder": "Introduïu el pin GPIO vermell"
},
"sender": {
"help": "",
"label": "",
"placeholder": ""
},
"show_title": {
"help": "Mostra un nom i una versió com a títol a la pantalla.",
"label": "Títol de l'espectacle"
Expand Down
3 changes: 3 additions & 0 deletions gui/locale/de.json
Original file line number Diff line number Diff line change
Expand Up @@ -1628,6 +1628,9 @@
"label": "Rot",
"placeholder": "Gib den roten GPIO-Pin ein"
},
"sender": {
"label": ""
},
"show_title": {
"help": "Titel und Version auf dem Display anzeigen.",
"label": "Titel anzeigen"
Expand Down
7 changes: 6 additions & 1 deletion gui/locale/en_US.json
Original file line number Diff line number Diff line change
Expand Up @@ -1578,7 +1578,7 @@
"address": {
"help": "Enter an address.",
"invalid": "The entered address is not valid. It cannot be empty.",
"label": "Address",
"label": "Server address",
"placeholder": "Enter an address"
},
"api_token": {
Expand Down Expand Up @@ -1628,6 +1628,11 @@
"label": "Red",
"placeholder": "Enter red GPIO pin"
},
"sender": {
"help": "Enter the sender email.",
"label": "From address",
"placeholder": "Enter a from address"
},
"show_title": {
"help": "Show a name and version as title on the display.",
"label": "Show title"
Expand Down
5 changes: 5 additions & 0 deletions gui/locale/es.json
Original file line number Diff line number Diff line change
Expand Up @@ -1573,6 +1573,11 @@
"label": "Rojo",
"placeholder": "Ingrese el pin Red GPIO"
},
"sender": {
"help": "",
"label": "",
"placeholder": ""
},
"show_title": {
"help": "Muestre un nombre y versión como título en la pantalla.",
"label": "Mostrar título"
Expand Down
5 changes: 5 additions & 0 deletions gui/locale/fr_BE.json
Original file line number Diff line number Diff line change
Expand Up @@ -1628,6 +1628,11 @@
"label": "Mer",
"placeholder": "Date et heure"
},
"sender": {
"help": "",
"label": "",
"placeholder": ""
},
"show_title": {
"help": "Affichez un nom et une version comme titre sur l'écran.",
"label": "Montrer le titre"
Expand Down
5 changes: 5 additions & 0 deletions gui/locale/it_IT.json
Original file line number Diff line number Diff line change
Expand Up @@ -1628,6 +1628,11 @@
"label": "Mer",
"placeholder": "Data e ora"
},
"sender": {
"help": "",
"label": "",
"placeholder": ""
},
"show_title": {
"help": "Mostra il nome e la versione come titolo sul display.",
"label": "Mostra il titolo"
Expand Down
5 changes: 5 additions & 0 deletions gui/locale/ja.json
Original file line number Diff line number Diff line change
Expand Up @@ -1628,6 +1628,11 @@
"label": "",
"placeholder": "赤いgpioピンを入力します"
},
"sender": {
"help": "",
"label": "",
"placeholder": ""
},
"show_title": {
"help": "表示器にタイトルを表示します。.",
"label": "タイトルを表示"
Expand Down
5 changes: 5 additions & 0 deletions gui/locale/nb_NO.json
Original file line number Diff line number Diff line change
Expand Up @@ -1628,6 +1628,11 @@
"label": "Ons",
"placeholder": "Dato og tid"
},
"sender": {
"help": "",
"label": "",
"placeholder": ""
},
"show_title": {
"help": "Vis navn og versjon som tittel på skjermen.",
"label": "Vis tittel"
Expand Down
5 changes: 5 additions & 0 deletions gui/locale/nl_NL.json
Original file line number Diff line number Diff line change
Expand Up @@ -1628,6 +1628,11 @@
"label": "Rood",
"placeholder": "Voer de rode GPIO pin nummer in"
},
"sender": {
"help": "",
"label": "Afzender adres",
"placeholder": ""
},
"show_title": {
"help": "Toon een naam en versie als titel op het display.",
"label": "Titel weergeven"
Expand Down
5 changes: 5 additions & 0 deletions gui/locale/pl.json
Original file line number Diff line number Diff line change
Expand Up @@ -1628,6 +1628,11 @@
"label": "Czerwony",
"placeholder": "Wprowadź czerwony pin GPIO"
},
"sender": {
"help": "",
"label": "",
"placeholder": ""
},
"show_title": {
"help": "Pokaż nazwę i wersję jako tytuł na wyświetlaczu.",
"label": "Pokaż Tytuł"
Expand Down
5 changes: 5 additions & 0 deletions gui/locale/pt_BR.json
Original file line number Diff line number Diff line change
Expand Up @@ -1628,6 +1628,11 @@
"label": "Vermelho",
"placeholder": "Insira o pino GPIO para o vermelho"
},
"sender": {
"help": "",
"label": "",
"placeholder": ""
},
"show_title": {
"help": "Mostrar nome e versão como título no display.",
"label": "Exibir nome"
Expand Down
14 changes: 12 additions & 2 deletions gui/modals/ServiceModal.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -271,20 +271,30 @@
invalid="{$_('services.settings.setup.receiver.invalid', { default: 'The address cannot be empty.' })}"
/>
</div>
<div class="col">
<Field
type="text"
name="setup.sender"
required="{false}"
label="{$_('services.settings.setup.sender.label', { default: 'From address' })}"
placeholder="{$_('services.settings.setup.sender.placeholder', { default: 'Enter a from address' })}"
help="{$_('services.settings.setup.sender.help', { default: 'Enter the sender email.' })}"
/>
</div>
<div class="col">
<Field
type="text"
name="setup.address"
required="{true}"
label="{$_('services.settings.setup.address.email.label', { default: 'Server address' })}"
label="{$_('services.settings.setup.address.label', { default: 'Server address' })}"
placeholder="{$_('services.settings.setup.address.placeholder', { default: 'Enter an address' })}"
help="{$_('services.settings.setup.address.help', { default: 'Enter an address.' })}"
invalid="{$_('services.settings.setup.address.invalid', {
default: 'The entered address is not valid. It cannot be empty.',
})}"
/>
</div>
<div class="col-2">
<div class="col-1">
<Field
type="number"
name="setup.port"
Expand Down
67 changes: 37 additions & 30 deletions terrariumNotification.py
Original file line number Diff line number Diff line change
Expand Up @@ -530,10 +530,15 @@ def load_setup(self, setup_data):
self.setup = {
"address": setup_data.get("address"),
"port": int(setup_data.get("port", 25)),
"receiver": setup_data.get("receiver", "").split(","),
"username": setup_data.get("username"),
"password": setup_data.get("password"),
"sender" : setup_data.get("sender"),
"receiver": setup_data.get("receiver", "").split(","),
}

if self.setup['sender'] is None:
self.setup['sender'] = re.sub(r"(.*)@(.*)", "\\1+terrariumpi@\\2", self.setup['receiver'][0], 0, re.MULTILINE)

super().load_setup(setup_data)

def send_message(self, msg_type, subject, message, data=None, attachments=[]):
Expand All @@ -544,39 +549,41 @@ def send_message(self, msg_type, subject, message, data=None, attachments=[]):
htmlbody = '<html><head><title>{}</title></head><body><img src="cid:{}" alt="Profile image" title="Profile image" align="right" style="max-width:300px;border-radius:25%;">{}</body></html>'

for receiver in self.setup["receiver"]:
mail_tls_ssl = ["tls", "ssl", None]
while not len(mail_tls_ssl) == 0:
email_message = emails.Message(
headers={"X-Mailer": "TerrariumPI version {}".format(self.setup["version"])},
html=htmlbody.format(
subject, os.path.basename(self.setup["profile_image"]), message.replace("\n", "<br />")
),
text=message,
subject=subject,
mail_from=("TerrariumPI", re.sub(r"(.*)@(.*)", "\\1+terrariumpi@\\2", receiver, 0, re.MULTILINE)),
)
email_message = emails.Message(
headers={"X-Mailer": "TerrariumPI version {}".format(self.setup["version"])},
html=htmlbody.format(
subject, os.path.basename(self.setup["profile_image"]), message.replace("\n", "<br />")
),
text=message,
subject=subject,
mail_from=("TerrariumPI", self.setup['sender']),
)

profile_image_path = ("public/" if self.setup["profile_image"].startswith("img/") else "") + self.setup[
"profile_image"
]
profile_image_path = ("public/" if self.setup["profile_image"].startswith("img/") else "") + self.setup[
"profile_image"
]
try:
with open(profile_image_path, "rb") as fp:
profile_image = fp.read()
email_message.attach(
filename=os.path.basename(self.setup["profile_image"]),
content_disposition="inline",
data=profile_image,
)
except FileNotFoundError:
logger.warning(f"Profile image at location {profile_image_path} does not exists.")

for attachment in attachments:
try:
with open(profile_image_path, "rb") as fp:
profile_image = fp.read()
email_message.attach(
filename=os.path.basename(self.setup["profile_image"]),
content_disposition="inline",
data=profile_image,
)
with open(attachment, "rb") as fp:
attachment_data = fp.read()
email_message.attach(filename=os.path.basename(attachment), data=attachment_data)
except FileNotFoundError:
logger.warning(f"Profile image at location {profile_image_path} does not exists.")
pass

for attachment in attachments:
try:
with open(attachment, "rb") as fp:
attachment_data = fp.read()
email_message.attach(filename=os.path.basename(attachment), data=attachment_data)
except FileNotFoundError:
pass

mail_tls_ssl = ["tls", "ssl", None]
while not len(mail_tls_ssl) == 0:

smtp_settings = {"host": self.setup["address"], "port": self.setup["port"]}

Expand Down

0 comments on commit 212a9d7

Please sign in to comment.