SSRS傳送重複郵件

2021-08-31 03:27:56 字數 2913 閱讀 5047

這個問題最終還是沒解決,

在sqlserver論壇查的原因無非是有台機複製的本機的映象然後開了服務所以會一直收到郵件;一種是:由於每一條訂閱都在sqlserver **有自動生成的作業,可能是作業沒有被正常的執行。這兩塊我都查了,解決不了我的問題。

下面是記錄。

接收了乙個專案,用的是sqlserver 的套裝,其中有用ssrs訂閱郵件服務的。後來郵件的接收人反饋收到了重複的郵件。同樣的乙份報表,兩個郵件,乙個是6點53收到的,乙個是8點收到的(這個才是我設定的)。那個6點53的郵件不知道在**設定的。我排查了郵件的訂閱,都是只有一條訂閱設定(8點那條),

後來猜測可能是因為:1 在修改訂閱時間的時候,沒有刪除舊訂閱而在舊訂閱上直接修改時間(微軟不太可能犯這種錯)

2 快取原因,報表配置的某些我不知道的配置(感覺也不大可能)

3 有其他伺服器在傳送報表(問過負責人了,應該是沒其他伺服器會傳送報表)

查到兩篇文章:

第一篇比較老了,是08年的,有提到提高版本的時候可能會導致這樣的問題,但我的sqlserver版本是2012

還提到了可以在rsreportserver.config這個配置檔案裡修改

第二篇文章就建議在報表配置那裡修改下日誌級別,然後去看日誌

配置我不敢隨便動,做了幾個檢查和測試,希望復現問題。

1.我刪了以前的訂閱(會發重複郵件的報表)然後新建了一條訂閱,還是受到重複郵件

我檢查了ssrs傳送郵件的日誌(一般在c:\program files\microsoft sql server\msrs11.mssqlserver\reporting services\logfiles),從日誌的清況上看,我沒有看到重**送的報表,每張報表都是只有一條記錄。順便一提,我看到了這樣的東西

然後我想起了資料庫的sqlserver**中,有這樣的不是我建的作業

然後我查詢作業的相關資訊,找到對應的作業,發現只有一條作業記錄,說明也不是這裡的原因

select * 

from msdb.dbo.sysjobs job with( nolock)

inner join msdb. dbo.sysjobsteps stp with(nolock )

on stp .job_id = job .job_id

where stp .command like n'%紅框裡的字元%'

後來我也查了作業的最後一次執行時間,發現也沒有那個時間點執行的作業,可能不是這裡的問題

select

[job].[job_id] as '作業唯一識別符號'

,[job].[name] as '作業名稱'

,[jobstep].[step_uid] as '作業步驟唯一識別符號'

,[jobstep].[step_id] as '步驟編號'

,[jobstep].[step_name] as '步驟名稱'

,case [jobstep].[last_run_outcome]

when 0 then '失敗'

when 1 then '成功'

when 2 then '重試'

when 3 then '取消'

when 5 then '未知'

end as '上次執行狀態'

,stuff(stuff(right('000000'

+ cast([jobstep].[last_run_duration] as varchar(6)), 6), 3,

0, ':'), 6, 0, ':') as [lastrunduration (hh:mm:ss)]

,[jobstep].[last_run_retries] as '上次執行重複執行次數'

,case [jobstep].[last_run_date]

when 0 then null

else cast(cast([jobstep].[last_run_date] as char(8)) + ' '

+ stuff(stuff(right('000000'+ cast([jobstep].[last_run_time] as varchar(6)),6), 3, 0, ':'), 6, 0, ':') as datetime)

end as '上次執行時間'

from [msdb].[dbo].[sysjobsteps] as [jobstep]

inner join [msdb].[dbo].[sysjobs] as [job]

on [jobstep].[job_id] = [job].[job_id]

-- where [jobstep].[database_name]='資料庫的名稱'

-- and upper([jobstep].[command]) like upper('%執行的命令名稱%')

order by [job].[name], [jobstep].[step_id]

2.見乙個測試報表,然後新增訂閱(正在測試),等傳送了一次後修改訂閱時間。沒有復現重**送的問題。可能還需要其他條件來復現成功,暫時不知道是什麼

沒辦法,我知道刪了重新命名那個一直在重**送的那個訂閱的表,然後就沒有收到了(說明是在同一台機傳送的),奇怪的是日誌裡面並沒有相關的報錯的記錄。太奇怪了

這個是我在微軟提問的帖子:

html傳送郵件 Python傳送郵件(三十)

簡單郵件傳輸協議 smtp 是一種協議,用於在郵件伺服器之間傳送電子郵件和路由電子郵件。python提供smtplib模組,該模組定義了乙個smtp客戶端會話物件,可用於使用smtp或esmtp偵聽器守護程式向任何網際網路機器傳送郵件。這是乙個簡單的語法,用來建立乙個smtp物件,稍後將演示如何用它...

C 傳送郵件

今天俺學習c 傳送郵件的方法 在命名空間system.web.mail 傳送電子郵件主要用到了二個物件 乙個是mailmessage物件,此物件主要是封裝電子郵件的各個屬性,即所謂的發信人,收信人,信件的主題,信件的內容和信件的附件等。另外乙個是 tpmail物件,這個物件的最大作用是把已經定義好各...

C 傳送郵件

今天作乙個小專案,其中有個提醒功能,需要簡訊和郵件。因此查詢了一下c 傳送郵件,原來在學習計算機網路時了解到,其實就是實現 tp協議和pop3協議,但是自己有沒有伺服器,於是利用126的郵箱製作。如下 mailmessage message new mailmessage message.from ...