首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Mail 完整設定與使用指南:從 SMTP 架構到存儲程序發送郵件

     編輯:關於SqlServer

前言

SQL Mail 是 SQL Server 早期版本內建的郵件發送功能,雖已被 Database Mail 取代,但在舊系統維護中仍常見。本文詳細記錄從 SMTP 服務建立、Outlook 設定檔建立、SQL Server 服務帳號配置,到擴展預存程序 xp_sendmail 實際發送的完整流程,並解決 Web 應用程式呼叫時的權限問題。

架構需求

  • 使用者網站註冊後,系統自動寄送隨機密碼至信箱。
  • 論壇文章有回覆時,通知發文者。
  • 皆在預存程序中完成,避免前端傳遞參數與第三方元件。

步驟 1:安裝 SMTP 服務

SQL Mail 需要本機或遠端 SMTP 伺服器。本例使用 Imail 6.04(穩定性優於 Windows 2000 內建 SMTP)。確認 SMTP 服務已啟動且可正常轉發郵件。

步驟 2:安裝 Outlook 2000 建立 MAPI 設定檔

Windows 2000 中文版控制台預設無「郵件」圖示,必須安裝 Outlook 才會出現。

  1. 安裝 Outlook 2000。
  2. 重新整理控制台,雙擊「郵件」圖示。
  3. 新增設定檔,命名為 myProfile,設定帳號、SMTP/POP3 伺服器等資訊。
  4. 啟動 Outlook,以 myProfile 為預設設定檔,測試收發信正常。

步驟 3:設定 SQL Server 服務帳號與 SQL Mail

  1. 在「企業管理員」中,以 網域帳號 啟動 SQL Server 服務(本機系統帳號無法存取 MAPI 設定檔)。
  2. 展開「支援服務」→「SQL Mail」屬性,選擇剛建立的 myProfile,點擊「測試」,應顯示「成功啟動並結束 MAPI 工作階段」。
  3. 若出現錯誤或找不到設定檔,請檢查 SQL Server 啟動帳號是否具備該 Outlook 設定檔的存取權限。

步驟 4:使用 xp_sendmail 發送郵件

在查詢分析器測試:

EXEC xp_sendmail
    @recipients = 'user@example.com',
    @subject = '測試郵件',
    @message = '這是由 SQL Mail 發送的測試內容。';

常用參數說明

參數說明
@recipients收件人,多筆以分號分隔(必要)
@subject郵件主旨
@message郵件本文
@query附加查詢結果(除觸發器 inserted/deleted 表外,可參考任何物件)
@attachments附件路徑
@copy_recipients / @blind_copy_recipients副本/密件副本
@attach_results將查詢結果作為附件
@no_header不包含查詢結果欄位名稱
@width / @separator查詢結果輸出寬度與分隔字元

步驟 5:解決 Web 應用程式呼叫權限問題

網站使用 DbGuest 連線資料庫,該帳號預設無權執行 xp_sendmail。

  1. 在企業管理員中,展開 master 資料庫 → 「擴展預存程序」。
  2. 找到 xp_sendmail,右鍵「屬性」→「權限」。
  3. 新增 DbGuest 使用者,勾選 EXEC 權限。

完成後,網站註冊測試即可收到郵件:
謝謝你的註冊,你的使用者名稱是 [心歌], 密碼是 123456789, 建議你首次登入後修改密碼

已知限制與後續

  • SQL Mail 不支援 HTML 格式郵件,若需求 HTML 郵件,建議升級至 Database Mail (SQL Server 2005+) 或使用 CLR 整合發送。
  • SQL Mail 相依於 32 位元 MAPI,在 64 位元環境下無法運作。

整個設定過程看似簡單,實際排除帳號權限、MAPI 設定檔載入等問題耗時一週。希望本文能幫助讀者順利完成部署。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved