Bạn hiện đang ngoại tuyến, hãy chờ internet để kết nối lại

Trình duyệt của bạn không được hỗ trợ

Bạn cần cập nhật trình duyệt của mình để sử dụng trang web.

Cập nhật lên Internet Explorer phiên bản mới nhất.

Làm thế nào để gửi bức e-mail mà không sử dụng SQL thư trong SQL Server

QUAN TRỌNG: Bài viết này được dịch bằng phần mềm dịch thuật của Microsoft và có thể được Cộng đồng Microsoft chỉnh sửa lại thông qua công nghệ CTF thay vì một biên dịch viên chuyên nghiệp. Microsoft cung cấp các bài viết được cả biên dịch viên và phần mềm dịch thuật thực hiện và cộng đồng chỉnh sửa lại để bạn có thể truy cập vào tất cả các bài viết trong Cơ sở Kiến thức của chúng tôi bằng nhiều ngôn ngữ Tuy nhiên, bài viết do máy dịch hoặc thậm chí cộng đồng chỉnh sửa sau không phải lúc nào cũng hoàn hảo. Các bài viết này có thể chứa các sai sót về từ vựng, cú pháp hoặc ngữ pháp, Microsoft không chịu trách nhiệm về bất kỳ sự thiếu chính xác, sai sót hoặc thiệt hại nào do việc dịch sai nội dung hoặc do hoạt động sử dụng của khách hàng gây ra.

Nhấp chuột vào đây để xem bản tiếng Anh của bài viết này: 312839

TRONG NHIỆM VỤ NÀY

Tóm tắt
SQL thư cung cấp một cách dễ dàng để gửi và đọc bức e-mail từ Microsoft SQL Server. Tuy nhiên, bởi vì SQL thư là một ứng dụng MAPI, một hệ thống phụ MAPI phải có mặt trên máy chủ. Microsoft Windows NT 4.0 cài đặt chuyên biệt một hệ thống phụ MAPI khi bạn cài đặt chuyên biệt Windows thư thoại tin tức thời. Tuy nhiên, Microsoft Windows 2000 không cung cấp một hệ thống phụ MAPI. Vì vậy, nếu bạn muốn sử dụng SQL thư, bạn phải cài đặt chuyên biệt một máy tính khách MAPI như Microsoft Outlook.

Bạn có thể sử dụng các phương pháp khác để gửi bức e-mail Simple Mail Transfer Protocol (SMTP) trực tiếp từ máy chủ SQL. Ví dụ, bạn có thể sử dụng hợp tác dữ liệu đối tượng cho NT Server (CDONTS) hoặc Đối tượng Dữ liệu Hợp tác cho Windows 2000 (CDOSYS) kết hợp với các thủ tục SQL Hệ phục vụ OLE tự động hóa được lưu trữ sp_OA . Bài viết này chứa các ví dụ về cách sử dụng các kỹ thuật này để gửi tới máy chủ thư Internet. Bạn có thể sửa đổi các kỹ thuật, do đó, rằng họ sẽ cung cấp một hệ thống gửi thư mạnh mẽ hơn. Ví dụ, bạn có thể muốn thêm lỗi xử lý mã. Các phương pháp trong các ví dụ cung cấp một phương tiện để đọc hoặc cho xử lý bức e-mail.

Lưu ý: CDOSYS có Bắt đầu với Windows 2000, và chúng tôi khuyên bạn sử dụng CDOSYS thay vì CDONTS. CDONTS không được hỗ trợ với Windows Server 2003 và sau đó điều hành hệ thống.

Lưu ý: Những lập trình ví dụ minh họa kỹ thuật mà bạn có thể sử dụng để gọi các mô hình đối tượng CDO trong Transact-SQL. Bạn chịu trách nhiệm cho bất kỳ tiện ích mở rộng chương trình với các ví dụ hoặc cho bất kỳ căng thẳng thử nghiệm đó là cần thiết để chạy mã trong một môi trường sản xuất.

Microsoft cung cấp lập trình ví dụ để minh hoạ chỉ, không có bảo hành hoặc thể hiện hay ngụ ý. Điều này bao gồm, nhưng không giới hạn ở các bảo đảm ngụ ý của bán hoặc phù hợp cho một mục đích cụ thể. Bài viết này giả định rằng bạn đang quen thuộc với ngôn ngữ lập trình được chứng minh và với các công cụ được sử dụng để tạo ra và để gỡ lỗi các thủ tục. Microsoft hỗ trợ kỹ sư có thể giúp giải thích các chức năng của một thủ tục cụ thể, nhưng họ sẽ không sửa đổi các ví dụ để cung cấp thêm chức năng hoặc xây dựng các thủ tục để đáp ứng yêu cầu cụ thể của bạn.

Làm thế nào để sử dụng CDO Microsoft Windows NT Server (CDONTS)

CDONTS là một đơn giản Mail Transfer Protocol (SMTP) cụ thể hệ phục vụ OLE được thiết kế đặc biệt để cung cấp chức năng thư thoại tin tức thời để ứng dụng dựa trên Web. Như vậy, CDONTS hỗ trợ gửi email HTML dựa trên. Ứng dụng dựa trên MAPI, như SQL thư, thì không. theo mặc định, Microsoft Internet Information Server (IIS) 4.0 hoặc sau này, cài đặt chuyên biệt CDONTS. theo mặc định, Microsoft Windows 2000 cài đặt chuyên biệt Microsoft Internet Information Server (IIS) 5.0.

Để biết thêm chi tiết về CDONTS, nhấp vào số bài viết sau để xem bài viết trong cơ sở kiến thức Microsoft:
177850 Sự khác biệt giữa CDO 1.2 và CDONTS là gì?
CDONTS gửi bức e-mail thông qua SMTP với máy chủ địa phương. Nếu bạn không có một máy chủ SMTP trên máy chủ địa phương của bạn, bạn có thể sử dụng máy chủ SMTP ảo IIS cài đặt chuyên biệt để định tuyến email SMTP của bạn tới máy chủ thư SMTP thích hợp. Để sử dụng CDONTS để gửi e-mail từ máy chủ SQL, làm theo các bước sau:
  1. cài đặt chuyên biệt IIS và có nó đang chạy trên máy tính đó isrunning SQL Server.
  2. Chỉ định Máy phục vụ thư SMTP của bạn như là máy chủ thông minh"của bạn" do đó các bản ghi dịch vụ IIS SMTP tự động tuyến đường bất kỳ email SMTP được gửi đến yourlocal máy chủ Máy phục vụ thư SMTP của bạn cho giao hàng.
  3. Tạo ra một thủ tục dịch sẵn trong SQL Server mà bạn có thể sử dụng bức e-mail tosend.
Khi bạn sử dụng CDONTS thay vì SQL thư, bạn không phải có một ứng dụng thư như Microsoft Outlook cài đặt chuyên biệt trên máy tính đang chạy SQL Server. Bạn cũng không phải có một máy chủ Microsoft Exchange. Bạn có thể sử dụng bất kỳ máy chủ thư hỗ trợ SMTP e-mail như của bạn máy chủ thông minh"." Tuy nhiên, bạn không thể đọc và xử lý e-mail được gửi đến máy tính đang chạy SQL Server bằng cách sử dụng CDONTS. Bạn cũng không thể thay thế các chức năng của SQL đại lý thư.

Các hướng dẫn thực hiện theo dựa trên Microsoft Windows 2000. Nếu IIS 4.0 được cài đặt chuyên biệt trên máy tính, bạn có thể cấu hình Microsoft Windows NT 4.0 tương tự như vậy. Tuy nhiên, các bước sẽ khác nhau một chút.

Để biết thêm chi tiết về làm thế nào để cấu hình máy chủ thông minh"" trên Microsoft Windows NT 4.0, nhấp vào số bài viết sau để xem bài viết trong cơ sở kiến thức Microsoft:
230235 Làm thế nào để cấu hình bản ghi dịch vụ IIS SMTP để chuyển tiếp SMTP mail

Cấu hình máy chủ thông minh

  1. Nhấp vào Bắt đầu, điểm đến chương trình, điểm đến Công cụ quản trị, và sau đó
    nhấp vào Trình quản lý bản ghi dịch vụ Internet để mở trình quản lý IIS.
  2. Mở cây cho máy chủ của bạn. Bấm chuột phải Mặc định SMTP máy chủ ảo, và sau đó bấm thuộc tính.
  3. Xác định vị trí các tab giao hàng , và sau đó bấm chuyên sâu.
  4. Gõ tên của Máy phục vụ thư SMTP của bạn trong hộp văn bản Máy chủ thông minh . Nếu bạn không biết tên của bạn servercontact thư SMTP người quản trị thư của bạn.
  5. Hãy chắc chắn rằng bản ghi dịch vụ Simple Mail Transfer Protocol (SMTP) đang chạy. bản ghi dịch vụ SMTP là một phần của IIS Admin Service.Therefore, IIS Admin bản ghi dịch vụ cũng phải chạy.

Tạo một thủ tục dịch sẵn để gửi bức e-mail CDONTS

Lưu ý: Ví dụ công ty, tổ chức, sản phẩm, tên miền, địa chỉ e-mail, biểu trưng, người, địa điểm, và sự kiện được mô tả trong bài viết này là hư cấu. Không có liên kết với bất kỳ công ty thực sự, tổ chức, sản phẩm, tên miền, địa chỉ e-mail, biểu trưng, người, địa điểm, hoặc các sự kiện được thiết kế hoặc suy diễn mối.

Bạn có thể sử dụng mã số đó là tương tự như sau đây để tạo ra một thủ tục dịch sẵn trong bộ máy cơ sở dữ liệu của bạn gửi email bằng cách sử dụng các thủ tục SQL Hệ phục vụ OLE tự động hóa được lưu trữ để gọi mô hình đối tượng 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) = nullASDeclare @MailID intDeclare @hr intEXEC @hr = sp_OACreate 'CDONTS.NewMail', @MailID OUTEXEC @hr = sp_OASetProperty @MailID, 'From',@FromEXEC @hr = sp_OASetProperty @MailID, 'Body', @BodyEXEC @hr = sp_OASetProperty @MailID, 'BCC',@BCCEXEC @hr = sp_OASetProperty @MailID, 'CC', @CCEXEC @hr = sp_OASetProperty @MailID, 'Subject', @SubjectEXEC @hr = sp_OASetProperty @MailID, 'To', @ToEXEC @hr = sp_OAMethod @MailID, 'Send', NULLEXEC @hr = sp_OADestroy @MailID

Tiếp theo, sử dụng các thủ tục dịch sẵn mà bạn đã tạo và cung cấp các thông số chính xác:
exec sp_send_cdontsmail 'someone@example.com','someone2@example.com','Test of CDONTS','It works'
Lưu ý: Chỉ có thành viên vai trò máy chủ cố định General có thể chạy các thủ tục OLE tự động hóa được lưu trữ. Nếu người sử dụng SQL Server không phải là một thành viên của vai trò máy chủ cố định General , bạn không thể sử dụng các thủ tục dịch sẵn được đề cập trong ví dụ để gửi e-mail. Trong tình huống như vậy, bạn có thể phải phát triển một ứng dụng khách hàng để gửi bức e-mail với CDONTS. Ví dụ, bạn có thể sử dụng một ứng dụng Microsoft Visual Basic.

CDONTS gửi e-mail đến hệ phục vụ SMTP ảo địa phương. Hệ phục vụ sau đó tuyến đường e-mail đến máy chủ thư SMTP được chỉ định trong hộp văn bản Máy chủ thông minh . máy chủ thư SMTP sẽ gửi mail đến địa chỉ e-mail được chỉ định trong các để: đối số ("someone2@example.com" trong ví dụ). Tên được chỉ định trong các từ: đối số
xuất hiện như là người gửi e-mail ("someone@example.com" trong ví dụ này) với chủ đề "Thử nghiệm của CDONTS" và các bài viết "nó hoạt động" như là cơ thể của e-mail. Không ai được sao chép trên bức e-mail vì bạn đã không cung cấp một đối số cho CC hoặc cho trường BCC .

Bạn có thể sửa đổi mẫu để nó sẽ gửi e-mail dựa trên HTML hoặc tập tin đính kèm. Để tài liệu hướng dẫn về CDONTS, ghé thăm Web site sau của Microsoft: Trong ngăn bên trái, mở rộng thư thoại tin tức thời và hợp tác, mở rộng Hợp tác dữ liệu đối tượng, và sau đó mở rộng CDO 1.2.1.

Bạn có thể tìm thấy tài liệu hướng dẫn cho các thủ tục SQL Hệ phục vụ OLE tự động hóa được lưu trữ trong SQL Server 2000 sách trực tuyến.

back to the top

Làm thế nào để sử dụng CDO Microsoft Windows 2000 (CDOSYS)

CDOSYS cung cấp một mô hình đối tượng để phát triển các ứng dụng thư thoại tin tức thời trên Microsoft Windows 2000. Nó cũng cung cấp tính năng nâng cao hơn thư viện hiện có CDO cho Windows NT Server (CDONTS). CDOSYS yêu cầu Windows 2000, và một địa phương hoặc một máy chủ SMTP từ xa.

Bạn có thể cấu hình CDOSYS để trỏ đến máy chủ SMTP lập trình để cung cấp cho nhà phát triển sự linh hoạt trong cấu hình máy chủ SMTP.

Để biết thêm chi tiết về CDOSYS, nhấp vào số bài viết sau để xem bài viết trong cơ sở kiến thức Microsoft:
195683 Mối quan hệ giữa 1.x CDO thư viện và CDOSYS.DLL
Bởi vì CDOSYS có thể gửi e-mail đến một máy chủ SMTP từ xa, CDOSYS không yêu cầu bạn có Internet thông tin máy chủ được cài đặt chuyên biệt bật lên và chạy trên máy tính đang chạy SQL Server. Bạn cũng không phải đặt cấu hình máy chủ ảo SMTP. Tất cả bạn phải làm là tạo ra một thủ tục dịch sẵn trong SQL Server mà bạn có thể sử dụng để gửi bức e-mail.

Khi bạn sử dụng CDOSYS thay vì SQL thư, bạn không phải có một ứng dụng thư như Microsoft Outlook cài đặt chuyên biệt trên máy tính đang chạy SQL Server. Bạn cũng không phải có một máy chủ Exchange. Bạn có thể sử dụng bất kỳ máy chủ thư hỗ trợ SMTP mail như Máy phục vụ thư SMTP từ xa của bạn. Tuy nhiên, bạn không thể đọc hoặc xử lý e-mail được gửi đến máy chủ SQL nếu bạn sử dụng CDOSYS. Bạn cũng không thể thay thế các chức năng của SQL đại lý thư.

Sử dụng CDOSYS với đối tượng của SQL Hệ phục vụ OLE tự động hóa dựa trên SQL Server OLE tự động hóa để gọi mô hình đối tượng CDOSYS. Điều này đã được thử nghiệm với SQL Server 2000 Service Pack 1 (SP1) và SQL Server 2000 Service Pack 2 (SP2). Microsoft không đảm bảo rằng CDOSYS có thể được gọi từ các thủ tục OLE tự động hóa được lưu trữ trên các phiên bản của SQL Server đã được phát hành trước khi SQL Server 2000 SP1.

Tạo một thủ tục dịch sẵn để gửi thư CDOSYS

Bạn có thể sử dụng mã số đó là tương tự như sau đây để tạo ra một thủ tục dịch sẵn trong bộ máy cơ sở dữ liệu của bạn gửi email bằng cách sử dụng các thủ tục SQL Hệ phục vụ OLE tự động hóa được lưu trữ để gọi mô hình đối tượng CDOSYS.

Trong mẫu này, chúng tôi cung cấp một mức độ tùy chọn của lỗi xử lý để kiểm tra hresult mỗi EXEC sp_OA * tuyên bố. Nếu hresult (@hr) là zero, trước sp_OA * tuyên bố là một thành công. Tuy nhiên, nếu đó hresult nonzero, thất bại trước sp_OA * tuyên bố.

Cho mỗi thất bại nonzero hresult, liên tiếp được đưa vào bảng [dbo].[cdosysmail_failures] mà ghi chú địa điểm và thời gian của sự thất bại. Ngoài ra, lỗi cuối cùng giải thích bằng cách sử dụng các thủ tục sp_OAGetErrorInfo lưu trữ để báo cáo các nguồn và mô tả về lỗi. Mô tả lỗi đó được in để kết nối khách hàng. Cũng mô tả lỗi đó, thời gian và địa điểm của sự thất bại được chèn vào bảng [dbo].[cdosysmail_failures] trong bộ máy cơ sở dữ liệu do đó bạn có thể xác định và chẩn đoán thất bại sau khi thực tế.

Nếu sp_OAGetErrorInfo lưu trữ thủ tục chính nó không thành công, ví dụ in thông báo lỗi sau để kết nối khách hàng:

sp_OAGetErrorInfo không thành công
-- drop old cdosysmail_failures table if existsIF (EXISTS (SELECT * FROM dbo.sysobjects WHERE name = N'cdosysmail_failures' AND type='U')) DROP TABLE [dbo].[cdosysmail_failures]GO-- Create new cdosysmail_failures tableCREATE 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)GOIF (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
Tiếp theo, sử dụng các thủ tục dịch sẵn mà bạn đã tạo và cung cấp các thông số chính xác.
   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
Lưu ý: Chỉ có thành viên vai trò máy chủ cố định General có thể chạy các thủ tục OLE tự động hóa được lưu trữ. Nếu người sử dụng SQL Server của bạn không phải là một thành viên của vai trò máy chủ cố định General , bạn không thể sử dụng các thủ tục dịch sẵn được đề cập trong ví dụ để gửi e-mail. Trong tình huống như vậy, bạn có thể phải phát triển một ứng dụng khách hàng gửi thư với CDOSYS. Ví dụ, bạn có thể sử dụng một ứng dụng Microsoft Visual Basic.

CDOSYS gửi e-mail đến hệ phục vụ SMTP mail từ xa được chỉ định là cdoSMTPServerName.

máy chủ thư SMTP sẽ gửi mail đến địa chỉ e-mail được chỉ định trong các để: đối số ("someone2@example.com" trong ví dụ này). Tên được chỉ định trong các từ: đối số xuất hiện như là người gửi bức e-mail ("someone@example.com" trong ví dụ này).

Bạn có thể sửa đổi ví dụ này để có nó gửi e-mail dựa trên văn bản hoặc tập tin đính kèm. Để tài liệu hướng dẫn về CDOSYS, ghé thăm Web site sau của Microsoft: Trong ngăn bên trái, mở rộng thư thoại tin tức thời và hợp tác, mở rộng Hợp tác dữ liệu đối tượng, và sau đó mở rộng CDO cho Windows 2000.

back to the top
Thông tin thêm
Chúng tôi mạnh mẽ đề nghị rằng bạn gửi email bằng cách sử dụng mục tin thư thoại địa phương SMTP đón thay vì sử dụng tên thư SMTP từ xa. Mẫu sp_send_cdosysmail lưu trữ thủ tục chạy trong quá trình với SQL Server và sẽ không thành công nếu máy chủ SMTP là diễn đàn hoặc bị hỏng. Gửi bức e-mail thông qua các mục tin thư thoại địa phương đón chỉ đòi hỏi rằng các thủ tục dịch sẵn có quyền mục tin thư thoại đón. Hệ phục vụ SMTP độc lập sẽ xử lý thư.

Để biết thêm chi tiết về làm thế nào để gửi thư bằng cách sử dụng mục tin thư thoại địa phương đón, nhấp vào số bài viết sau để xem bài viết trong cơ sở kiến thức Microsoft:
286430 Làm thế nào để gửi HTML định dạng thư bằng cách sử dụng CDO cho Windows 2000 và mục tin thư thoại địa phương đón
POP3 internet lotus notes novell groupwise

Cảnh báo: Bài viết này đã được dịch tự động

Thuộc tính

ID Bài viết: 312839 - Xem lại Lần cuối: 06/22/2014 11:22:00 - Bản sửa đổi: 4.0

  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 7.0 Standard Edition
  • kbsqlsetup kbhowtomaster kbmt KB312839 KbMtvi
Phản hồi