Làm th? nào đ? g?i b?c e-mail mà không s? d?ng SQL thư trong SQL Server

D?ch tiêu đ? D?ch tiêu đ?
ID c?a bài: 312839 - Xem s?n ph?m mà bài này áp d?ng vào.
Bung t?t c? | Thu g?n t?t c?

? Trang 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) = 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

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:
http://MSDN.Microsoft.com/Library
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.

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 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

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:
http://MSDN.Microsoft.com/Library
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.

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

Thu?c tính

ID c?a bài: 312839 - L?n xem xét sau cùng: 22 Tháng Sáu 2014 - Xem xét l?i: 4.0
Áp d?ng
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 7.0 Standard Edition
T? khóa: 
kbsqlsetup kbhowtomaster kbmt KB312839 KbMtvi
Máy d?ch
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

Cung cấp Phản hồi

 

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