I'm looking to have an email sent out each time my hosted feature service (on AGOL) has my status field altered. This status field is set to "not complete" by default, and as its completed it changes to "complete". When this happens I want an email sent out.
I've been playing around with webhooks and services likes Microsoft Flow and Integromat but not having too much success.
Any ideas?
Solved! Go to Solution.
Ok I got it after some searching. GMAIL is much different.
Do this
change this line #server = smtplib.SMTP(emailSMTP)
to server = smtplib.SMTP_SSL(emailSMTP,465)
Remove the port number from the top so change emailSMTP = "smtp.gmail.com:587"
to just emailSMTP = "smtp.gmail.com"
Change this line #server.starttls()
to server.ehlo()
Add your username and pass to the lines
smtpusername = "you@gmail.com"
smtppassword = "pass"
Oh and the big one is go to https://myaccount.google.com/lesssecureapps?pli=1 then enable access!!
It now works.
Hey Joe,
Take a look at the following document:
You didn't attach the error you are receiving. Can you also post your updated code?
Error picture attached to my previous reply.
Updated code (with a few omissions):
import urllib2, json, urllib, datetime, time, smtplib
from datetime import timedelta
# Variables
username = 'OMIT' # AGOL Username
password = 'OMIT' # AGOL Password
URL = 'https://services8.arcgis.com/XWI9YRo0bQGkCetU/arcgis/rest/services/service_OMIT6b3cc03bba146dc6d/Fea.....' # Feature Service URL
uniqueID = 'OBJECTID' # i.e. OBJECTID
dateField = 'created_date' # Date field to query
hoursValue = 1 # Number of hours to check when a feature was added
fromEmail = 'OMIT' # Email sender
toEmail = 'OMIT' # Email receiver
smtpServer = 'OMIT' # SMPT Server Name
portNumber = 25 # SMTP Server port
# Create empty list for uniqueIDs
oidList = []
# Generate AGOL token
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 = ''
# Query service and check if created_date time is within the last hour
params = {'f': 'pjson', 'where': "1=1", 'outfields' : '{0}, {1}'.format(uniqueID, dateField), '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(oidList)
# Email Info
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)
# If new features exist, send email
if len(oidList) > 0:
smtpObj = smtplib.SMTP(host=smtpServer, port=portNumber)
smtpObj.sendmail(FROM, TO, message)
print "Successfully sent email"
smtpObj.quit()
Can you share the service to a Group and invite my user account (jskinner_CountySandbox)? I can take a look.
Sent invite
Try changing your fields to the following:
uniqueID = 'objectid'
dateField = 'EditDate'
No luck Jake
I added a feature and then ran the following:
import urllib2, json, urllib, datetime, time, smtplib
from datetime import timedelta
# Variables
username = 'test' # AGOL Username
password = 'test' # AGOL Password
URL = 'https://services8.arcgis.com/XWI9YRo0bQGkCetU/arcgis/rest/services/service_e543c2e23b6d40a6b3cc03bba...' # Feature Service URL
uniqueID = 'objectid' # i.e. OBJECTID
dateField = 'EditDate' # Date field to query
hoursValue = 1 # Number of hours to check when a feature was added
fromEmail = 'test@esri.com' # Email sender
toEmail = 'test@esri.com' # Email receiver
smtpServer = 'smtp.test.com' # SMPT Server Name
portNumber = 25 # SMTP Server port
# Create empty list for uniqueIDs
oidList = []
# Generate AGOL token
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 = ''
# Query service and check if created_date time is within the last hour
params = {'f': 'pjson', 'where': "1=1", 'outfields' : '{0}, {1}'.format(uniqueID, dateField), '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(oidList)
# Email Info
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)
# If new features exist, send email
if len(oidList) > 0:
smtpObj = smtplib.SMTP(host=smtpServer, port=portNumber)
smtpObj.sendmail(FROM, TO, message)
print "Successfully sent email"
smtpObj.quit()
I then received an e-mail:
Features with objectids [1034] were added.