HOW TO

Generieren einer E-Mail zu einer geplanten Aktualisierung mithilfe von Python, wenn einem gehosteten Feature-Service ein Feature hinzugefügt wird

Last Published: October 1, 2025

Zusammenfassung

Einer öffentlichen Web-App kann ein gehosteter Feature-Service hinzugefügt werden. Dadurch erhalten Benutzer die Möglichkeit zur Bearbeitung. Manche Besitzer möchten Benachrichtigungen zu geplanten Aktualisierungen erhalten, wenn dem gehosteten Feature-Service gehostete Features hinzugefügt werden. Es ist möglich, ein Python-Skript zu erstellen, mit dem geprüft wird, ob in einem bestimmten Zeitraum am gehosteten Feature-Service Änderungen vorgenommen wurden, und mit dem an den Besitzer eine E-Mail gesendet wird. Eine E-Mail kann automatisch versendet werden, wobei das smptlib-Modul verwendet wird, um auf das E-Mail-Protokoll SMTP eines gewünschten Webmail-Anbieters wie Gmail oder Hotmail zuzugreifen.

Vorgehensweise

Im Folgenden sind die Schritte zum automatischen Generieren und Versenden einer E-Mail beschrieben, die neu erstellte ObjectIDs enthält, wenn einem gehosteten Feature-Service neue Features hinzugefügt werden:
  1. Importieren Sie die erforderlichen Bibliotheken.
import urllib2, json, urllib, datetime, time, smtplib 
from datetime import timedelta
  1. Erstellen Sie einen Array-Parameter zum Speichern der ObjectID-Daten im ObjectID-Feld, und geben Sie die erforderlichen Variablen wie die URL und das eindeutige ID-Feld an.
username = 'Username'  # ArcGIS Online Username
password = 'password'  # ArcGIS Online Password

URL = 'https://services.arcgis.com/[Folder]/arcgis/rest/services/[Feature Data]/FeatureServer/2/query'       # Feature Service URL
uniqueID = 'OBJECTID'   # Desired field to check 
dateField = 'Date'      # Date field to query
hoursValue = 1          # Number of hours to check when a feature was added

fromEmail = 'Sample@email.com' # Sender's Email
toEmail = 'Sample@email.com'   # Receiver's Email 
#smtpServer = 'smtp.gis.com'   # SMPT Server Name
#portNumber = 25               # SMTP Server port

# Create empty list for uniqueIDs
oidList = []
  1. Generieren Sie das ArcGIS Online-Token für den Zugriff auf die angegebene URL.
try:
print('Generating Token')
tokenURL = 'https://www.arcgis.com/sharing/rest/generateToken'
params = {'f': 'pjson', 'username': username, 'password': password, 'referer': 'http://www.arcgis.com'}
req = urllib2.Request(tokenURL, urllib.urlencode(params))
response = urllib2.urlopen(req)
data = json.load(response)
token = data['token']
except:
token = ''
  1. Erstellen Sie eine Anforderung zum Öffnen des durch eine URL angegebenen Netzwerkobjekts zum Lesen.
params = {'f': 'pjson', 'where': "1=1", 'outfields' : '*' , 'returnGeometry' : 'false', 'token' : token}
req = urllib2.Request(URL, urllib.urlencode(params))
response = urllib2.urlopen(req)
data = json.load(response)
  1. Erstellen Sie eine Schleifenanweisung, um ggf. nach Änderungen in einem bestimmten Zeitraum zu suchen.
for feat in data['features']:
createDate = feat['attributes'][dateField]
createDate = int(str(createDate)[0:-3])
t = datetime.datetime.now() - timedelta(hours=hoursValue)
t = time.mktime(t.timetuple())
if createDate > t:
oidList.append(feat['attributes'][uniqueID])
print("Edited feature")
  1. Erstellen Sie eine E-Mail-Vorlage, die die E-Mail-Adressen des Absenders und des Empfängers enthält.
FROM = 'sender@hotmail.com'  
TO = ['receiver@yahoo.com']  
SUBJECT = 'New Feature Added'  
TEXT = "Features with OBJECTIDs " + str(oidList) + " were added."
  1. Rufen Sie die in Schritt 6 angegebenen Parameter als Zeichenfolgendaten ab.
message = """\ 
From: %s 
To: %s 
Subject: %s 

%s 
""" % (FROM, ", ".join(TO), SUBJECT, TEXT)
emailPassword = 'Password' 
  1. Rufen Sie mit dem smtplib-Modul das SMTP-Protokoll des E-Mail-Kontos ab.
Hinweis:
Einige E-Mail-Anbieter wie Gmail verlangen eine Anmeldung über einen sicheren Zugriff von Apps. Um eine Verbindung mit dem SMTP-Server herzustellen, ist jedoch ein weniger sicherer App-Zugriff erforderlich. 
if len(oidList) > 0:
    server = smtplib.SMTP_SSL('smtp.gmail.com')
    server.connect('smtp.gmail.com')
    server.ehlo()
    server.login(FROM, gmailPWD)
    server.sendmail(FROM, TO, message)
    print "Successfully sent email"
    server.close()
else:
 print "No new data found."

Das folgende Skript enthält den endgültigen Code:

import urllib2, json, urllib, datetime, time, smtplib
from datetime import timedelta

# Variables
username = 'Username'    
password = 'password'    

URL = 'https://services.arcgis.com/Wl7Y1m92PbjtJs5n/arcgis/rest/services/tem_data/FeatureServer/2/query'       # Feature Service URL
uniqueID = 'OBJECTID'          
dateField = 'EditDate'      
hoursValue = 1              

fromEmail = 'test@gmail.com' 
toEmail = 'test@esri.com'   

oidList = []

try:
    print('Generating Token')
    tokenURL = 'https://www.arcgis.com/sharing/rest/generateToken'
    params = {'f': 'pjson', 'username': username, 'password': password, 'referer': 'http://www.arcgis.com'}
    req = urllib2.Request(tokenURL, urllib.urlencode(params))
    response = urllib2.urlopen(req)
    data = json.load(response)
    token = data['token']
except:
    token = ''

params = {'f': 'pjson', 'where': "1=1", 'outfields' : '*' , 'returnGeometry' : 'false', 'token' : token}
req = urllib2.Request(URL, urllib.urlencode(params))
response = urllib2.urlopen(req)
data = json.load(response)
for feat in data['features']:
    createDate = feat['attributes'][dateField]
    createDate = int(str(createDate)[0:-3])
    t = datetime.datetime.now() - timedelta(hours=hoursValue)
    t = time.mktime(t.timetuple())
    if createDate > t:
        oidList.append(feat['attributes'][uniqueID])
        print("Edited feature")

print(oidList)

FROM = fromEmail
TO = [toEmail]
SUBJECT = 'New Features Added'
TEXT = "Features with {0}s {1} were added.".format(uniqueID, oidList)

message = """\
From: %s
To: %s
Subject: %s

%s
""" % (FROM, ", ".join(TO), SUBJECT, TEXT)
gmailPWD = 'password'

if len(oidList) > 0:
    server = smtplib.SMTP_SSL('smtp.gmail.com')
    server.connect('smtp.gmail.com')
    server.ehlo()
    server.login(FROM, gmailPWD)
    server.sendmail(FROM, TO, message)
    print "Successfully sent email"
    server.close()
else:
	print "No new data found."

Artikel-ID: 000019310

Holen Sie sich Unterstützung mit KI

Lösen Sie Ihr Problem schnell mit dem Esri Support AI Chatbot.

Beginnen Sie jetzt mit dem Chatten

Zugehörige Informationen

Weitere Informationen zu diesem Thema erkunden

Unterstützung durch ArcGIS-Experten anfordern

An den technischen Support wenden

Beginnen Sie jetzt mit dem Chatten

Zu Download-Optionen wechseln