Aktuelles
Digital Eliteboard - Das Digitale Technik Forum

Registriere dich noch heute kostenlos, um Mitglied zu werden! Sobald du angemeldet bist, kannst du auf unserer Seite aktiv teilnehmen, indem du deine eigenen Themen und Beiträge erstellst und dich über deinen eigenen Posteingang mit anderen Mitgliedern unterhalten kannst! Zudem bekommst du Zutritt zu Bereichen, welche für Gäste verwehrt bleiben

Registriere dich noch heute kostenlos, um Mitglied zu werden! Sobald du angemeldet bist, kannst du auf unserer Seite aktiv teilnehmen, indem du deine eigenen Themen und Beiträge erstellst und dich über deinen eigenen Posteingang mit anderen Mitgliedern unterhalten kannst! Zudem bekommst du Zutritt zu Bereichen, welche für Gäste verwehrt bleiben

NO-IP Account-Renew Script 1.0

    Nobody is reading this thread right now.
Falls jemand mal testen möchte ob es auch mit python3 und mechanicalsoup geht würde ich mich über ein Feedback freuen.


Zuerst bitte aber
Code:
pip3 install mechanicalsoup

und dann das Script teste

Code:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
### *|--------------------------------|* ###
### *| NO-IP Account-Renew Script 1.0 |* ###
### *|   (c) by DarkStarXxX @ DEB     |* ###
### *|--------------------------------|* ###
# Modifiziert von MegaV0lt @ DEB
# Modifiziert von SLASH @ DEB
# Modifiziert von bl0w @DEB
VERSION=201208

# Wichtiger Hinweis: Externe Konfiguration
# Die Login-Daten für No-IP und eMail können aus einer externen Datei, welche in
# der Variable "CONFIG_FILE" definiert werden muss gelesen werden.
# Besonderheit: Die Datei im Dateisystem muss die Endung ".py" haben.
# Bitte dort die Daten eintragen (Im gleichen Verzeichnis wie das Skript!)
CONFIG_FILE = ""  # Ohne .py (Im gleichen Verzeichnis wie das Skript!)
# Kann abgeschaltet werden, in dem man CONFIG_FILE = "" setzt. In dem Fall die
# Variablen hier ausfüllen!
USERNAME = ""    # No-IP Benutzername
PASSWORD = ""    # No-IP Passwort
FROMADRESS = ""  # eMail-Sender
TOADRESS = ""    # eMail-Empfänger
SMTPSERVER = ""  # SMTP-Serveradresse ("" zum deaktivieren)
SMTPPORT = ""    # SMTP-Port (Z. B. 25)
SMTPPASS = ""    # Server verlangt Autentification ("" zum deaktivieren)

# Vorgaben
LOG_FILE = ""  # Kein Log, wenn nächste Zeile auskommentiert ist
#LOG_FILE = "/var/log/NOIP_renew.log"  # Dateiname wird auch für die eMail verwendet
MAIL_SUBJECT = "NO-IP Account Updater"  # Betreff der Status eMail
MAIL_BODY = "NO-IP Account Updater Service updated your NO-IP Account for another 30 days.\nPlease check the attached Logfile\n\n"  # Text in der eMail
HOST_URL = "https://www.noip.com/members/dns/"
RESULT_STR = []

import importlib
import mechanicalsoup
import time
import ssl
import re
if hasattr(ssl, '_create_unverified_context'):
  ssl._create_default_https_context = ssl._create_unverified_context

# Funktion: update_host - Für jeden Host "Modify" klicken
def update_host(str_host, br):
  global RESULT_STR
  br.select_form(nr=00)
  br.submit_selected()
  # Check if OK
  if LOG_FILE:
    ts = time.strftime("%d.%m.%Y %H:%M:%S")  # Zeitstempel für das Log (19.10.2016 12:51:30)
    f1 = open(LOG_FILE, 'a+')
  host_id = after(str_host, "?")             # Alle Zeichen nach dem ?
  if br.response().read().find("Update will be applied") >= 0:
    if LOG_FILE: print >> f1,ts,host_id + " [OK]"  # Ausgabe in das Log
    print(host_id + " [OK]")                 # Ausgabe auf der Konsole (und cron)
    RESULT_STR.append(host_id + " [OK]")     # Für die eMail
  else:
    if LOG_FILE: print >> f1,ts,host_id + " [FAILED]"
    print(host_id + " [FAILED]")
    RESULT_STR.append(host_id + " [FAILED]")
  return

#Funktion: after - Liefert Zeichenkette nach Zeichen a
def after(value, a):
  # Find and validate first part
  pos_a = value.rfind(a)
  if pos_a == -1: return value  # Nicht gefunden: Ganzer Wert zurück!
  # Returns chars after the found string.
  adjusted_pos_a = pos_a + len(a)
  if adjusted_pos_a >= len(value): return ""
  return value[adjusted_pos_a:]

# Browser options
br = mechanicalsoup.StatefulBrowser(
    soup_config={'features': 'lxml'},  # Use the lxml HTML parser
    raise_on_404=True,
    user_agent='Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.2228.0 Safari/537.36',
)

### Start
print("NO-IP Account-Renew Script #%s" % VERSION)
if CONFIG_FILE:
  print('Lade Konfiguration aus ' + CONFIG_FILE + '.py')
  myconf = importlib.import_module(CONFIG_FILE, package=None)
  USERNAME = myconf.USERNAME     ; PASSWORD = myconf.PASSWORD
  FROMADRESS = myconf.FROMADRESS ; TOADRESS = myconf.TOADRESS
  SMTPSERVER = myconf.SMTPSERVER ; SMTPPORT = myconf.SMTPPORT
  SMTPPASS = myconf.SMTPPASS

# Prüfen, ob USERNAME und PASSWORT konfiguriert sind
if not USERNAME:
  print('FEHLER: USERNAME ist nicht konfiguriert!') ; quit()

if not PASSWORD:
  print('FEHLER: PASSWORD ist nicht konfiguriert!') ; quit()

# Seite öffnen
br.open(HOST_URL)

# Login
br.select_form()
br["username"] = USERNAME
br["password"] = PASSWORD
br.submit_selected()


# Links in Array speichern
mylink = []  # Leeres Array
for link in br.links():
  if link.text == 'Modify': mylink += [link]

# Links klicken und Updaten
for link in mylink:
  target = link.attrs['href']
  br.open_relative(target)
  update_host(link.url, br)

####### SMTP Section ############
if not SMTPSERVER: quit()  # Nur wenn SMTPSERVER gesetzt ist

import smtplib
from email.MIMEMultipart import MIMEMultipart
from email.MIMEText import MIMEText
from email.MIMEBase import MIMEBase
from email import encoders

msg = MIMEMultipart()

msg['From'] = FROMADRESS ; msg['To'] = TOADRESS
msg['Subject'] = MAIL_SUBJECT

body = MAIL_BODY
for var in RESULT_STR:
  body = str(body) + str(var) + "\n"

msg.attach(MIMEText(body, 'plain'))

if LOG_FILE:
  filename = after(LOG_FILE, "/")  # Dateiname ohne Pfad
  attachment = open(LOG_FILE, "rb")
  part = MIMEBase('application', 'octet-stream')
  part.set_payload((attachment).read())
  encoders.encode_base64(part)
  part.add_header('Content-Disposition', "attachment; filename= %s" % filename)
  msg.attach(part)

# Example: Server Address and TCP Port - Exmaple: '192.168.1.1' , 25
server = smtplib.SMTP(SMTPSERVER, SMTPPORT)
server.starttls()

# Server verlangt Autentification (Nur wenn SMTPPASS gesetzt ist)
if SMTPPASS: server.login(FROMADRESS, SMTPPASS)

text = msg.as_string()
server.sendmail(FROMADRESS, TOADRESS, text)
server.quit()
 
Ein User hatte das problem das er mechanize nicht so ohne weiteres installieren unter python3 konnte.
Daher der Versuch mechanize zu ersetzen.
Vorteil/Grund hat sich aber wohl erledigt weil der User es mit python2.7 hinbekommen hat
 
Ich kann es leider nicht testen, deshalb die Frage/Bitte ob es jemand der python3 im Einsatz und einen NO-IP Account hat, es testen kann.
Aber wie gesagt wenn es bei allen geht ist die Anpassung obsolet ;)
 
Wollte es mal testen. Geht leider nicht:
Code:
root auf MCP-Server am 08.12.2020 15:13
[/usr/local/sbin] # python ./NOIP-Account-Renew
NO-IP Account-Renew Script #201208
Lade Konfiguration aus NOIP_Account_Renew.py
Traceback (most recent call last):
  File "./NOIP-Account-Renew", line 117, in <module>
    update_host(link.url, br)
  File "./NOIP-Account-Renew", line 53, in update_host
    host_id = after(str_host, "?")             # Alle Zeichen nach dem ?
  File "./NOIP-Account-Renew", line 67, in after
    pos_a = value.rfind(a)
AttributeError: 'NoneType' object has no attribute 'rfind'
 
Danke für den Test.
Okay also an dem Teil habe ich gar nichts geändert, das ist im original Script genauso :oops:

Strange...
 
Kann mich leider nur anschließen. Wäre klasse wenn man mir helfen könnte :)

python noip-refresh.py
NO-IP Account-Renew Script #201208
Traceback (most recent call last):
File "/home/alex/noip-refresh.py", line 117, in <module>
update_host(link.url, br)
File "/home/alex/noip-refresh.py", line 53, in update_host
host_id = after(str_host, "?") # Alle Zeichen nach dem ?
File "/home/alex/noip-refresh.py", line 67, in after
pos_a = value.rfind(a)
AttributeError: 'NoneType' object has no attribute 'rfind'
 
Zuletzt bearbeitet von einem Moderator:
Habe ja keinen Plan von Python. Habe es aber mit viel Suchen und ausprobieren jetzt hin bekommen. Das Skript verwendet nun den 'mechanicalsoup.StatefulBrowser()'. Außerdem wird nun Python Version 3 benötigt.
Python:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
### *|--------------------------------|* ###
### *| NO-IP Account-Renew Script 1.0 |* ###
### *|   (c) by DarkStarXxX @ DEB     |* ###
### *|--------------------------------|* ###
# Modifiziert von MegaV0lt @ DEB
# - Benötigt Python 3
# - Umstellung auf 'mechanicalsoup.StatefulBrowser()'
# Modifiziert von SLASH @ DEB
# Modifiziert von bl0w @DEB
VERSION=210209

# Wichtiger Hinweis: Externe Konfiguration
# Die Login-Daten für No-IP und eMail können aus einer externen Datei, welche in
# der Variable "CONFIG_FILE" definiert werden muss gelesen werden.
# Besonderheit: Die Datei im Dateisystem muss die Endung ".py" haben.
# Bitte dort die Daten eintragen (Im gleichen Verzeichnis wie das Skript!)
CONFIG_FILE = 'NOIP_Account_Renew'  # Ohne .py (Im gleichen Verzeichnis wie das Skript!)
#CONFIG_FILE = ''  # Kann abgeschaltet werden, in dem man CONFIG_FILE = '' setzt.

# In dem Fall die Variablen hier ausfüllen!
USERNAME = ''    # No-IP Benutzername
PASSWORD = ''    # No-IP Passwort
FROMADRESS = ''  # eMail-Sender
TOADRESS = ''    # eMail-Empfänger
SMTPSERVER = ''  # SMTP-Serveradresse ("" zum deaktivieren)
SMTPPORT = ''    # SMTP-Port (Z. B. 25)
SMTPPASS = ''    # Server verlangt Autentification ("" zum deaktivieren)

# Vorgaben
LOG_FILE = ''  # Kein Log, wenn nächste Zeile auskommentiert ist
#LOG_FILE = '/var/log/NOIP_renew.log'  # Dateiname wird auch für die eMail verwendet
MAIL_SUBJECT = 'NO-IP Account Updater'  # Betreff der Status eMail
MAIL_BODY = 'NO-IP Account Updater Service updated your NO-IP Account for another 30 days.\nPlease check the attached Logfile\n\n'  # Text in der eMail
HOST_URL = 'https://www.noip.com/members/dns/'
RESULT_STR = []

import platform
import importlib
import mechanicalsoup
import time
import ssl
import re
if hasattr(ssl, '_create_unverified_context'):
  ssl._create_default_https_context = ssl._create_unverified_context

# Funktion: update_host() - Für jeden Host "Modify" klicken
def update_host(str_host, browser):
  global RESULT_STR
  browser.select_form(nr=00)
  browser.submit_selected()
  if LOG_FILE:
    ts = time.strftime("%d.%m.%Y %H:%M:%S")  # Zeitstempel für das Log (19.10.2016 12:51:30)
    f1 = open(LOG_FILE, 'a+')
  host_id = after(str_host, '?')             # Alle Zeichen nach dem ?
  response = browser.get_current_page()
  if response.find('Update will be applied') == 'None' :  # Prüfen, ob es geklappt hat
    if LOG_FILE: print >> f1,ts,host_id + ' [FAILED]'
    print(host_id + ' [FAILED]')
    RESULT_STR.append(host_id + ' [FAILED]')
  else:
    if LOG_FILE: print >> f1,ts,host_id + ' [OK]'  # Ausgabe in das Log
    print(host_id + ' [OK]')                 # Ausgabe auf der Konsole (und cron)
    RESULT_STR.append(host_id + ' [OK]')     # Für die eMail
  return

# Funktion: after() - Liefert Zeichenkette nach Zeichen a
def after(value, a):
  pos_a = value.rfind(a)           # Position des gesuchten Zeichens
  if pos_a == -1: return value     # Nicht gefunden: Ganzer Wert zurück!
  adjusted_pos_a = pos_a + len(a)  # Alles nach dem gefundenen Zeichen
  if adjusted_pos_a >= len(value): return ''
  return value[adjusted_pos_a:]

# Browser Optionen
browser = mechanicalsoup.StatefulBrowser(
  soup_config={'features': 'lxml'},  # Use the lxml HTML parser
  raise_on_404=True,
  user_agent='Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.2228.0 Safari/537.36',
)

### Start
print('NO-IP Account-Renew Script #%s' % VERSION)
print('Python: %s' % platform.python_version())
if CONFIG_FILE:
  print('Lade Konfiguration aus ' + CONFIG_FILE + '.py')
  myconf = importlib.import_module(CONFIG_FILE, package=None)
  USERNAME = myconf.USERNAME     ; PASSWORD = myconf.PASSWORD
  FROMADRESS = myconf.FROMADRESS ; TOADRESS = myconf.TOADRESS
  SMTPSERVER = myconf.SMTPSERVER ; SMTPPORT = myconf.SMTPPORT
  SMTPPASS = myconf.SMTPPASS

# Prüfen, ob USERNAME und PASSWORT konfiguriert sind
if not USERNAME:
  print('FEHLER: USERNAME ist nicht konfiguriert!') ; quit()

if not PASSWORD:
  print('FEHLER: PASSWORD ist nicht konfiguriert!') ; quit()

# Seite öffnen
browser.open(HOST_URL)

# Login
browser.select_form()
browser['username'] = USERNAME
browser['password'] = PASSWORD
browser.submit_selected()

# Links in Array speichern
mylink = []  # Leeres Array
for link in browser.links():
  if link.text == 'Modify': mylink += [link]

# Links klicken und Updaten
for link in mylink:
  target = link.attrs['href']
  browser.open_relative(target)  # Zur Seeite gehen
  update_host(target, browser)   # Host updaten


####### SMTP Section ############
if not SMTPSERVER: quit()  # Nur wenn SMTPSERVER gesetzt ist

import smtplib
from email.MIMEMultipart import MIMEMultipart
from email.MIMEText import MIMEText
from email.MIMEBase import MIMEBase
from email import encoders

msg = MIMEMultipart()

msg['From'] = FROMADRESS ; msg['To'] = TOADRESS
msg['Subject'] = MAIL_SUBJECT

body = MAIL_BODY
for var in RESULT_STR:
  body = str(body) + str(var) + '\n'

msg.attach(MIMEText(body, 'plain'))

if LOG_FILE:
  filename = after(LOG_FILE, '/')  # Dateiname ohne Pfad
  attachment = open(LOG_FILE, 'rb')
  part = MIMEBase('application', 'octet-stream')
  part.set_payload((attachment).read())
  encoders.encode_base64(part)
  part.add_header('Content-Disposition', 'attachment; filename= %s' % filename)
  msg.attach(part)

# Example: Server Address and TCP Port - Exmaple: '192.168.1.1' , 25
server = smtplib.SMTP(SMTPSERVER, SMTPPORT)
server.starttls()

# Server verlangt Autentification (Nur wenn SMTPPASS gesetzt ist)
if SMTPPASS: server.login(FROMADRESS, SMTPPASS)

text = msg.as_string()
server.sendmail(FROMADRESS, TOADRESS, text)
server.quit()
Hier die Ausgabe wenn alles klappt:
Code:
root auf MCP-Server am 09.02.2021 08:02
[/usr/local/sbin] # python ./NOIP-Account-Renew_new.py
NO-IP Account-Renew Script #210209
Python: 3.7.3
Lade Konfiguration aus NOIP_Account_Renew.py
host_id=***90 [OK]
host_id=***97 [OK]
host_id=***07 [OK]
@bl0w @Alandrias Bitte testen.
 
Zuletzt bearbeitet:
Erstmal danke für die Hilfe :)
Leider funktioniert es nicht
Code:
NO-IP Account-Renew Script #210209
Python: 3.9.1
Lade Konfiguration aus NOIP_Account_Renew.py
Traceback (most recent call last):
  File "/home/alex/.sys/noip-refresh.py", line 88, in <module>
    myconf = importlib.import_module(CONFIG_FILE, package=None)
  File "/usr/lib/python3.9/importlib/__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
  File "<frozen importlib._bootstrap>", line 984, in _find_and_load_unlocked
ModuleNotFoundError: No module named 'NOIP_Account_Renew'

Mechanicalsoup ist installiert. Ich versteh zu wenig von Python um den Fehler zu verstehen :(
 
Hast Du die Datei "NOIP_Account_Renew" im gleichen Verzeichnis?
Was steht in CONFIG_FILE =
 
Zuletzt bearbeitet:
Ja hab ich

AUs dem Script
Code:
CONFIG_FILE = 'NOIP_Account_Renew'  # Ohne .py (Im gleichen Verzeichnis wie das>
#CONFIG_FILE = ''  # Kann abgeschaltet werden, in dem man CONFIG_FILE = '' setz>


# In dem Fall die Variablen hier ausfüllen!
USERNAME = ''    # No-IP Benutzername
PASSWORD = ''    # No-IP Passwort
FROMADRESS = ''  # eMail-Sender
TOADRESS = ''    # eMail-Empfänger
SMTPSERVER = ''  # SMTP-Serveradresse ("" zum deaktivieren)
SMTPPORT = ''    # SMTP-Port (Z. B. 25)
SMTPPASS = ''    # Server verlangt Autentification ("" zum deaktivieren)

und die Config-File
Code:
USERNAME = 'MAIL-Adresse'    # No-IP Benutzername
PASSWORD = 'PASSWORT'    # No-IP Passwort
 
Der Name der Datei stimmt auch ?
> NOIP_Account_Renew.py <-- .py !

Hab un einen Test eingebaut, der prüft, ob die Datei existiert:
Python:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
### *|--------------------------------|* ###
### *| NO-IP Account-Renew Script 1.0 |* ###
### *|   (c) by DarkStarXxX @ DEB     |* ###
### *|--------------------------------|* ###
# Modifiziert von MegaV0lt @ DEB
# - Benötigt Python 3
# - Umstellung auf 'mechanicalsoup.StatefulBrowser()'
# - Prüfung, ob Konfig-Datei existiert
# Modifiziert von SLASH @ DEB
# Modifiziert von bl0w @DEB
VERSION=210209

# Wichtiger Hinweis: Externe Konfiguration
# Die Login-Daten für No-IP und eMail können aus einer externen Datei, welche in
# der Variable "CONFIG_FILE" definiert werden muss gelesen werden.
# Besonderheit: Die Datei im Dateisystem muss die Endung ".py" haben.
# Bitte dort die Daten eintragen (Im gleichen Verzeichnis wie das Skript!)
CONFIG_FILE = 'NOIP_Account_Renew'  # Ohne .py (Im gleichen Verzeichnis wie das Skript!)
#CONFIG_FILE = ''  # Kann abgeschaltet werden, in dem man CONFIG_FILE = '' setzt.

# In dem Fall die Variablen hier ausfüllen!
USERNAME = ''    # No-IP Benutzername
PASSWORD = ''    # No-IP Passwort
FROMADRESS = ''  # eMail-Sender
TOADRESS = ''    # eMail-Empfänger
SMTPSERVER = ''  # SMTP-Serveradresse ("" zum deaktivieren)
SMTPPORT = ''    # SMTP-Port (Z. B. 25)
SMTPPASS = ''    # Server verlangt Autentification ("" zum deaktivieren)

# Vorgaben
LOG_FILE = ''  # Kein Log, wenn nächste Zeile auskommentiert ist
#LOG_FILE = '/var/log/NOIP_renew.log'  # Dateiname wird auch für die eMail verwendet
MAIL_SUBJECT = 'NO-IP Account Updater'  # Betreff der Status eMail
MAIL_BODY = 'NO-IP Account Updater Service updated your NO-IP Account for another 30 days.\nPlease check the attached Logfile\n\n'  # Text in der eMail
HOST_URL = 'https://www.noip.com/members/dns/'
RESULT_STR = []

import platform
import importlib
import mechanicalsoup
import time
import ssl
import re
if hasattr(ssl, '_create_unverified_context'):
  ssl._create_default_https_context = ssl._create_unverified_context

# Funktion: update_host() - Für jeden Host "Modify" klicken
def update_host(str_host, browser):
  global RESULT_STR
  browser.select_form(nr=00)
  browser.submit_selected()
  if LOG_FILE:
    ts = time.strftime("%d.%m.%Y %H:%M:%S")  # Zeitstempel für das Log (19.10.2016 12:51:30)
    f1 = open(LOG_FILE, 'a+')
  host_id = after(str_host, '?')             # Alle Zeichen nach dem ?
  response = browser.get_current_page()
  if response.find('Update will be applied') == 'None' :  # Prüfen, ob es geklappt hat
    if LOG_FILE: print >> f1,ts,host_id + ' [FAILED]'
    print(host_id + ' [FAILED]')
    RESULT_STR.append(host_id + ' [FAILED]')
  else:
    if LOG_FILE: print >> f1,ts,host_id + ' [OK]'  # Ausgabe in das Log
    print(host_id + ' [OK]')                 # Ausgabe auf der Konsole (und cron)
    RESULT_STR.append(host_id + ' [OK]')     # Für die eMail
  return

# Funktion: after() - Liefert Zeichenkette nach Zeichen a
def after(value, a):
  pos_a = value.rfind(a)           # Position des gesuchten Zeichens
  if pos_a == -1: return value     # Nicht gefunden: Ganzer Wert zurück!
  adjusted_pos_a = pos_a + len(a)  # Alles nach dem gefundenen Zeichen
  if adjusted_pos_a >= len(value): return ''
  return value[adjusted_pos_a:]

# Browser Optionen
browser = mechanicalsoup.StatefulBrowser(
  soup_config={'features': 'lxml'},  # Use the lxml HTML parser
  raise_on_404=True,
  user_agent='Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.2228.0 Safari/537.36',
)

### Start
print(f'NO-IP Account-Renew Script #{VERSION} (Python: {platform.python_version()})')
if CONFIG_FILE:
  from pathlib import Path
  my_conf = Path(CONFIG_FILE + '.py')
  if my_conf.is_file():
    print('Lade Konfiguration aus:', my_conf)
    myconf = importlib.import_module(CONFIG_FILE, package=None)
    USERNAME = myconf.USERNAME     ; PASSWORD = myconf.PASSWORD
    FROMADRESS = myconf.FROMADRESS ; TOADRESS = myconf.TOADRESS
    SMTPSERVER = myconf.SMTPSERVER ; SMTPPORT = myconf.SMTPPORT
    SMTPPASS = myconf.SMTPPASS
  else: print('FEHLER: Konfiguration %s nicht gefunden!' % my_conf) ; quit()

# Prüfen, ob USERNAME und PASSWORT konfiguriert sind
if not USERNAME: print('FEHLER: USERNAME ist nicht konfiguriert!') ; quit()
if not PASSWORD: print('FEHLER: PASSWORD ist nicht konfiguriert!') ; quit()

# Seite öffnen
browser.open(HOST_URL)

# Login
browser.select_form()
browser['username'] = USERNAME
browser['password'] = PASSWORD
browser.submit_selected()

# Links in Array speichern
mylink = []  # Leeres Array
for link in browser.links():
  if link.text == 'Modify': mylink += [link]

# Links klicken und Updaten
for link in mylink:
  target = link.attrs['href']
  browser.open_relative(target)  # Zur Seeite gehen
  update_host(target, browser)   # Host updaten


####### SMTP Section ############
if not SMTPSERVER: quit()  # Nur wenn SMTPSERVER gesetzt ist

import smtplib
from email.MIMEMultipart import MIMEMultipart
from email.MIMEText import MIMEText
from email.MIMEBase import MIMEBase
from email import encoders

msg = MIMEMultipart()

msg['From'] = FROMADRESS ; msg['To'] = TOADRESS
msg['Subject'] = MAIL_SUBJECT

body = MAIL_BODY
for var in RESULT_STR:
  body = str(body) + str(var) + '\n'

msg.attach(MIMEText(body, 'plain'))

if LOG_FILE:
  filename = after(LOG_FILE, '/')  # Dateiname ohne Pfad
  attachment = open(LOG_FILE, 'rb')
  part = MIMEBase('application', 'octet-stream')
  part.set_payload((attachment).read())
  encoders.encode_base64(part)
  part.add_header('Content-Disposition', 'attachment; filename= %s' % filename)
  msg.attach(part)

# Example: Server Address and TCP Port - Exmaple: '192.168.1.1' , 25
server = smtplib.SMTP(SMTPSERVER, SMTPPORT)
server.starttls()

# Server verlangt Autentification (Nur wenn SMTPPASS gesetzt ist)
if SMTPPASS: server.login(FROMADRESS, SMTPPASS)

text = msg.as_string()
server.sendmail(FROMADRESS, TOADRESS, text)
server.quit()
 
Hab die Datei nun umbenannt.
Die Daten darin sind korrekt.
Leider funktioniert es nicht. Die Meldung ist die gleiche

okay, richtig lesen hilft - sry :D

Code:
NO-IP Account-Renew Script #210209 (Python: 3.9.1)
Lade Konfiguration aus: NOIP_Account_Renew.py
Traceback (most recent call last):
  File "/home/alex/.sys/noip-refresh.py", line 93, in <module>
    FROMADRESS = myconf.FROMADRESS ; TOADRESS = myconf.TOADRESS
AttributeError: module 'NOIP_Account_Renew' has no attribute 'FROMADRESS'

Okay, nachdem ich nun die NOIP_Account_Renew.py noch um die Mail-Adressen erweitert habe, läuft das Script ohne Fehlermeldung durch.
Die von Dir beschriebene Ausgabe:
Code:
root auf MCP-Server am 09.02.2021 08:02
[/usr/local/sbin] # python ./NOIP-Account-Renew_new.py
NO-IP Account-Renew Script #210209
Python: 3.7.3
Lade Konfiguration aus NOIP_Account_Renew.py
host_id=***90 [OK]
host_id=***97 [OK]
host_id=***07 [OK]

erhalte ich nicht. Er springt einfach in die Konsole zurück und wartet auf Eingabe. Ist das richtig so?
 
Zurück
Oben