Sql-Server

sp_send_dbmail 失敗:無法將郵件發送到郵件伺服器

  • January 26, 2017

我正在嘗試從我的 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 的版本,如:

  1. 企業
  2. 商業智能
  3. 標準
  4. 網路

您不應獲得郵件服務功能以及此版本的 SQL Server 版本,例如:

  1. 高級服務快遞
  2. 用工具表達
  3. 表示

SQL Server 2014 版本支持的更多參考功能

引用自:https://dba.stackexchange.com/questions/162299