Potentially useful code snippets
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

77 lines
2.3 KiB

#! /Library/Frameworks/Python.framework/Versions/3.6/bin/python3
import smtplib
from email.message import EmailMessage as Em
#https://stackoverflow.com/questions/16683732/python-smtplib-security
import requests
from bs4 import BeautifulSoup as bs
def emailer(usr, pwd, mailserv, port, msg):
server = smtplib.SMTP(mailserv, port)
server.ehlo()
server.starttls()
server.ehlo()
server.login(usr,pwd)
server.sendmail(msg['From'], msg['To'], msg.as_string())
server.close()
def tester(url):
try:
s=requests.Session()
checker=s.get(url)
if not checker.ok:
returncode = checker.status_code
#returns integer of server status code https://www.w3.org/Protocols/HTTP/HTRESP.html
print(returncode)
soup = bs(page.text, 'html.parser')
if returncode != 200 and str(returncode).startswith('2'):
content = '{} returned status which is not code 200 (OK): {}'.format(URL, returncode)
elif str(returncode).startswith('3'):
content = '{} returned a redirect status: {}/'.format(URL, returncode)
elif str(returncode).startswith('4'):
content = '{} returned a not found status: {}.'.format(URL, returncode)
elif str(returncode).startswith('5'):
content = '{} returned an internal error: {}.'.format(URL, returncode)
elif str(soup.title) != titletest:
content = '{} title string has changed. Possible hacking attempt.'.format(URL)
else:
content = 'OK'
return content
except:
content = 'Server {} appears to be down.'.format(URL)
return content
if __name__ == '__main__':
USER = 'user@example.invalid'
PASS = 'passwordabc123notreally'
MAILSERVER = 'smtp.example.invalid'
PORT = 587
URL='https://example.invalid'
message = Em()
message['Subject'] = '{} status warning'.format(URL)
message['From'] = user
message['To'] = 'recipient1@example.invalid, recipient2@example.invalid'
titletest='<title>Website Title</title>'
try:
content=tester(URL)
except:
content = 'Server {} appears to be down.'.format(URL)
#pass
message.set_content(content)
if content !='OK':
emailer(USER, PASS, MAILSERVER, PORT, message)