2012-11-15 27 views
0

此作品發送一個XLSX文件:使用sp_send_dbmail

EXEC msdb..sp_send_dbmail 
    @recipients  = '[email protected]', 
    @subject  = 'HELLO WORLD', 
    @Importance  = 'LOW', 
    @body   = 'HELLO WORLD', 
    @file_attachments  = N'UNCpathway\experimental attachment.txt' 

然而,當我嘗試這個

EXEC msdb..sp_send_dbmail 
    @recipients  = '[email protected]', 
    @subject  = 'HELLO WORLD', 
    @Importance  = 'LOW', 
    @body   = 'HELLO WORLD', 
    @file_attachments  = N'UNCpathway\experimental attachment.xlsx' 

我收到以下錯誤信息:

消息22051,級別16,狀態1,行0無法打開附件文件 'UNCpathway \ experimental attachment.xlsx'。 執行API「的CreateFile」失敗,錯誤號32

該消息是奇怪,因爲我沒有要求的附件,纔會打開! 爲什麼? 如何允許使用這些附件?

+0

爲了要附加到電子郵件中的附件,它需要從磁盤,爲此,它需要被打開由執行的安裝程序讀訪問讀。錯誤號32是'ERROR_SHARING_VIOLATION'。 – GSerg

+0

@GSerg - 謝謝 - 我們需要在某處安裝Excel嗎? – whytheq

+0

請理解在向用戶呈現文件時的「打開」與在以某種方式訪問​​文件的程序中「打開」之間的區別。您有共享違規。有人正在閱讀該文件,因此郵件程序在此期間無法閱讀。 – GSerg

回答

1

「打開」表示「被郵件程序訪問,以便存儲在文件中的字節可以被複制到電子郵件中」,而不是向用戶呈現該文件。

CreateFile通常用於打開此類訪問的文件。

錯誤代碼32是ERROR_SHARING_VIOLATION
因此,郵件不能讀取附件文件,因爲別的東西正在讀它。

0

由於GSerg提到它與共享違規相關。 可以通過設置重試次數和重試間隔持續時間來避免。 我擺脫了2次重試嘗試和2分鐘的時間間隔。

1

轉到SQL Server並右鍵單擊SQL服務器屬性並轉到構面並選擇表面區域配置並更改sqlmailEnabled以啓用/ true。

並立即嘗試。它會正常工作。

或執行腳本: -

sp_configure顯示高級選項,1;
GO
RECONFIGURE;
GO
sp_configure'Database Mail XPs',1;
GO
RECONFIGURE
GO