【问题标题】:is it possible to send automated email every minute after querying from a database?从数据库查询后,是否可以每分钟发送一次自动电子邮件?
【发布时间】:2014-08-21 11:51:15
【问题描述】:

我想在从数据库查询后发送电子邮件警报(检查一些数据)。它应该每分钟发生一次。可以做到吗?怎么样?

【问题讨论】:

  • 有可能,是的。如何?通过编写由 cronjob 执行的代码。
  • 为什么不直接从 DBMS 发送呢? This can help you
  • 如何通过 cronjob?你能解释一下吗?

标签: c# sql-server web-services tsql sql-agent-job


【解决方案1】:

是的,这是可能的。为了让您能够发送电子邮件,您需要配置数据库邮件或 SMTP 服务器。拥有这些组件之一,您可以随时发送电子邮件。

【讨论】:

    【解决方案2】:

    是的,

    您可以设置 SQL 代理作业以每分钟(或按照您指定的任何时间表)执行查询和发送电子邮件。

    SQL 代理作业参考: http://msdn.microsoft.com/en-us/library/ms175138.aspx

    从数据库参考发送电子邮件: http://msdn.microsoft.com/en-us/library/ms190307.aspx

    正如 Paul 所说,您需要确保您的环境配置为能够执行此操作(请参阅第二个链接的备注部分)

    【讨论】:

    • 是不是我可以给的最短时间是 5 分钟来发送邮件?我只是想确保我可以每分钟发送邮件...
    【解决方案3】:

    您可以安排 SQL 代理作业每分钟运行一次,以执行所需的 T-SQL 脚本。您可能会考虑将代码封装在有条件地发送电子邮件(使用数据库邮件)并从作业中执行的存储过程中。下面的例子。

    CREATE PROC dbo.usp_check_for_alerts_and_send_email
    AS
    IF EXISTS(
        SELECT * FROM dbo.AlertTable
        )
    BEGIN
        EXECUTE msdb.dbo.sp_send_dbmail
            @subject = 'Alert',
            @recipients = 'testaddress@example.com',
            @query = 'SELECT * FROM dbo.AlertTable';
    END;
    GO
    

    以下是配置数据库邮件的示例脚本,如果您还没有这样做,您可以根据自己的环境进行调整。

    -- Enable Database Mail for this instance
    EXECUTE sp_configure 'show advanced', 1;
    RECONFIGURE;
    EXECUTE sp_configure 'Database Mail XPs',1;
    RECONFIGURE;
    GO
    
    -- Create a Database Mail account
    EXECUTE msdb.dbo.sysmail_add_account_sp
        @account_name = 'Primary Account',
        @description = 'Account used by all mail profiles.',
        @email_address = 'myaddress@example.com',
        @replyto_address = 'myaddress@example.com',
        @display_name = 'Database Mail',
        @mailserver_name = 'mail.example.com';
    
    -- Create a Database Mail profile
    EXECUTE msdb.dbo.sysmail_add_profile_sp
        @profile_name = 'Default Public Profile',
        @description = 'Default public profile for all users';
    
    -- Add the account to the profile
    EXECUTE msdb.dbo.sysmail_add_profileaccount_sp
        @profile_name = 'Default Public Profile',
        @account_name = 'Primary Account',
        @sequence_number = 1;
    
    -- Grant access to the profile to all msdb database users
    EXECUTE msdb.dbo.sysmail_add_principalprofile_sp
        @profile_name = 'Default Public Profile',
        @principal_name = 'public',
        @is_default = 1;
    GO
    

    【讨论】:

      【解决方案4】:

      您想每天发送 1,440 封电子邮件?

      这一切都归于一个人吗?您认为收件人创建删除电子邮件规则的速度有多快?

      一些 ISP 可能会将您标记为垃圾邮件发送者并切断您的互联网/电子邮件访问。

      当某些参数超出预期范围时发送电子邮件是否更有意义?

      是的,可以做,但应该做吗?

      【讨论】:

      • 不一定,但我想每分钟在数据库中查询一次......如果需要,我将不得不发送一封邮件......它不会只发给一个人...... .可能是 4 或 5...我可以通过控制台应用程序吗?
      • 正如这里的人们所提到的......确保数据库邮件已启动并正常工作,创建您的脚本,以便在您手动运行它时它可以 100% 工作,然后使用 sql 代理安排它。我有一堆工作正是这样做的。
      猜你喜欢
      • 2019-04-23
      • 1970-01-01
      • 2012-06-28
      • 1970-01-01
      • 2016-08-21
      • 2018-09-15
      • 1970-01-01
      • 1970-01-01
      • 2010-12-07
      相关资源
      最近更新 更多