2017-09-30 87 views
2

我使用SQL Server发送通知电子邮件,但有时电子邮件不会发送给用户。使用sp_send_dbmail()发送电子邮件有时不起作用

这里是我保存它就会发送到用户

CREATE TABLE [dbo].[EmailNotification](
[Id] [INT] IDENTITY(1,1) NOT NULL, 
[EmailAdress] [NVARCHAR](50) NULL, 
[EmailBody] [NVARCHAR](500) NULL, 
[EmailSubject] [NVARCHAR](250) NULL, 
[Attachment] [NVARCHAR](500) NULL, 
[EmailSent] [BIT] NULL CONSTRAINT [DF_EmailNotification_EmailSent] DEFAULT 
((0)), 
[EmailCreateDate] [DATETIME] NULL CONSTRAINT 
[DF_EmailNotification_EmailCreateDate] DEFAULT (GETDATE()), 
[EmailSentDate] [DATETIME] NULL, 
CONSTRAINT [PK_EmailNotification] PRIMARY KEY CLUSTERED 
([Id] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, 
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 

电子邮件我的SQL表,我创建了执行此过程每隔1分钟的作业

CREATE PROCEDURE [dbo].[spSendEmail] 
AS 
BEGIN 
BEGIN TRAN 
DECLARE @id BIGINT 
DECLARE @max_id BIGINT 
DECLARE @query NVARCHAR(1000) 
DECLARE @EmailBody NVARCHAR(1000) 
DECLARE @EmailAdress NVARCHAR(500) 
DECLARE @EmailSubject NVARCHAR(500) 
DECLARE @attachments NVARCHAR(1000) 

if exists (SELECT * FROM dbo.EmailNotification where EmailSent=0) 
begin 
SELECT @id=MIN(id) FROM dbo.EmailNotification where EmailSent=0 


SELECT @EmailAdress=EmailAdress,@EmailBody=EmailBody,@EmailSubject=EmailSubject,@attachments=Attachment 
FROM EmailNotification WHERE id = @id 


exec [msdb].[dbo].[sp_send_dbmail] @profile_name='Notification', 
@[email protected], 
@blind_copy_recipients='example.email.com', 
@[email protected], 
@[email protected], 
@[email protected] 

end 
IF(@@ERROR>0) 
BEGIN 
ROLLBACK 
END 
ELSE 
BEGIN 
UPDATE EmailNotification set EmailSent=1, EmailSentDate=getdate() WHERE [email protected] 
COMMIT 
END 
+1

“不工作”。你的意思是他们没有收到电子邮件?首先改变你的代码,注意下面提到的返回值。然后检查SQL日志以查看是否有任何错误提及 –

回答

2

你这是什么意思是:spSendEmail不触发sp_send_dbmail? sp_send_dbmail被触发但不会做任何事情....?

请得到sp_send_dbmail的返回代码:
0 => OK
<> 0 =>时出错

DECLARE @result int; 
DECLARE @ErrorNb int; 
EXECUTE @result = exec [msdb].[dbo].[sp_send_dbmail] @profile_name='EDMS email notification', 
@[email protected], 
@blind_copy_recipients='example.email.com', 
@[email protected], 
@[email protected], 
@[email protected] 
SET @ErrorNb = @@ERROR  

IF @result <> 0 
BEGIN 
-- Something goes wrong 
SELECT @result,@ErrorNb 
END 

您还可以使用TRY:

BEGIN TRY 
    EXECUTE exec [msdb].[dbo].[sp_send_dbmail] @profile_name='EDMS email notification', 
    @[email protected], 
    @blind_copy_recipients='example.email.com', 
    @[email protected], 
    @[email protected], 
    @[email protected] 
END TRY 
BEGIN CATCH 
    SELECT ERROR_MESSAGE(); 
END CATCH 
+0

感谢您的回复clementakis.I将尝试您提供的服务 – Nurlan

+0

您是否发现了您的问题?希望如此^^ – clementakis

+0

问题是最大附件大小超过有时:)) – Nurlan

相关问题