一、启用数据库邮件
手动启用数据库邮件功能,需执行以下脚本:
exec sp_configure 'show advanced options',1
RECONFIGURE
exec sp_configure 'Database Mail XPs',1
RECONFIGURE With Override
二、邮件服务器设置
1.邮箱启用设置-POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务,开启时有提示有授权码,记录下,后面配置需要录入
登录QQ邮箱——账户——相关设置开启即可。
其他步骤参考其他文献。
三、数据库实现操作步骤(定时作业,触发器都可以)
----1、取出异常单号,且状态不等于处理结束 SELECT * FROM dbo.ProductionExceptionManagement----
----2、根据异常单号找到最新当前节点的创建时间 SELECT * FROM dbo.ProductionExceptionHandle
----3、定时作业获取当前系统时间与最新当前节点时间进行比对
----4、如果最新异常单号的创建时间与当前定时作业获取的系统时间之差大于30分钟
----5、给指定人员发送邮件------
DECLARE @ExceptionStatusId CHAR(12)='',
@ProductionExceptionManagementId CHAR (12),
@CreateDate DATETIME='',
@SystemDate DATETIME='',
@SDate DATETIME='',
@EDate DATETIME='',
@ExceptionLocationId CHAR (12)='',
@Overtime NVARCHAR(50)='',
@Nextmiaoshu NVARCHAR(100)='',
@ZWEN NVARCHAR(MAX) =''
--------定义游标--
DECLARE Pemid_CURSOR CURSOR LOCAL
FOR
SELECT ProductionExceptionManagementId FROM dbo.ProductionExceptionManagement WHERE ExceptionStatusId<>'筛选条件'
--AND CreateDate BETWEEN @SDate and @EDate
FOR READ ONLY
OPEN Pemid_CURSOR
FETCH NEXT FROM Pemid_CURSOR
INTO @ProductionExceptionManagementId
WHILE @@FETCH_STATUS=0
BEGIN
--SET @ExceptionLocationId='1'
--SELECT
-- @ExceptionLocationId = ExceptionLocationId
-- FROM ExceptionLocation Ex LEFT OUTER JOIN dbo.ProductionExceptionManagement Pd ON Ex.FactoryId=pd.FactoryId AND Ex.SiteId=Pd.SiteId
-- AND EX.WorkcenterId=Pd.WorkcenterId WHERE Ex.ExceptionTypeId=Pd.ExceptionTypeId
SET @ExceptionStatusId=(SELECT TOP 1 StatusId FROM dbo.ProductionExceptionHandle WHERE ProductionExceptionManagementId=@ProductionExceptionManagementId ORDER BY CreateDate desc)
SET @CreateDate=(SELECT TOP 1 HandleTime FROM dbo.ProductionExceptionHandle WHERE ProductionExceptionManagementId=@ProductionExceptionManagementId ORDER BY CreateDate desc)
--SET @Nextmiaoshu=(SELECT BillStatesDescription FROM dbo.BillStates WHERE BillStatesId=@ExceptionStatusId)
SET @Nextmiaoshu='等待|故障诊断'
SET @ZWEN=@Nextmiaoshu+'超时30分钟未处理'+@ProductionExceptionManagementId
SET @SystemDate=GETDATE()
SET @Overtime=(SELECT DATEDIFF(MINUTE,@CreateDate,@SystemDate))
IF @Overtime>30
BEGIN
DECLARE @mailitem_id INT;
EXEC msdb.dbo.sp_send_dbmail @profile_name = 'mini', -- 配置文件名
@recipients = '邮箱地址1;邮箱地址2;邮箱地址3', -- 收件箱email地址-- varchar(max)
--@copy_recipients = '', -- varchar(max)
--@blind_copy_recipients = '', -- varchar(max)
@subject = N'故障报单超时未处理', -- 邮件主题-- nvarchar(255)
@body = @ZWEN -- 邮件正文nvarchar(max)
--@body_format = '' -- varchar(20)
--@importance = '1', -- varchar(6)
--@sensitivity = '1', -- varchar(12)
--@file_attachments = N'1', -- 用于发送附件填写路径nvarchar(max)
--@query = N'1', -- 执行有效SQL语句nvarchar(max)
--@execute_query_database = 'PLC', -- sysname
--@attach_query_result_as_file = 1, -- 把 @query 的执行语句所返回消息写入.doc bit
--@query_attachment_filename = N'1', -- 设置附件文件的名称和类型为doc文档,如是文本则是.txt格式nvarchar(260)
--@query_result_header = 1, -- bit
--@query_result_width = 0, -- int
--@query_result_separator = '1' , -- char(1)
--@exclude_query_output = 1, -- bit
--@append_query_error = 1, -- bit
--@query_no_truncate = 1, -- bit
--@query_result_no_padding = 1, -- bit
--@mailitem_id = @mailitem_id OUTPUT, -- int
--@from_address = '21', -- varchar(max)
--@reply_to = '21' -- varchar(max)
END
--进入下一行数据--
FETCH NEXT FROM PemID_cursor
INTO @ProductionExceptionManagementId
END
---关闭游标--------------
CLOSE PemID_cursor
---释放游标------------------
DEALLOCATE PemID_cursor
验证结果: