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

Send emails automatically via SQL Server Express Edition

我在网上找遍了,但找不到解决办法。有没有什么方法可以使用 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 设置了所有内容,但没有成功。没有自动发送电子邮件。

检查日志后,我发现了这条消息:

The EXECUTE permission was denied on the object 'sp_send_dbmail', database 'msdb', schema 'dbo'.as

看来是权限问题。但是在尝试使用

g运行t dbo 用户权限时
EXEC msdb.dbo.sp_addrolemember @rolename = 'DatabaseMailUserRole'
    ,@membername = 'db_username';
GO

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

Msg 15410, Level 11, State 1, Procedure msdb.dbo.sp_addrolemember, Line 35 [Batch Start Line 0] User or role 'db_username' does not exist in this database.

此脚本只对域用户有效。

并且 *.bat 文件只有在我 运行 使用域用户

后才开始工作
sqlcmd -S localhost -E -Q "EXEC Send_email_Friday" -o "C:\Log_email.txt"

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

SQL Server Express 的问题是 运行 脚本没有按计划执行。但是你可以使用 Windows Task Scheduler and sqlcmd.

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

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

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