วิธีการส่งอีเมล์โดยไม่ต้องใช้จดหมาย 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

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

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

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

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

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

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

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ CDONTS คลิกหมายเลขบทความต่อไปนี้เพื่อดูบทความในฐานความรู้ของ Microsoft:
177850 ความแตกต่างระหว่าง 1.2 เนนต์ CDO และ CDONTS คืออะไร
CDONTS ส่งอีเมลผ่าน SMTP กับเซิร์ฟเวอร์ภายในเครื่อง ถ้าคุณไม่มีเซิร์ฟเวอร์ SMTP บนเซิร์ฟเวอร์ภายในเครื่องของคุณ คุณสามารถใช้ที่เซิร์ฟเวอร์เสมือน SMTP ที่การติดตั้ง IIS เพื่อกำหนดเส้นทางอีเมล SMTP ของคุณไปยังเซิร์ฟเวอร์จดหมาย SMTP ที่เหมาะสม เมื่อต้องการใช้ CDONTS เพื่อส่งอีเมลจากเซิร์ฟเวอร์ SQL ให้ทำตามขั้นตอนเหล่านี้:
  1. ติดตั้ง IIS และได้ทำงานบนคอมพิวเตอร์เครื่องนั้น isrunning SQL Server
  2. ระบุเซิร์ฟเวอร์จดหมาย SMTP ของคุณเป็นของคุณ "โฮสต์สมาร์ท" เพื่อให้บริการ IIS SMTP จะกำหนดเส้นทางอีเมล SMTP ใด ๆ ที่ส่งไปยังเซิร์ฟเวอร์ yourlocal กับเซิร์ฟเวอร์จดหมาย SMTP สำหรับการจัดส่ง
  3. สร้างกระบวนงานเก็บไว้ในเซิร์ฟเวอร์ SQL ที่คุณสามารถใช้อีเม tosend
เมื่อคุณใช้ CDONTS แทนที่เป็น SQL จดหมาย คุณต้องไม่มีเมลไคลเอ็นต์เช่น Microsoft Outlook ติดตั้งอยู่บนคอมพิวเตอร์ที่กำลังเรียกใช้ SQL Server คุณยังไม่จำเป็นต้องมี Microsoft Exchange server คุณสามารถใช้เซิร์ฟเวอร์จดหมายใด ๆ ที่สนับสนุนอีเมล 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. เปิดแผนภูมิสำหรับเซิร์ฟเวอร์ของคุณ คลิกขวาที่ค่าเริ่มต้นเซิร์ฟเวอร์เสมือน SMTPและจากนั้น คลิกคุณสมบัติ
  3. ค้นหาตำแหน่งของแท็บการจัดส่งและจากนั้น คลิกขั้นสูง
  4. พิมพ์ชื่อของเซิร์ฟเวอร์จดหมาย SMTP ของคุณในกล่องข้อความของโฮสต์สมาร์ท ถ้าคุณไม่ทราบชื่อของ servercontact ของคุณจดหมาย SMTP ผู้ดูแลจดหมายของคุณ
  5. ตรวจสอบให้แน่ใจว่า บริการแบบธรรมดาจดหมายถ่ายโอนโพรโทคอล (SMTP) กำลังทำงานอยู่ บริการ SMTP เป็นส่วนหนึ่งของ Service.Therefore ผู้ดูแลระบบ IIS, IIS Admin บริการจะต้องเรียกใช้

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

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

คุณสามารถใช้รหัสที่คล้ายกับต่อไปนี้เพื่อสร้างกระบวนงานเก็บไว้ในฐานข้อมูลของคุณที่ส่งอีเมล์ โดยใช้กระบวนงาน SQL เซิร์ฟเวอร์ 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 เซิร์ฟเวอร์ 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 ที่คุณสามารถใช้เพื่อส่งอีเมล

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

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

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

คุณสามารถใช้รหัสที่คล้ายกับต่อไปนี้เพื่อสร้างกระบวนงานเก็บไว้ในฐานข้อมูลของคุณที่ส่งอีเมล์ โดยใช้กระบวนงาน SQL เซิร์ฟเวอร์ 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

Next ใช้กระบวนงานที่เก็บที่คุณสร้างขึ้น และแสดงพารามิเตอร์ถูกต้อง
   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 - รีวิวครั้งสุดท้าย: 22 มิถุนายน 2557 - Revision: 6.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