重要提示:SQL Mail 已在 SQL Server 2005 起標記棄用,SQL Server 2012 移除。生產環境請遷移至 Database Mail (系統預存程序 msdb.dbo.sp_send_dbmail)。本文僅作為舊系統維護參考。
-- 啟動 (可選參數:帳號/密碼)
xp_startmail @user, @passWord
-- 或企業管理員 → Support Services → SQL Mail → 右鍵 Start
-- 停止
xp_stopmail
xp_sendmailxp_sendmail
@recipients = '收件人1;收件人2', -- 必塊
@message = '郵件正文',
@query = 'SELECT * FROM Orders', -- 查詢結果附件
@attachments = 'C:\report.pdf',
@copy_recipients = 'CC1;CC2',
@blind_copy_recipients = 'BCC1',
@subject = '主旨',
@type = 'text/html', -- 郵件格式
@attach_results = 'TRUE', -- 查詢結果作附件
@no_output = 'TRUE', -- 抑制輸出
@no_header = 'FALSE', -- 包含欄位名
@width = 80, -- 文字寬度
@separator = ',', -- 欄位分隔符
@echo_error = 'TRUE', -- 回傳錯誤
@set_user = 'dbo', -- 查詢執行身分
@dbuse = 'Northwind' -- 查詢資料庫
xp_readmailxp_readmail
@msg_id = 1, -- 郵件編號
@type = 'text' OUTPUT,
@peek = 'TRUE', -- 僅預覽不標記已讀
@suppress_attach = 'FALSE',
@originator = @sender OUTPUT, -- 寄件人
@subject = @subject OUTPUT,
@message = @body OUTPUT,
@recipients = @to OUTPUT,
@cc_list = @cc OUTPUT,
@bcc_list = @bcc OUTPUT,
@date_received = @dt OUTPUT,
@unread = @unread OUTPUT,
@attachments = @attach OUTPUT,
@skip_bytes = 0, -- 長信分段讀取
@msg_length = @len OUTPUT
-- 取得下一封郵件編號
xp_findnextmsg @msg_id = @next_id OUTPUT, @unread_only = 'TRUE'
-- 刪除指定郵件 (不指定則刪全部)
xp_deletemail '1'
sp_processmailsp_processmail
@subject = '關鍵字',
@filetype = '附件類型',
@separator = ',',
@set_user = 'dbo',
@dbuse = '目標資料庫'
| 舊版 SQL Mail | Database Mail (SQL 2005+) |
|---|---|
| xp_startmail | 無需啟動,Service Broker 驅動 |
| xp_sendmail | msdb.dbo.sp_send_dbmail |
| xp_readmail / xp_findnextmsg | 不支援 POP3 讀取,改用應用層處理 |
| xp_deletemail | 不適用 |
| sp_processmail | 改用 Service Broker 隊列 + 啟動預存程序 |
-- 1. 啟用 Database Mail (需 sysadmin)
EXEC msdb.dbo.sysmail_add_account_sp
@account_name = 'SMTP_Account',
@email_address = 'sqlagent@company.com',
@mailserver_name = 'smtp.company.com',
@port = 25;
EXEC msdb.dbo.sysmail_add_profile_sp @profile_name = 'Default_Profile';
EXEC msdb.dbo.sysmail_add_profileaccount_sp
@profile_name = 'Default_Profile', @account_name = 'SMTP_Account', @sequence_number = 1;
-- 2. 發送測試
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'Default_Profile',
@recipients = 'dba@company.com',
@subject = 'Database Mail 測試',
@body = '遷移成功!',
@body_format = 'HTML';