Raspberry Pi: E-Mail bei Wechsel der externen IP-Adresse senden

Script prüft auf die aktuelle externe IP-Adresse und gleicht sie mit der gespeicherten ab. Bei Abweichung (=IP-Wechsel) wird eine E-Mail versendet.

Task 1: Datei IPfile.txt in /home/pi anlegen

Task 2: Folgenden Code in einer neuen Datei unter dem Namen IPmail.py im gleichen Pfad abspeichern:

import socket
import re
import smtplib

# Python3:
from urllib.request import urlopen

# Python2 (deprecated):
# from urllib2 import urlopen

# Define timeout (in seconds) if server is not available
timeout=10
socket.setdefaulttimeout(timeout)

# SETUP: Login credentials of mailbox, mailserver etc.
from_address = 'PLEASE_FILL_OUT'
to_address = 'PLEASE_FILL_OUT'
username = 'PLEASE_FILL_OUT'
password = 'PLEASE_FILL_OUT'
server = smtplib.SMTP('PLEASE_FILL_OUT')

# Define IP address service
url = 'http://ip.fnord.eu'
print ("Active IP address service:",url)

# Open up the URL, then read the contents and start UTF-8 decoding
request = urlopen(url).read().decode('utf-8')

# Extract the IP address only
myIP = re.findall("\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}", request)
myIP = str(myIP)
print ("The actual IP address is:",myIP)

def send_email(myIP):
    subject = 'Info: external IP changed'
    body_text = myIP + ' is your new IP address'
    message = '\r\n'.join(['To: %s' % to_address,
                       'From: %s' % from_address,
                       'Subject: %s' % subject,
                   '', body_text])
    
    # Actually send the email
    server.starttls()
    server.login(username,password)
    server.sendmail(from_address, to_address, message)
    server.quit()
    print ("The notification (E-Mail) was sent to recipient's address.")

# Open up IPfile.txt and extract the contents
with open ('/home/pi/IPfile.txt', 'rt') as IPfile:
    IPfile = IPfile.read() # Read the text file

# Check if IP address has changed
if IPfile == myIP:
    print ("Your IP address did not change.")
else:
    print ("You got a new IP address.")
    with open('/home/pi/IPfile.txt', 'wt') as IPfile:
        IPfile.write(myIP)
    print ("The new IP address was saved successfully.")
    send_email(myIP)

Task 3: Cronjob via SSH anlegen

 crontab -e

Am Ende folgende Zeile einfügen, damit das Script alle 2 Minuten ausgeführt wird und bei Verlassen speichern:

*/2 * * * * python3 /home/pi/IPmail.py

Dieses Python-Script basiert auf einem
YouTube-Tutorial von Alexander Baran-Harper und wurde für den persönlichen Gebrauch modifiziert / erweitert.