2017-09-30 84 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

相關問題