通过SQL Server Express Edition自动发送电子邮件

时间:2018-12-06 15:38:25

标签: sql-server-express

我在互联网上看了很多,但找不到解决方案。有什么方法可以使用SQL Server Express Edition自动发送电子邮件报告?我能够配置服务器,并且如果手动运行代码,它将发送电子邮件,但是我需要它每周发送一次电子邮件。

这是我的脚本示例:

exec msdb.dbo.sp_send_dbmail 
@profile_name = 'MailTest3', 
@recipients = 'a@aaa.com', 
@subject = 'Mail Test 2', 
@body = 'Mail Sent Successfully', 
@body_format = 'text'

我在下面的建议中将所有内容设置为 Andrey Nikolov ,但没有成功。没有自动发送电子邮件。

检查日志后,我发现此消息:

  

对对象'sp_send_dbmail'的EXECUTE权限被拒绝,   数据库'msdb',架构'dbo'.as

因此,它看起来像权限问题。但是,在尝试使用

授予dbo用户权限时
EXEC msdb.dbo.sp_addrolemember @rolename = 'DatabaseMailUserRole'
    ,@membername = 'db_username';
GO

脚本我收到一条消息,找不到该用户:

  

消息15410,级别11,状态1,过程msdb.dbo.sp_addrolemember,   第35行[批处理开始第0行]用户或角色'db_username'没有   该数据库中存在。

此脚本仅比我对域用户尝试的有效。

*。bat文件只有在与域用户一起运行后才开始工作

sqlcmd -S localhost -E -Q "EXEC Send_email_Friday" -o "C:\Log_email.txt"

2 个答案:

答案 0 :(得分:0)

SQL Server Express不支持数据库邮件。如果这仅是开发系统,则可以安装SQL Server Developer版本,但未获得生产使用许可。为此,您需要购买SQL Server的完整副本。

答案 1 :(得分:0)

SQL Server Express的问题是没有代理按计划运行脚本。但是您可以使用Windows Task Schedulersqlcmd来做到这一点。

  1. 编写脚本以生成报告并通过电子邮件发送报告并将其保存到文件中。假设它是D:\Scripts\WeeklyReport.sql
  2. 运行任务计划程序并创建一个新的基本任务。
  3. 给它起一个名字并定义一个时间表,根据您的情况,每周一次。
  4. 选择启动程序并浏览sqlcmd.exe。通常您可以在C:\Program Files\Microsoft SQL Server\xxx\Tools\Binn中找到它,其中xxx取决于您的SQL Server版本,例如120
  5. 在命令行上添加参数以指定连接到哪个服务器/数据库,如何进行身份验证以及执行哪个脚本。例如-S MyComputer\SQLEXPRESS -d MyDatabaseName -U myusername -P mypassword -i D:\Scripts\WeeklyReport.sql(以防您使用用户名和密码进行连接,即SQL身份验证),或者省略用户名和密码的参数,并指定-E以使用Windows身份验证。在后一种情况下,它将在登录上下文中连接,这将运行计划的任务。

创建计划任务时,打开属性对话框并检查安全性选项。您可能想要更改它们,以运行命令,即使当前没有用户登录:

enter image description here

关闭对话框,然后尝试运行任务以确认其正常运行。为了进行诊断,您可能需要指定一个输出文件,在该文件中将保存执行结果(添加-o D:\Scripts\WeeklyReport.txt)。