【问题标题】:Python e-mail notifications from MS SQL database and Outlook [closed]来自 MS SQL 数据库和 Outlook 的 Python 电子邮件通知 [关闭]
【发布时间】:2020-10-14 14:54:30
【问题描述】:

我创建了按时间顺序排列的 python 脚本:

  • 使用 sqlalchemy 库从 MS SQL 数据库中选择数据

     engine = create_engine("mssql+pyodbc://server\database?driver=SQL Server?Trusted_Connection=yes")
    
  • 对选定的数据进行一些修改,并创建包含员工、电子邮件地址和一些其他信息的数据框

  • 使用 win32com.client 库通过 Outlook 向创建的数据框中的员工发送电子邮件,其中包含一些“量身定制”的信息

    outlook = win32.Dispatch('outlook.application')

...

for index, row in final_df.iterrows():
    mail = outlook.CreateItem(0)
    mail.To = row["MAIL"]
    mail.SentOnBehalfOfName = "GenericCorporateMAil@Corporation.com"
    mail.cc = row["MANAGER"]
    mail.Subject = ...
    mail.Body = ...
    mail.Send()
  1. 是否可以在 MS SQL Server 上部署这种脚本?或者可能在网络驱动器上?

  2. 另外,我如何调整代码,使其在连接到数据库和生成电子邮件时不会依赖我的用户配置文件?

目标是安排它每天自动运行。

【问题讨论】:

  • 那么,如果主机不开启,发送什么?电子邮件不是凭空产生的。
  • 可能我不明白这个问题,但是为什么主机会关闭?
  • “我需要安排它自动运行而不需要打开我的电脑”如果它没有打开,它就关闭了。
  • 此时什么都没有,这就是我寻求帮助的原因。也许如何使用不同的主机或其他东西并将其部署在可以自己运行的地方。我是数据分析师,不是程序员,所以我在这个领域的知识有点有限。
  • 有具体问题吗?你有没有尝试过,做过任何研究?请参阅How to Askhelp center

标签: python sql-server outlook automation automated-deploy


【解决方案1】:

通常,如果您有需要执行的代码或脚本,无论使用何种语言,您都需要将代码发布到可以执行它的服务器或服务。

虽然有很多方法可以自动从 SQL Server 发送电子邮件或报告,但您的特定脚本并不是通常的候选者之一。当您使用 MS Outlook 自动化 API 打开 Outlook 并发送电子邮件时,要使其正常工作,您需要在执行服务器上安装 Outlook 并且脚本需要在上下文中执行已正确配置邮箱的用户配置文件。简而言之,您的特定脚本要求用户登录,它只是自动执行用户本可以自己完成的过程。

一种解决方案是让您的 PC 保持开机状态,并使用 Windows 任务计划程序(或您选择的任何脚本/进程计划程序)安排要执行的脚本。如果这是一个关键过程,您可以将您的 PC 设置为在您需要执行脚本之前唤醒,以便执行计划。

要真正在无人值守的情况下运行,您需要更改脚本逻辑,以便不依赖可能不可用的本地用户配置文件配置。这意味着您将需要手动实例化一个 SMTP 客户端来传输电子邮件(而不是使用 Outlook 自动化)或找到您的脚本可以与之交互的电子邮件服务/api,如果您使用 MS Exchange,那么您可以使用内置Web 服务,请参阅 Get started with EWS Managed API client applications,但还有很多其他选项,例如 twilio

虽然从您的 PC 运行还有其他选项,但显然您的数据库托管在服务器某处上,当您的 PC 关闭时该服务器在线,否则不会有任何数据更改来发送email about,所以下一个寻找托管代码的地方是数据库服务器本身。

  1. 如果您有适当的权限,您可以使用服务器上的 Windows 任务计划程序来执行您的脚本。

    • 在当前状态下,还需要在服务器上安装和配置 Outlook,并且脚本在配置的用户配置文件中执行。
  2. MS Sql Server 有一个名为 SQL Server Agent 的自动化进程,您可以使用它来安排 作业 以执行

    • 您的脚本不是一个很好的候选者,但是 SQL Server 确实有一个 Database Mail 组件,这意味着您可以在纯 SQL 中执行此操作,具体取决于您的电子邮件内容的复杂性,这通常是简单 DBA 的可行选项/Admin 报告数据库状态。
  3. 使用 Azure 或 AWS 等云服务来安排您的脚本运行。这超出了这个答案的范围,我个人最喜欢做一个简单的Azure Logic App,但你仍然需要一个与现在完全不同的脚本逻辑。

这可能不是您想听到的,但您要么需要购买第三方服务来为您执行此操作,要么将您的脚本开发成更多的应用程序或小程序。查看这些主题,选择最接近您的代码熟练程度的主题,并在遇到困难时发布更多关于 SO 的问题。

【讨论】:

  • 此时我正在使用 Windows 调度程序,但这不是一个可持续的解决方案。我将查找您描述的选项并尝试找到一些解决方案。非常感谢您的回答。
  • 如果调度器没有解决它,那么是的你需要开始寻找更正式的代码解决方案,祝你好运,通常DatabaseMail是最简单的,但取决于安全性和电子邮件的复杂性可能无法生存的身体。
【解决方案2】:

您无法从任何地方运行代码。 如果您在公司工作,请要求他们购买最小的 VPS(虚拟专用服务器),以便它可以一直运行。那很便宜。如果是私人需要,自己买一个。

【讨论】:

    猜你喜欢
    • 2021-05-11
    • 1970-01-01
    • 2014-06-05
    • 1970-01-01
    • 1970-01-01
    • 2018-05-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多