Python Emailing Upon Error

444
1
09-18-2017 04:44 PM
AndreaRegalado1
New Contributor
# ---------------------------------------------------------------------------
#  Script:         Creating an Service Definition File and Overwritting Existing Feature Service on ArcGIS Online
#  Description:    This script does the following:
#                  (1) Sets up the variables
#                  (2) Creates an SD File
#                  (3) Overwrites Existing Feature Service
#
#  Date:           9/12/2017
#   
# ---------------------------------------------------------------------------
import arcpy
import os, sys, string, time
from arcgis.gis import GIS

# Set the date.
Date = time.strftime("%m-%d-%Y", time.localtime())

# Set the time.
Time = time.strftime("%I:%M:%S %p", time.localtime())

print ("Process started at " + str(Date) + " " + str(Time) + "." + "\n")

 
### Start setting variables
# Set the path to the project
prjPath = r"J:\ENGSYS\GIS_Testing\ArcGISOnline_PublishingSrvc\TestScript.aprx"
 
# Update the following variables to match:
#  Feature service/SD name in arcgis.com, user/password of the owner account
sd_fs_name = "TestDocumentPortal_WFL1"
portal = "https://XXXX.maps.arcgis.com" # Can also reference a local portal
user = "XXXXX"
password = "XXXX"
 
# Set sharing options
shrOrg = True
shrEveryone = False
shrGroups = ""
 
### End setting variables
 
# Local paths to create temporary content
relPath = sys.path[0]
sddraft = os.path.join(relPath, "WebUpdate.sddraft")
sd = os.path.join(relPath, "WebUpdate.sd")
 
# Create a new SDDraft and stage to SD
print("Creating SD file")
arcpy.env.overwriteOutput = True
prj = arcpy.mp.ArcGISProject(prjPath)
mp = prj.listMaps()[0]
arcpy.mp.CreateWebLayerSDDraft(mp, sddraft, sd_fs_name, 'MY_HOSTED_SERVICES', 'FEATURE_ACCESS','', True, True)
arcpy.StageService_server(sddraft, sd)
 
print("Connecting to {}".format(portal))
gis = GIS(portal, user, password)
 
# Find the SD, update it, publish /w overwrite and set sharing and metadata
print("Search for original SD on portal...")
sdItem = gis.content.search("{} AND owner:{}".format(sd_fs_name, user), item_type="Service Definition")[0]
print("Found SD: {}, ID: {} \n Uploading and overwriting...".format(sdItem.title, sdItem.id))
sdItem.update(data=sd)
print("Overwriting existing feature service...")
fs = sdItem.publish(overwrite=True)
 
if shrOrg or shrEveryone or shrGroups:
  print("Setting sharing options...")
  fs.share(org=shrOrg, everyone=shrEveryone, groups=shrGroups)
 
print("Finished updating: {} - ID: {}".format(fs.title, fs.id))


print ("Process completed at " + str(Date) + " " + str(Time) + ".")‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍

My script above runs successfully.

 

I am trying to add to it by emailing a specified user if it fails. I have read multiple samples, but have not gotten one to work. Anyone have something a novice python user could use?

0 Kudos
1 Reply
MattiasWallin
New Contributor II

Why don't you wrap the code in a try, except, finally...  and then use something like this to send an email.  This works with Outlook.

import smtplib
from email.message import EmailMessage

def sendEmail(fromWriter,toReader,msgSubject,body,priority= '0'):
   msg = EmailMessage()
   msg.set_content(body)
   msg['Subject'] = msgSubject
   msg['From'] = fromWriter
   msg['To'] = toReader
   msg['X-Priority'] = priority
   s  = smtplib.SMTP('your mail server url')
   s.send_message(msg)
   s.quit()
   return

if __name__ == '__main__':
   fromWriter = 'from@company.com'
   toReader = ['to@company.com']
   msgSubject = 'This is a test'
   body = """
   This is a test email.
   """
   sendEmail(fromWriter,toReader,msgSubject,body)

0 Kudos