mirror of
https://github.com/jokob-sk/NetAlertX.git
synced 2025-12-07 09:36:05 -08:00
90 lines
3.8 KiB
Python
Executable File
90 lines
3.8 KiB
Python
Executable File
""" Pi.Alert module to send notification emails """
|
|
|
|
from email.mime.multipart import MIMEMultipart
|
|
from email.mime.text import MIMEText
|
|
import smtplib
|
|
|
|
|
|
import conf
|
|
from helper import hide_email, noti_struc
|
|
from logger import mylog, print_log
|
|
|
|
#-------------------------------------------------------------------------------
|
|
def check_config ():
|
|
if conf.SMTP_SERVER == '' or conf.REPORT_FROM == '' or conf.REPORT_TO == '':
|
|
mylog('none', ['[Email Check Config] Error: Email service not set up correctly. Check your pialert.conf SMTP_*, REPORT_FROM and REPORT_TO variables.'])
|
|
return False
|
|
else:
|
|
return True
|
|
|
|
#-------------------------------------------------------------------------------
|
|
def send (msg: noti_struc):
|
|
|
|
pText = msg.text
|
|
pHTML = msg.html
|
|
|
|
mylog('debug', '[Send Email] REPORT_TO: ' + hide_email(str(conf.REPORT_TO)) + ' SMTP_USER: ' + hide_email(str(conf.SMTP_USER)))
|
|
|
|
# Compose email
|
|
msg = MIMEMultipart('alternative')
|
|
msg['Subject'] = 'Pi.Alert Report'
|
|
msg['From'] = conf.REPORT_FROM
|
|
msg['To'] = conf.REPORT_TO
|
|
msg.attach (MIMEText (pText, 'plain'))
|
|
msg.attach (MIMEText (pHTML, 'html'))
|
|
|
|
failedAt = ''
|
|
|
|
failedAt = print_log ('SMTP try')
|
|
|
|
try:
|
|
# Send mail
|
|
failedAt = print_log('Trying to open connection to ' + str(conf.SMTP_SERVER) + ':' + str(conf.SMTP_PORT))
|
|
|
|
if conf.SMTP_FORCE_SSL:
|
|
failedAt = print_log('SMTP_FORCE_SSL == True so using .SMTP_SSL()')
|
|
if conf.SMTP_PORT == 0:
|
|
failedAt = print_log('SMTP_PORT == 0 so sending .SMTP_SSL(SMTP_SERVER)')
|
|
smtp_connection = smtplib.SMTP_SSL(conf.SMTP_SERVER)
|
|
else:
|
|
failedAt = print_log('SMTP_PORT == 0 so sending .SMTP_SSL(SMTP_SERVER, SMTP_PORT)')
|
|
smtp_connection = smtplib.SMTP_SSL(conf.SMTP_SERVER, conf.SMTP_PORT)
|
|
|
|
else:
|
|
failedAt = print_log('SMTP_FORCE_SSL == False so using .SMTP()')
|
|
if conf.SMTP_PORT == 0:
|
|
failedAt = print_log('SMTP_PORT == 0 so sending .SMTP(SMTP_SERVER)')
|
|
smtp_connection = smtplib.SMTP (conf.SMTP_SERVER)
|
|
else:
|
|
failedAt = print_log('SMTP_PORT == 0 so sending .SMTP(SMTP_SERVER, SMTP_PORT)')
|
|
smtp_connection = smtplib.SMTP (conf.SMTP_SERVER, conf.SMTP_PORT)
|
|
|
|
failedAt = print_log('Setting SMTP debug level')
|
|
|
|
# Log level set to debug of the communication between SMTP server and client
|
|
if conf.LOG_LEVEL == 'debug':
|
|
smtp_connection.set_debuglevel(1)
|
|
|
|
failedAt = print_log( 'Sending .ehlo()')
|
|
smtp_connection.ehlo()
|
|
|
|
if not conf.SMTP_SKIP_TLS:
|
|
failedAt = print_log('SMTP_SKIP_TLS == False so sending .starttls()')
|
|
smtp_connection.starttls()
|
|
failedAt = print_log('SMTP_SKIP_TLS == False so sending .ehlo()')
|
|
smtp_connection.ehlo()
|
|
if not conf.SMTP_SKIP_LOGIN:
|
|
failedAt = print_log('SMTP_SKIP_LOGIN == False so sending .login()')
|
|
smtp_connection.login (conf.SMTP_USER, conf.SMTP_PASS)
|
|
|
|
failedAt = print_log('Sending .sendmail()')
|
|
smtp_connection.sendmail (conf.REPORT_FROM, conf.REPORT_TO, msg.as_string())
|
|
smtp_connection.quit()
|
|
except smtplib.SMTPAuthenticationError as e:
|
|
mylog('none', [' ERROR: Failed at - ', failedAt])
|
|
mylog('none', [' ERROR: Couldn\'t connect to the SMTP server (SMTPAuthenticationError), skipping Email (enable LOG_LEVEL=debug for more logging)'])
|
|
except smtplib.SMTPServerDisconnected as e:
|
|
mylog('none', [' ERROR: Failed at - ', failedAt])
|
|
mylog('none', [' ERROR: Couldn\'t connect to the SMTP server (SMTPServerDisconnected), skipping Email (enable LOG_LEVEL=debug for more logging)'])
|
|
|
|
mylog('debug', '[Send Email] Last executed - ' + str(failedAt)) |