วิธีการส่งอีเมลได้โดยไม่ต้องใช้จดหมาย SQL ใน SQL Server

การแปลบทความ การแปลบทความ
หมายเลขบทความ (Article ID): 312839 - ผลิตภัณฑ์ที่เกี่ยวข้องในบทความนี้
ขยายทั้งหมด | ยุบทั้งหมด

เนื้อหาบนหน้านี้

สรุป

จดหมาย SQL แสดงวิธีง่ายในการส่ง และอ่านอีเมลจาก Microsoft SQL Server อย่างไรก็ตาม เนื่องจาก SQL จดหมาย แอพพลิเคชัน MAPI, MAPI ระบบย่อยต้องมีอยู่บนเซิร์ฟเวอร์ การติดตั้ง Microsoft Windows NT 4.0 เป็น ระบบย่อย MAPI เมื่อคุณติดตั้ง Windows Messaging อย่างไรก็ตาม Microsoft Windows 2000 ไม่ได้ให้เป็นระบบย่อยของ MAPI ดังนั้น ถ้าคุณต้องการใช้จดหมาย SQL คุณต้องติดตั้งไคลเอนต์ MAPI เช่น Microsoft Outlook

คุณสามารถใช้ได้ วิธีการอื่น ๆ ให้ส่งอีเมแบบธรรมดา Mail ถ่ายโอนโพรโทคอล (SMTP) ได้โดยตรงจาก SQL Server ตัวอย่างเช่น คุณสามารถใช้วัตถุข้อมูลการร่วมมือกันสำหรับเซิร์ฟเวอร์ NT (CDONTS) หรือทำงานร่วมกันข้อมูลวัตถุสำหรับ Windows 2000 (CDOSYS) ในชุด ด้วยการsp_OA SQL เซิร์ฟเวอร์ OLE Automation เก็บกระบวนงาน บทความนี้ ตัวอย่างของวิธีการใช้เทคนิคเหล่านี้ให้ส่งอีเมอินเทอร์เน็ตที่ประกอบด้วย เซิร์ฟเวอร์จดหมาย คุณสามารถปรับเปลี่ยนเทคนิคต่าง ๆ เพื่อให้พวกเขาจะให้มากขึ้น ระบบการส่งเมล์ที่สมบูรณ์ ตัวอย่างเช่น คุณอาจต้องการเพิ่มรหัสการจัดการข้อผิดพลาด วิธีการหนึ่งในตัวอย่างให้เป็นหมายความว่า สำหรับอ่าน การประมวลผลอีเมล์

หมายเหตุ CDOSYS จะพร้อมใช้งานเริ่มต้น ด้วย Windows 2000 และเราขอแนะนำ ให้คุณใช้ CDOSYS แทน CDONTS CDONTS ไม่ได้รับการสนับสนุน โดย Windows Server 2003 และระบบปฏิบัติการรุ่นที่ใหม่กว่า

หมายเหตุ ตัวอย่างการเขียนโปรแกรมเหล่านี้แสดงเทคนิคต่าง ๆ ที่คุณสามารถใช้ได้ เมื่อต้องการเรียกใช้โมเดลวัตถุ CDO ใน Transact SQL server คุณเป็นผู้รับผิดชอบใด ๆ นามสกุลเขียนโปรแกรมเมื่อ ต้องการตัวอย่าง หรือเนื่องจาก สาเหตุใด stress การทดสอบนั่นคือ จำเป็นสำหรับการเรียกใช้รหัสในการผลิต สภาพแวดล้อม

Microsoft ให้ตัวอย่างการเขียนโปรแกรมเพื่อประกอบการอธิบายเท่านั้น โดยไม่มีการรับประกันอย่างใดอย่างหนึ่ง หรือโดยนัย ฟิลด์นี้ประกอบด้วย แต่ไม่จำกัดเฉพาะ การ การรับประกันโดยนัยของสามารถเชิงพาณิชย์หรือความเหมาะสมสำหรับเฉพาะ วัตถุประสงค์ บทความนี้อนุมานว่า คุณคุ้นเคยกับการเขียนโปรแกรม ภาษาที่จะแสดงเครื่องมือต่าง ๆ ที่ใช้เพื่อสร้าง และขั้นตอนการตรวจแก้จุดบกพร่อง วิศวกรฝ่ายสนับสนุนของ Microsoft สามารถช่วยอธิบายเกี่ยวกับการ ฟังก์ชันการทำงานของกระบวนการเฉพาะ แต่พวกเขาจะไม่ปรับเปลี่ยนเหล่านี้ ตัวอย่างเพื่อให้มีฟังก์ชันที่เพิ่มขึ้น หรือสร้างกระบวนงานเพื่อตอบสนองของคุณ ข้อกำหนดเฉพาะ

วิธีการใช้ CDO สำหรับ Microsoft Windows NT Server (CDONTS)

CDONTS คือ OLE มีเฉพาะแบบธรรมดาจดหมายถ่ายโอนโพรโทคอล (SMTP) เซิร์ฟเวอร์ที่ถูกออกแบบมาเป็นพิเศษเพื่อให้ฟังก์ชันการส่งข้อความไป โปรแกรมประยุกต์ที่ใช้เว็บ เช่น CDONTS สนับสนุนอีเมลแบบ HTML ส่ง แอ Mapi ปพลิเคชัน เช่นเดียวกับจดหมาย SQL ไม่ โดยค่าเริ่มต้น อินเทอร์เน็ตของ Microsoft Information Server (IIS) 4.0 หรือ สูงกว่า ติดตั้ง CDONTS โดยค่าเริ่มต้น Microsoft เซิร์ฟเวอร์ข้อมูลทางอินเทอร์เน็ตของ Microsoft (IIS) ที่ติดตั้ง Windows 2000 5.0

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ CDONTS คลิก บทความเลขต่อไปนี้เพื่อดูบทความในฐานความรู้ของ Microsoft:
177850ความแตกต่างระหว่าง CDO 1.2 และ CDONTS คืออะไร
CDONTS ส่งอีเมผ่าน SMTP ไปยังโลคัล เซิร์ฟเวอร์ ถ้าคุณไม่มีเซิร์ฟเวอร์ SMTP บนเซิร์ฟเวอร์ภายในเครื่องของคุณ คุณสามารถใช้การ เซิร์ฟเวอร์เสมือน SMTP ที่ IIS ที่ติดตั้งเมื่อต้องการกำหนดเส้นทางของอีเมล SMTP เมื่อต้องการ เซิร์ฟเวอร์จดหมาย SMTP ที่เหมาะสม เมื่อต้องใช้ CDONTS เพื่อส่งอีเมล์จากเซิร์ฟเวอร์ SQL ทำตามขั้นตอนเหล่านี้:
  1. ติดตั้ง IIS และมีการทำงานบนคอมพิวเตอร์ที่มี ใช้ SQL Server
  2. เซิร์ฟเวอร์จดหมาย SMTP ของคุณเป็นของคุณ "โฮสต์สมาร์ท" ที่ระบุไว้ บริการ IIS SMTP ใด ๆ อีเมล SMTP ที่ถูกส่งไปยังเส้นทางโดยอัตโนมัติของคุณ เซิร์ฟเวอร์ท้องถิ่นเข้ากับเซิร์ฟเวอร์จดหมาย SMTP สำหรับการจัดส่ง
  3. สร้างกระบวนงานที่เก็บไว้ใน SQL Server ที่คุณสามารถใช้เพื่อ ส่งอีเมล
เมื่อคุณใช้ CDONTS แทนจดหมาย SQL คุณไม่จำเป็นต้อง ไคลเอนต์จดหมายเหมือนกับ Microsoft Outlook บนคอมพิวเตอร์ที่มีการติดตั้ง ใช้ SQL Server คุณยังไม่จำเป็นต้องมีเซิร์ฟเวอร์ Microsoft Exchange คุณสามารถใช้ใด ๆ เซิร์ฟเวอร์จดหมายที่สนับสนุนอีเมล SMTP เป็นของคุณ "สมาร์ทโฮสต์ อย่างไรก็ตาม คุณไม่สามารถอ่าน และประมวลผลอีเมลที่ถูกส่งไปยังคอมพิวเตอร์ที่ กำลังเรียกใช้ SQL Server โดยใช้ CDONTS คุณยังไม่สามารถแทน ฟังก์ชันการทำงานของจดหมายของบริษัทตัวแทนของ SQL

คำแนะนำที่ทำตามควร เมื่อ มีการ Microsoft Windows 2000 ในกรณีที่มีการติดตั้ง IIS 4.0 บนคอมพิวเตอร์ คุณสามารถ กำหนดค่า Microsoft Windows NT 4.0 ในทำนองเดียวกัน ขั้นตอนจะแตกต่างกันอย่างไรก็ตาม เล็กน้อย

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีการ การตั้งค่าคอนฟิก "โฮสต์สมาร์ท" บน Microsoft Windows NT 4.0 คลิกต่อไปนี้ หมายเลขบทความเพื่อดูบทความในฐานความรู้ของ Microsoft:
230235วิธีการกำหนดค่าบริการ IIS SMTP จดหมายสับเปลี่ยน SMTP

การตั้งค่าคอนฟิกโฮสต์แบบสมาร์ท

  1. คลิกเริ่มชี้ไปที่โปรแกรมชี้ไปที่เครื่องมือการจัดการแล้ว
    คลิกโปรแกรมจัดการบริการอินเทอร์เน็ตเพื่อเปิดโปรแกรมจัดการ IIS
  2. เปิดแผนภูมิสำหรับเซิร์ฟเวอร์ของคุณ คลิกขวาStart SMTP เซิร์ฟเวอร์เสมือนและจากนั้น คลิกคุณสมบัติ
  3. ค้นหาตำแหน่งของแท็บการจัดส่งและจากนั้น คลิกขั้นสูง
  4. พิมพ์ชื่อของเซิร์ฟเวอร์จดหมาย SMTP ของคุณในกล่องข้อความของโฮสต์สมาร์ท ถ้าคุณไม่ทราบชื่อของเซิร์ฟเวอร์จดหมาย SMTP ของคุณ ติดต่อผู้ดูแลของจดหมาย
  5. ตรวจสอบให้แน่ใจว่าแบบธรรมดาจดหมายถ่ายโอนโพรโทคอล (SMTP) บริการทำงาน บริการ SMTP เป็นส่วนหนึ่งของบริการ IIS Admin ดังนั้น บริการ IIS Admin ต้องยังใช้

สร้างกระบวนงานที่เก็บไว้ให้ส่งอีเม CDONTS

หมายเหตุ ตัวอย่างบริษัท องค์กร ผลิตภัณฑ์ ชื่อโดเมน ที่อยู่อีเมล โลโก้ บุคคล สถานที่ และเหตุการณ์ที่อธิบายในบทความนี้ เป็นอื่น ไม่มีความสัมพันธ์กับบริษัทจริงใด ๆ องค์กร ผลิตภัณฑ์ ชื่อโดเมน ที่อยู่อีเมล โลโก้ บุคคล ตำแหน่ง หรือเหตุการณ์ที่มีจุดมุ่งหมาย หรือ การอนุมาน

คุณสามารถใช้รหัสที่คล้ายกับต่อไปนี้ เมื่อต้องสร้างกระบวนงานที่เก็บในฐานข้อมูลของคุณที่ส่งอีเมล์ โดยใช้ SQL Server OLE Automation เก็บขั้นตอนการเรียกใช้โมเดลวัตถุ CDONTS

CREATE PROCEDURE [dbo].[sp_send_cdontsmail] 
@From varchar(100),
@To varchar(100),
@Subject varchar(100),
@Body varchar(4000),
@CC varchar(100) = null,
@BCC varchar(100) = null
AS
Declare @MailID int
Declare @hr int
EXEC @hr = sp_OACreate 'CDONTS.NewMail', @MailID OUT
EXEC @hr = sp_OASetProperty @MailID, 'From',@From
EXEC @hr = sp_OASetProperty @MailID, 'Body', @Body
EXEC @hr = sp_OASetProperty @MailID, 'BCC',@BCC
EXEC @hr = sp_OASetProperty @MailID, 'CC', @CC
EXEC @hr = sp_OASetProperty @MailID, 'Subject', @Subject
EXEC @hr = sp_OASetProperty @MailID, 'To', @To
EXEC @hr = sp_OAMethod @MailID, 'Send', NULL
EXEC @hr = sp_OADestroy @MailID

ถัดไป ใช้กระบวนงานที่เก็บที่คุณสร้างขึ้น และให้การ พารามิเตอร์ที่ถูกต้อง:
exec sp_send_cdontsmail 'someone@example.com','someone2@example.com','Test of CDONTS','It works'
หมายเหตุ เฉพาะสมาชิกของsysadmin เซิร์ฟเวอร์ถาวรสามารถเรียกใช้กระบวนงาน OLE Automation เก็บไว้ ถ้าผู้ใช้ SQL Server ไม่ใช่สมาชิกของsysadmin เซิร์ฟเวอร์ถาวรคุณไม่สามารถใช้กระบวนงานที่เก็บที่อยู่ กล่าวถึงในตัวอย่างการส่งอีเมล ในเว็บไซต์ดังกล่าวสถานการณ์ คุณอาจจำเป็นต้อง พัฒนาโปรแกรมประยุกต์ไคลเอ็นต์เมื่อต้องส่งอีเมลที่ มี CDONTS ตัวอย่างเช่น คุณสามารถ ใช้โปรแกรมประยุกต์ของ Microsoft Visual Basic

CDONTS ส่งอีเม ท้องถิ่น SMTP เซิร์ฟเวอร์เสมือน เซิร์ฟเวอร์ทางอีเมล์ไปยัง SMTP แล้ว เซิร์ฟเวอร์จดหมายที่ระบุไว้ในกล่องข้อความของโฮสต์สมาร์ท เมลเซิร์ฟเวอร์ SMTP ส่งจดหมายอีเมล ที่อยู่ที่ระบุไว้ในแบบเมื่อต้องการ:อาร์กิวเมนต์ ("someone2@example.com" ในตัวอย่าง) ชื่อที่ มีระบุในแบบจาก:อาร์กิวเมนต์
ปรากฏเป็นผู้ส่งอีเมล ("someone@example.com" ในตัวอย่างนี้) กับเรื่อง "การทดสอบของ CDONTS" และ ทำข้อความ "งาน" เป็นเนื้อหาของอีเมล์ ไม่มีผู้ใดจะถูกคัดลอกในการ อีเมลเนื่องจากคุณไม่ได้ใส่อาร์กิวเมนต์ไม่ได้สำหรับสำเนาถึงหรือสำเนาลับถึงฟิลด์

คุณสามารถปรับเปลี่ยนตัวอย่างเพื่อให้นั้นจะส่ง อีเมลแบบ HTML หรือสิ่งที่แนบมา สำหรับเอกสารประกอบเกี่ยวกับ CDONTS แวะไป ต่อไปนี้เว็บไซต์ของ Microsoft:
http://msdn.microsoft.com/library
ในบานหน้าต่างด้านซ้าย ขยายMessaging และการร่วมมือกันขยายวัตถุข้อมูลการร่วมมือกันและCDO 1.2.1ที่ขยายแล้ว

คุณสามารถค้นหาเอกสารสำหรับการ SQL Server OLE Automation กระบวนงานที่เก็บไว้ใน SQL Server 2000 Books Online

วิธีการใช้ CDO สำหรับ Microsoft Windows 2000 (CDOSYS)

CDOSYS แสดงเป็นแบบจำลองวัตถุสำหรับการพัฒนาในการส่งข้อความ แอปพลิเคชันบน Microsoft Windows 2000 ยังมีฟังก์ชันการทำงานขั้นสูง ผ่านไลบรารี CDO สำหรับ Windows NT Server (CDONTS) ที่มีอยู่ CDOSYS ที่จำเป็นต้องมี Windows 2000 และเฉพาะ หรือเซิร์ฟเวอร์ SMTP ระยะไกล

คุณสามารถตั้งค่าคอนฟิก CDOSYS เพื่อชี้ไปยังเซิร์ฟเวอร์ SMTP โดยทางโปรแกรมเมื่อต้องให้นักพัฒนาความยืดหยุ่น ในการตั้งค่าคอนฟิกเซิร์ฟเวอร์ SMTP

สำหรับ ข้อมูลเพิ่มเติมเกี่ยวกับ CDOSYS ให้คลิกหมายเลขบทความต่อไปนี้เพื่อดู บทความในฐานความรู้ของ Microsoft:
195683ความสัมพันธ์ระหว่างการไลบรารี CDO 1.x และ CDOSYSDLL
เนื่องจาก CDOSYS สามารถส่งอีเมล์ไปยัง SMTP ระยะไกล เซิร์ฟเวอร์ CDOSYS ไม่ต้องว่า คุณมีเซิร์ฟเวอร์ข้อมูลอินเทอร์เน็ต ติดตั้ง และที่ทำงานอยู่บนคอมพิวเตอร์ที่กำลังเรียกใช้ SQL Server คุณยังดำเนินการ ไม่จำเป็นต้องกำหนดค่าเซิร์ฟเวอร์เสมือน SMTP ทั้งหมดที่คุณต้องทำคือการสร้าง กระบวนงานที่เก็บไว้ใน SQL Server ที่คุณสามารถใช้เพื่อส่งอีเมล

เมื่อคุณใช้ CDOSYS แทนจดหมาย SQL คุณไม่จำเป็นต้องใช้ไคลเอนต์จดหมาย เช่นเดียวกับ Microsoft Outlook ที่ติดตั้งบนคอมพิวเตอร์ที่กำลังเรียกใช้ SQL Server คุณยังไม่จำเป็นต้องมี Exchange server คุณสามารถใช้เซิร์ฟเวอร์จดหมายใด ๆ ที่รองรับจดหมาย SMTP เป็นเซิร์ฟเวอร์จดหมาย SMTP ระยะไกลของคุณ อย่างไรก็ตาม คุณไม่สามารถ อ่าน หรืออีเมลที่ถูกส่งไปยัง SQL Server ถ้าคุณใช้ CDOSYS การประมวลผล คุณยัง ไม่สามารถแทนการทำงานของจดหมายของบริษัทตัวแทนของ SQL

ใช้ CDOSYS โดยที่ SQL Server OLE Automation วัตถุอาศัย SQL เซิร์ฟเวอร์ OLE Automation เมื่อต้องการเรียกใช้โมเดลวัตถุ CDOSYS นี้ถูกพิสูจน์กับ SQL Server 2000 Service Service pack 1 (SP1) และ SQL Server 2000 Service Pack 2 (SP2) ไม่มี Microsoft รับประกันว่า CDOSYS สามารถเรียกได้จากขั้นตอน OLE Automation เก็บไว้ ในรุ่นต่าง ๆ ของ SQL Server ที่ถูกนำออกใช้ก่อนที่จะ SQL Server 2000 SP1

สร้างกระบวนงานที่เก็บไว้ในการส่งจดหมาย CDOSYS

คุณสามารถใช้รหัสที่คล้ายกับต่อไปนี้เพื่อสร้างเป็น ขั้นตอนในการจัดเก็บของคุณ ฐานข้อมูลที่ส่งอีเมล์ โดยใช้ที่ SQL Server OLE Automation กระบวนงานที่เก็บไว้เมื่อต้องการเรียกใช้โมเดลวัตถุ CDOSYS

ในตัวอย่างนี้ เราให้ข้อผิดพลาดในระดับหรือไม่ก็ได้ การจัดการการตรวจสอบ hresult ของแต่ละคำสั่งEXEC sp_OA * ถ้า hresult (@hr) เป็นศูนย์ งบsp_OA *ก่อนหน้านี้ไม่ได้รับผลสำเร็จ อย่างไรก็ตาม ถ้าค่า hresult นั้น งบsp_OA *ก่อนหน้าล้มเหลว

สำหรับแต่ละล้มเหลว hresult ค่า การ แถวจะถูกแทรกลงในตาราง [dbo][cdosysmail_failures] ที่หมายเหตุสถานที่ และ เวลาของความล้มเหลว นอกจากนี้ ข้อผิดพลาดล่าสุดถูกตีความ โดยใช้กระบวนงานเก็บไว้sp_OAGetErrorInfoเพื่อรายงานต้นฉบับและคำอธิบายของข้อผิดพลาด ข้อผิดพลาดนั้น คำอธิบายถูกพิมพ์เมื่อต้องการเชื่อมต่อไคลเอ็นต์ นอกจากนี้ที่อธิบายข้อผิดพลาด เวลา และสถานที่ของความล้มเหลวจะถูกแทรกลงในตาราง [dbo][cdosysmail_failures] ในฐานข้อมูลเพื่อให้คุณสามารถระบุ และ วิเคราะห์ความล้มเหลวหลังจากข้อเท็จจริง

ถ้ากระบวนงานเก็บไว้sp_OAGetErrorInfoเองล้มเหลว ตัวอย่างพิมพ์ข้อความแสดงข้อผิดพลาดต่อไปนี้ เมื่อต้องการเชื่อมต่อไคลเอ็นต์:

sp_OAGetErrorInfo ล้มเหลว
-- drop old cdosysmail_failures table if exists
IF (EXISTS (SELECT * FROM dbo.sysobjects WHERE name = N'cdosysmail_failures' AND type='U')) DROP TABLE [dbo].[cdosysmail_failures]
GO
-- Create new cdosysmail_failures table
CREATE TABLE [dbo].[cdosysmail_failures]
		([Date of Failure] datetime, 
		[Spid] int NULL,
		[From] varchar(100) NULL,
		[To] varchar(100) NULL,
		[Subject] varchar(100) NULL,
		[Body] varchar(4000) NULL,
		[iMsg] int NULL,
		[Hr] int NULL,
		[Source of Failure] varchar(255) NULL,
		[Description of Failure] varchar(500) NULL,
		[Output from Failure] varchar(1000) NULL,
		[Comment about Failure] varchar(50) NULL)
GO

IF (EXISTS (SELECT * FROM dbo.sysobjects WHERE name = N'sp_send_cdosysmail' AND type='P')) DROP PROCEDURE [dbo].[sp_send_cdosysmail]
GO

	CREATE PROCEDURE [dbo].[sp_send_cdosysmail] 
	   @From varchar(100) ,
	   @To varchar(100) ,
	   @Subject varchar(100)=" ",
	   @Body varchar(4000) =" "
	/*********************************************************************
	
	This stored procedure takes the parameters and sends an e-mail. 
	All the mail configurations are hard-coded in the stored procedure. 
	Comments are added to the stored procedure where necessary.
	References to the CDOSYS objects are at the following MSDN Web site:
	http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cdosys/html/_cdosys_messaging.asp
	
	***********************************************************************/ 
	   AS
	   Declare @iMsg int
	   Declare @hr int
	   Declare @source varchar(255)
	   Declare @description varchar(500)
	   Declare @output varchar(1000)
	
	--************* Create the CDO.Message Object ************************
	   EXEC @hr = sp_OACreate 'CDO.Message', @iMsg OUT
	   IF @hr <>0 
	     BEGIN
	       SELECT @hr
	       INSERT INTO [dbo].[cdosysmail_failures] VALUES (getdate(), @@spid, @From, @To, @Subject, @Body, @iMsg, @hr, @source, @description, @output, 'Failed at sp_OACreate')
	       EXEC @hr = sp_OAGetErrorInfo NULL, @source OUT, @description OUT
	       IF @hr = 0
	         BEGIN
	           SELECT @output = '  Source: ' + @source
	           PRINT  @output
	           SELECT @output = '  Description: ' + @description
	           PRINT  @output
                   INSERT INTO [dbo].[cdosysmail_failures] VALUES (getdate(), @@spid, @From, @To, @Subject, @Body, @iMsg, @hr, @source, @description, @output, 'sp_OAGetErrorInfo for sp_OACreate')
                   RETURN
	         END
	       ELSE
	         BEGIN
	           PRINT '  sp_OAGetErrorInfo failed.'
	           RETURN
	         END
	     END
	
	--***************Configuring the Message Object ******************
	-- This is to configure a remote SMTP server.
	-- http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cdosys/html/_cdosys_schema_configuration_sendusing.asp
	   EXEC @hr = sp_OASetProperty @iMsg, 'Configuration.fields("http://schemas.microsoft.com/cdo/configuration/sendusing").Value','2'
	   IF @hr <>0 
	     BEGIN
	       SELECT @hr
	       INSERT INTO [dbo].[cdosysmail_failures] VALUES (getdate(), @@spid, @From, @To, @Subject, @Body, @iMsg, @hr, @source, @description, @output, 'Failed at sp_OASetProperty sendusing')
	       EXEC @hr = sp_OAGetErrorInfo NULL, @source OUT, @description OUT
	       IF @hr = 0
	         BEGIN
	           SELECT @output = '  Source: ' + @source
	           PRINT  @output
	           SELECT @output = '  Description: ' + @description
	           PRINT  @output
                   INSERT INTO [dbo].[cdosysmail_failures] VALUES (getdate(), @@spid, @From, @To, @Subject, @Body, @iMsg, @hr, @source, @description, @output, 'sp_OAGetErrorInfo for sp_OASetProperty sendusing')
                   GOTO send_cdosysmail_cleanup
	         END
	       ELSE
	         BEGIN
	           PRINT '  sp_OAGetErrorInfo failed.'
	           GOTO send_cdosysmail_cleanup
	         END
	     END
	-- This is to configure the Server Name or IP address. 
	-- Replace MailServerName by the name or IP of your SMTP Server.
	   EXEC @hr = sp_OASetProperty @iMsg, 'Configuration.fields("http://schemas.microsoft.com/cdo/configuration/smtpserver").Value', cdoSMTPServerName 
	   IF @hr <>0 
	     BEGIN
	       SELECT @hr
	       INSERT INTO [dbo].[cdosysmail_failures] VALUES (getdate(), @@spid, @From, @To, @Subject, @Body, @iMsg, @hr, @source, @description, @output, 'Failed at sp_OASetProperty smtpserver')
	       EXEC @hr = sp_OAGetErrorInfo NULL, @source OUT, @description OUT
	       IF @hr = 0
	         BEGIN
	           SELECT @output = '  Source: ' + @source
	           PRINT  @output
	           SELECT @output = '  Description: ' + @description
	           PRINT  @output
  	  	   INSERT INTO [dbo].[cdosysmail_failures] VALUES (getdate(), @@spid, @From, @To, @Subject, @Body, @iMsg, @hr, @source, @description, @output, 'sp_OAGetErrorInfo for sp_OASetProperty smtpserver')
                   GOTO send_cdosysmail_cleanup
	         END
	       ELSE
	         BEGIN
	           PRINT '  sp_OAGetErrorInfo failed.'
	           GOTO send_cdosysmail_cleanup
	         END
	     END
	
	-- Save the configurations to the message object.
	   EXEC @hr = sp_OAMethod @iMsg, 'Configuration.Fields.Update', null
	   IF @hr <>0 
	     BEGIN
	       SELECT @hr
	       INSERT INTO [dbo].[cdosysmail_failures] VALUES (getdate(), @@spid, @From, @To, @Subject, @Body, @iMsg, @hr, @source, @description, @output, 'Failed at sp_OASetProperty Update')
	       EXEC @hr = sp_OAGetErrorInfo NULL, @source OUT, @description OUT
	       IF @hr = 0
	         BEGIN
	           SELECT @output = '  Source: ' + @source
	           PRINT  @output
	           SELECT @output = '  Description: ' + @description
	           PRINT  @output
  	  	   INSERT INTO [dbo].[cdosysmail_failures] VALUES (getdate(), @@spid, @From, @To, @Subject, @Body, @iMsg, @hr, @source, @description, @output, 'sp_OAGetErrorInfo for sp_OASetProperty Update')                 
		   GOTO send_cdosysmail_cleanup
	         END
	       ELSE
	         BEGIN
	           PRINT '  sp_OAGetErrorInfo failed.'
	           GOTO send_cdosysmail_cleanup
	         END
	     END
	
	-- Set the e-mail parameters.
	   EXEC @hr = sp_OASetProperty @iMsg, 'To', @To
	   IF @hr <>0 
	     BEGIN
	       SELECT @hr
	       INSERT INTO [dbo].[cdosysmail_failures] VALUES (getdate(), @@spid, @From, @To, @Subject, @Body, @iMsg, @hr, @source, @description, @output, 'Failed at sp_OASetProperty To')
	       EXEC @hr = sp_OAGetErrorInfo NULL, @source OUT, @description OUT
	       IF @hr = 0
	         BEGIN
	           SELECT @output = '  Source: ' + @source
	           PRINT  @output
	           SELECT @output = '  Description: ' + @description
	           PRINT  @output
  	  	   INSERT INTO [dbo].[cdosysmail_failures] VALUES (getdate(), @@spid, @From, @To, @Subject, @Body, @iMsg, @hr, @source, @description, @output, 'sp_OAGetErrorInfo for sp_OASetProperty To')                 
                   GOTO send_cdosysmail_cleanup
	         END
	       ELSE
	         BEGIN
	           PRINT '  sp_OAGetErrorInfo failed.'
	           GOTO send_cdosysmail_cleanup
	         END
	     END

	   EXEC @hr = sp_OASetProperty @iMsg, 'From', @From
	   IF @hr <>0 
	     BEGIN
	       SELECT @hr
	       INSERT INTO [dbo].[cdosysmail_failures] VALUES (getdate(), @@spid, @From, @To, @Subject, @Body, @iMsg, @hr, @source, @description, @output, 'Failed at sp_OASetProperty From')
	       EXEC @hr = sp_OAGetErrorInfo NULL, @source OUT, @description OUT
	       IF @hr = 0
	         BEGIN
	           SELECT @output = '  Source: ' + @source
	           PRINT  @output
	           SELECT @output = '  Description: ' + @description
	           PRINT  @output
  	  	   INSERT INTO [dbo].[cdosysmail_failures] VALUES (getdate(), @@spid, @From, @To, @Subject, @Body, @iMsg, @hr, @source, @description, @output, 'sp_OAGetErrorInfo for sp_OASetProperty From')                 
                   GOTO send_cdosysmail_cleanup
	         END
	       ELSE
	         BEGIN
	           PRINT '  sp_OAGetErrorInfo failed.'
	           GOTO send_cdosysmail_cleanup
	         END
	     END

	   EXEC @hr = sp_OASetProperty @iMsg, 'Subject', @Subject
	   IF @hr <>0 
	     BEGIN
	       SELECT @hr
	       INSERT INTO [dbo].[cdosysmail_failures] VALUES (getdate(), @@spid, @From, @To, @Subject, @Body, @iMsg, @hr, @source, @description, @output, 'Failed at sp_OASetProperty Subject')
	       EXEC @hr = sp_OAGetErrorInfo NULL, @source OUT, @description OUT
	       IF @hr = 0
	         BEGIN
	           SELECT @output = '  Source: ' + @source
	           PRINT  @output
	           SELECT @output = '  Description: ' + @description
	           PRINT  @output
  	  	   INSERT INTO [dbo].[cdosysmail_failures] VALUES (getdate(), @@spid, @From, @To, @Subject, @Body, @iMsg, @hr, @source, @description, @output, 'sp_OAGetErrorInfo for sp_OASetProperty Subject')
                   GOTO send_cdosysmail_cleanup
	         END
	       ELSE
	         BEGIN
	           PRINT '  sp_OAGetErrorInfo failed.'
	           GOTO send_cdosysmail_cleanup
	         END
	     END
	
	-- If you are using HTML e-mail, use 'HTMLBody' instead of 'TextBody'.
	   EXEC @hr = sp_OASetProperty @iMsg, 'TextBody', @Body
	   IF @hr <>0 
	     BEGIN
	       SELECT @hr
	       INSERT INTO [dbo].[cdosysmail_failures] VALUES (getdate(), @@spid, @From, @To, @Subject, @Body, @iMsg, @hr, @source, @description, @output, 'Failed at sp_OASetProperty TextBody')
	       EXEC @hr = sp_OAGetErrorInfo NULL, @source OUT, @description OUT
	       IF @hr = 0
	         BEGIN
	           SELECT @output = '  Source: ' + @source
	           PRINT  @output
	           SELECT @output = '  Description: ' + @description
	           PRINT  @output
  	  	   INSERT INTO [dbo].[cdosysmail_failures] VALUES (getdate(), @@spid, @From, @To, @Subject, @Body, @iMsg, @hr, @source, @description, @output, 'sp_OAGetErrorInfo for sp_OASetProperty TextBody')
                   GOTO send_cdosysmail_cleanup
	         END
	       ELSE
	         BEGIN
	           PRINT '  sp_OAGetErrorInfo failed.'
	           GOTO send_cdosysmail_cleanup
	         END
	     END

	   EXEC @hr = sp_OAMethod @iMsg, 'Send', NULL
	   IF @hr <>0 
	     BEGIN
	       SELECT @hr
	       INSERT INTO [dbo].[cdosysmail_failures] VALUES (getdate(), @@spid, @From, @To, @Subject, @Body, @iMsg, @hr, @source, @description, @output, 'Failed at sp_OAMethod Send')
	       EXEC @hr = sp_OAGetErrorInfo NULL, @source OUT, @description OUT
	       IF @hr = 0
	         BEGIN
	           SELECT @output = '  Source: ' + @source
	           PRINT  @output
	           SELECT @output = '  Description: ' + @description
	           PRINT  @output
  	  	   INSERT INTO [dbo].[cdosysmail_failures] VALUES (getdate(), @@spid, @From, @To, @Subject, @Body, @iMsg, @hr, @source, @description, @output, 'sp_OAGetErrorInfo for sp_OAMethod Send')
                   GOTO send_cdosysmail_cleanup
	         END
	       ELSE
	         BEGIN
	           PRINT '  sp_OAGetErrorInfo failed.'
	           GOTO send_cdosysmail_cleanup
	         END
	     END
	

	-- Do some error handling after each step if you have to.
	-- Clean up the objects created.
        send_cdosysmail_cleanup:
	If (@iMsg IS NOT NULL) -- if @iMsg is NOT NULL then destroy it
	BEGIN
		EXEC @hr=sp_OADestroy @iMsg
	
		-- handle the failure of the destroy if needed
		IF @hr <>0 
	     	BEGIN
			select @hr
        	        INSERT INTO [dbo].[cdosysmail_failures] VALUES (getdate(), @@spid, @From, @To, @Subject, @Body, @iMsg, @hr, @source, @description, @output, 'Failed at sp_OADestroy')
	       		EXEC @hr = sp_OAGetErrorInfo NULL, @source OUT, @description OUT
	
			-- if sp_OAGetErrorInfo was successful, print errors
			IF @hr = 0
			BEGIN
				SELECT @output = '  Source: ' + @source
			        PRINT  @output
			        SELECT @output = '  Description: ' + @description
			        PRINT  @output
				INSERT INTO [dbo].[cdosysmail_failures] VALUES (getdate(), @@spid, @From, @To, @Subject, @Body, @iMsg, @hr, @source, @description, @output, 'sp_OAGetErrorInfo for sp_OADestroy')
			END
			
			-- else sp_OAGetErrorInfo failed
			ELSE
			BEGIN
				PRINT '  sp_OAGetErrorInfo failed.'
			        RETURN
			END
		END
	END
	ELSE 
	BEGIN
		PRINT ' sp_OADestroy skipped because @iMsg is NULL.'
		INSERT INTO [dbo].[cdosysmail_failures] VALUES (getdate(), @@spid, @From, @To, @Subject, @Body, @iMsg, @hr, @source, @description, @output, '@iMsg is NULL, sp_OADestroy skipped')
	        RETURN
	END

ถัดไป ใช้กระบวนงานที่เก็บที่คุณสร้างขึ้น และให้ถูกต้อง พารามิเตอร์
   declare @Body varchar(4000)
   select @Body = 'This is a Test Message'
   exec sp_send_cdosysmail 'someone@example.com','someone2@example.com','Test of CDOSYS',@Body
หมายเหตุ เฉพาะสมาชิกของsysadmin เซิร์ฟเวอร์ถาวรสามารถเรียกใช้กระบวนงาน OLE Automation เก็บไว้ ถ้าผู้ใช้ SQL Server ของคุณไม่ใช่สมาชิกของsysadmin เซิร์ฟเวอร์ถาวรคุณไม่สามารถใช้กระบวนงานที่เก็บที่อยู่ กล่าวถึงในตัวอย่างการส่งอีเมล ในเว็บไซต์ดังกล่าวสถานการณ์ คุณอาจจำเป็นต้อง พัฒนาโปรแกรมประยุกต์ไคลเอ็นต์ในการส่งจดหมาย ด้วย CDOSYS ตัวอย่างเช่น คุณสามารถใช้ โปรแกรมประยุกต์ Microsoft Visual Basic

CDOSYS ส่งอีเมลไป ระยะไกลเซิร์ฟเวอร์จดหมาย SMTP ที่ถูกระบุว่า เป็นcdoSMTPServerName

เมลเซิร์ฟเวอร์ SMTP ส่งจดหมายอีเมล ที่อยู่ที่ระบุไว้ในแบบเมื่อต้องการ:อาร์กิวเมนต์ ("someone2@example.com" ในตัวอย่างนี้) ชื่อที่ มีระบุในแบบจาก:อาร์กิวเมนต์ปรากฏเป็นผู้ส่งอีเมล์ ("someone@example.com" ในตัวอย่างนี้)

คุณสามารถปรับเปลี่ยนตัวอย่างนี้เพื่อส่งอีเมลแบบข้อความ หรือ สิ่งที่แนบมา สำหรับเอกสารประกอบเกี่ยวกับ CDOSYS แวะไปที่เว็บ Microsoft ต่อไปนี้ ไซต์:
http://msdn.microsoft.com/library
ในบานหน้าต่างด้านซ้าย ขยายMessaging และการร่วมมือกันขยายวัตถุข้อมูลการร่วมมือกันและจากนั้น ขยายCDO สำหรับ Windows 2000

ข้อมูลเพิ่มเติม

ขอแนะขอนำที่ คุณส่งอีเมล์ โดยใช้เฉพาะที่ SMTP ไดเรกทอรีแทนที่จะใช้ชื่อจดหมาย SMTP ระยะไกล ตัวอย่างsp_send_cdosysmailการเรียกใช้กระบวนงานที่เก็บไว้ในกระบวนการกับ SQL Server และจะ ล้มเหลวถ้าเซิร์ฟเวอร์ SMTP เป็นแบบออฟไลน์ หรือใช้งานไม่ได้ การส่งอีเมล์ผ่านทางไกล ไดเรกทอรีได้ต้องว่า กระบวนงานที่เก็บได้รับอนุญาตให้เฉพาะ ไดเรกทอรี เซิร์ฟเวอร์ SMTP จะจัดการอย่างอิสระ จดหมาย

สำหรับข้อมูลเพิ่มเติม ข้อมูลเกี่ยวกับวิธีการส่งจดหมาย โดยใช้การภายในไดเรกทอรี คลิก หมายเลขบทความต่อไปนี้เพื่อดูบทความในความรู้ของ Microsoft ฐาน:
286430วิธีการส่ง HTML จัดรูปแบบจดหมายโดยใช้ CDO สำหรับ Windows 2000 และไดเรกทอรีภายในเครื่อง

คุณสมบัติ

หมายเลขบทความ (Article ID): 312839 - รีวิวครั้งสุดท้าย: 15 ตุลาคม 2555 - Revision: 5.0
ใช้กับ
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 7.0 Standard Edition
Keywords: 
kbsqlsetup kbhowtomaster kbmt KB312839 KbMtth
แปลโดยคอมพิวเตอร์
ข้อมูลสำคัญ: บทความนี้แปลโดยซอฟต์แวร์การแปลด้วยคอมพิวเตอร์ของ Microsoft แทนที่จะเป็นนักแปลที่เป็นบุคคล Microsoft มีบทความที่แปลโดยนักแปลและบทความที่แปลด้วยคอมพิวเตอร์ เพื่อให้คุณสามารถเข้าถึงบทความทั้งหมดในฐานความรู้ของเรา ในภาษาของคุณเอง อย่างไรก็ตาม บทความที่แปลด้วยคอมพิวเตอร์นั้นอาจมีข้อบกพร่อง โดยอาจมีข้อผิดพลาดในคำศัพท์ รูปแบบการใช้ภาษาและไวยากรณ์ เช่นเดียวกับกรณีที่ชาวต่างชาติพูดผิดเมื่อพูดภาษาของคุณ Microsoft ไม่มีส่วนรับผิดชอบต่อความคลาดเคลื่อน ความผิดพลาดหรือความเสียหายที่เกิดจากการแปลเนื้อหาผิดพลาด หรือการใช้บทแปลของลูกค้า และ Microsoft มีการปรับปรุงซอฟต์แวร์การแปลด้วยคอมพิวเตอร์อยู่เป็นประจำ
ต่อไปนี้เป็นฉบับภาษาอังกฤษของบทความนี้:312839

ให้ข้อเสนอแนะ

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com