sp_send_dbmail 失敗:無法將郵件發送到郵件伺服器
我正在嘗試從我的 SQL Server 2014 安裝設置電子郵件。由於我有 Express Edition,我沒有數據庫郵件嚮導,但我似乎在 msdb 數據庫中擁有所有儲存過程。
錯誤資訊是: 由於郵件伺服器故障,無法將郵件發送給收件人。(使用帳戶 X(日期)發送郵件。異常消息:無法將郵件發送到郵件伺服器。(發送郵件失敗。)。
在我看來,該錯誤表明電子郵件連接存在問題,而不是 SQL Server,因此我嘗試從不同的電子郵件地址發送 - 但出現相同的錯誤。這兩個外發電子郵件地址都可以可靠地用於我的正常工作(使用 Thunderbird)。設置數據是從 Thunderbird 複製的。
我使用了來自https://www.codeproject.com/articles/485124/configuring-database-mail-in-sql-server的設置 SQL
-- Enable service broker in the MSDB database. USE [master] GO ALTER DATABASE [MSDB] SET ENABLE_BROKER WITH NO_WAIT GO --Enabling Database Mail sp_configure 'show advanced options',1 reconfigure; GO -- Enable the db mail feature at server level sp_configure 'Database Mail XPs',1 reconfigure; --Creating a Profile EXECUTE msdb.dbo.sysmail_add_profile_sp @profile_name = 'SQLProfile', @description = 'Mail Service for SQL Server' ; -- Create a Mail account EXECUTE msdb.dbo.sysmail_add_account_sp @account_name = 'SQL_Email_Account', @email_address = 'somebody@gmail.com', @mailserver_name = 'smtp.googlemail.com', @port=465, @enable_ssl=1, @username='somebody@gmail.com', @password='Emailid password' -- TODO ENSURE VALID PASSWORD FOR THE ACCOUNT IS ENTERED ABOVE -- Adding the account to the profile EXECUTE msdb.dbo.sysmail_add_profileaccount_sp @profile_name = 'SQLProfile', @account_name = 'SQL_Email_Account', @sequence_number =1 ; -- Granting access to the profile to the DatabaseMailUserRole of MSDB EXECUTE msdb.dbo.sysmail_add_principalprofile_sp @profile_name = 'SQLProfile', @principal_id = 0, @is_default = 1;
以上內容不打算作為單個腳本執行;每個步驟都是單獨執行的,並且每個步驟都有效。
電子郵件經過以下測試:
--Sending Test Mail -- See https://msdn.microsoft.com/en-us/library/ms190307.aspx for all arguments EXEC msdb.dbo.sp_send_dbmail @profile_name = 'SQLProfile', @recipients = 'somebodyelse@yahoo.co.uk', @body = 'Database Mail Testing', @subject = 'Database Mail from SQL Server'; select * from msdb.dbo.sysmail_event_log
然後嘗試其他電子郵件地址:
USE [master] GO -- Create a Database Mail account 2 EXEC msdb.dbo.sysmail_add_account_sp @account_name = 'SQL_Email_Account 2', @description = 'Alternative Mail account', @email_address = 'somebody3@gmx.co.uk', @display_name = 'Alternate GMX', @port=465, @enable_ssl=1, @username='somebody3@gmx.co.uk', @password='ValidPassword', @mailserver_name = 'mail.gmx.com'; GO -- Add the account 2 to the profile EXEC msdb.dbo.sysmail_add_profileaccount_sp @profile_name = 'SQLProfile', @account_name = 'SQL_Email_Account 2', @sequence_number = 2 ; -- Make one not the default EXECUTE msdb.dbo.sysmail_update_principalprofile_sp @profile_name = 'SQLProfile', @principal_name = 'public', @is_default = 0 ; -- Show the new default profile EXEC msdb.dbo.sysmail_help_principalprofile_sp
但這也因同樣的錯誤而失敗。SQL Server 日誌和我的防火牆日誌中都沒有消息。
我嘗試了一些網路搜尋建議的診斷:
Use msdb Go select * from sysmail_profile select * from sysmail_account select * from sysmail_profileaccount where profile_id=1 select * from sysmail_server EXEC msdb.dbo.sysmail_help_account_sp; EXEC msdb.dbo.sysmail_help_profileaccount_sp @profile_name = 'SQLProfile'; EXEC msdb.sys.sp_helprolemember 'DatabaseMailUserRole'; EXEC msdb.dbo.sysmail_help_principalprofile_sp; EXEC msdb.dbo.sysmail_help_status_sp; exec [dbo].[sysmail_configure_sp] 'LoggingLevel', 3
所有返回值都是正常的,所以我沒有發佈設置數據的副本。我唯一的問題是,將 LoggingLevel 設置為 verbose 似乎沒有任何效果——數據是否儲存在我沒有看過的其他地方?
任何提示將不勝感激,無論是解決問題還是進行更多診斷。謝謝你。
抱歉,SQL Server Express 不支持數據庫郵件(請查看“其他數據庫服務”部分):
https://msdn.microsoft.com/en-us/library/cc645993(v=sql.120).aspx
郵件服務是一個附加的數據庫服務,它是微軟只提供此服務以及 SQL Server 的版本,如:
- 企業
- 商業智能
- 標準
- 網路
您不應獲得郵件服務功能以及此版本的 SQL Server 版本,例如:
- 高級服務快遞
- 用工具表達
- 表示
SQL Server 2014 版本支持的更多參考功能