SQL Server'da SQL posta kullanmadan e-posta gönderme

BU GÖREVDE

Özet

SQL Mail gönderebilir ve Microsoft SQL Server e-posta okumak için kolay bir yol sağlar. SQL Mail bir MAPI uygulaması olduğundan, ancak, bir MAPI alt sisteminde sunucuda bulunması gerekir. Microsoft Windows NT 4.0, Windows Messaging yüklediğinizde bir MAPI alt sisteminde yükler. Ancak, Microsoft Windows 2000, bir MAPI alt sisteminde sağlamaz. Bu nedenle, SQL Mail kullanmak isterseniz, Microsoft Outlook gibi bir MAPI istemci yüklemeniz gerekir.

Doğrudan SQL Server Basit Posta Aktarım Protokolü (SMTP) e-posta göndermek için diğer yöntemleri kullanabilirsiniz. Örneğin, birlikte çalışma veri nesneleri (CDONTS) NT Server için işbirliği veri nesneleri için Windows 2000 (CDOSYS) veya sp_OA SQL Server OLE saklanan Otomasyonu yordamları ile birlikte kullanabilirsiniz. Bu makalede, Internet posta sunucusuna e-posta göndermek için bu teknikleri kullanan örnekler içerir. Bunlar daha sağlam bir posta sistemi sağlayacak teknikler değiştirebilirsiniz. Örneğin, hata işleme kodunu eklemeniz yararlı olabilir. Örnek yöntemleri okumak veya e-posta işlemek için bir yol sağlamaz.

Not: Windows 2000'den itibaren CDOSYS kullanılabilir ve yerine CDONTS CDOSYS kullanmanızı öneririz. CDONTS, Windows Server 2003 ve sonraki işletim sistemlerinde desteklenmez.

Not: Bu programlama örnekleri Transact-SQL'de CDO nesne modelini çağırmak için kullanabileceğiniz teknikler gösterilmektedir. Örnekler için programlama tüm uzantılar için sorumlu veya için herhangi bir stres sınama kodu bir üretim ortamında çalıştırmak için gereklidir.

Microsoft, programlama örneklerini yalnızca gösterim amacıyla zımni veya açık garanti olmadan sağlar. Bu, satılabilirlik veya belirli bir amaca uygunluk açısından zımni garantileri içerir ancak bunlarla sınırlı değildir. Bu makale, gösterilen programlama dilini, yordamları oluşturmak ve yordamlardan hata ayıklamak için kullanılan araçları bildiğinizi varsayar. Microsoft destek mühendisleri belirli bir yordamın işlevselliğinin açıklanmasına yardımcı olabilirler, ancak ilave işlevsellik sağlamak için bu örnekleri değiştirmezler veya belirli gereksinimlerinizi karşılayacak şekilde yordamları yapılandırmazlar.

CDO (CDONTS) Microsoft Windows NT Server için nasıl kullanılır

CDONTS, Web tabanlı uygulamalar için ileti işlevselliği sağlamak için özel olarak tasarlanmış bir Basit Posta Aktarım Protokolü (SMTP) belirli OLE sunucusudur. Bu nedenle, HTML tabanlı e-posta gönderme CDONTS destekler. SQL Mail gibi MAPI tabanlı uygulamaları yoktur. Varsayılan olarak, Microsoft Internet Information Server (IIS) 4.0 veya yukarısı, CDONTS yükler. Varsayılan olarak, Microsoft Windows 2000, Microsoft Internet Information Server (IIS) 5.0 yükler.

CDONTS hakkında daha fazla bilgi için Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
177850 CDO 1.2 CDONTS arasındaki fark nedir?

CDONTS, e-posta SMTP aracılığıyla yerel sunucuya gönderir. Yerel sunucunuzda bir SMTP sunucusu yoksa, uygun SMTP posta sunucusunun SMTP e-posta yönlendirmek için IIS'yi yükler SMTP sanal sunucusunu kullanabilirsiniz. CDONTS SQL sunucusundan e-posta göndermek için kullanmak için şu adımları izleyin:
  1. IIS'yi yükleyin ve SQL Server çalıştıran bilgisayarda çalışıyor olması.
  2. IIS SMTP Hizmeti SMTP posta sunucunuza yerel sunucunuza teslim edilmek üzere gönderilen SMTP e-postaları otomatik olarak yönlendirir, böylece, "akıllı ana bilgisayar", SMTP posta sunucusunu belirtin.
  3. E-posta göndermek için kullanabileceğiniz SQL Server saklı yordam oluşturun.
SQL Mail yerine CDONTS kullandığınızda, SQL Server çalıştıran bilgisayarda yüklü Microsoft Outlook gibi bir posta istemcisi olması gerekmez. Ayrıca bir Microsoft Exchange sunucusu olması gerekmez. SMTP e-posta, "akıllı ana bilgisayar." olarak destekleyen herhangi bir posta sunucusu kullanabilirsiniz. Ancak, okuma ve CDONTS kullanarak SQL Server çalıştıran bilgisayara gönderilen e-posta işleme. Ayrıca SQL Agent posta işlevlerini değiştiremez.

Yönergeleri izleyin, Microsoft Windows 2000 dayanır. IIS 4.0 bilgisayarda yüklüyse, Microsoft Windows NT 4.0 benzer şekilde yapılandırabilirsiniz. Ancak, adımlar biraz farklı olacaktır.

"Akıllı ana bilgisayar" Microsoft Windows NT 4. 0'da, nasıl yapılandırılacağı hakkında daha fazla bilgi için Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
230235 IIS SMTP Hizmeti SMTP geçiş postası için nasıl yapılandırılır

Akıllı ana bilgisayarı yapılandırma

  1. Başlat' ı tıklatın, Programlar' ın üzerine gidin, Yönetimsel Araçlar' ın üzerine ve sonra
    IIS Yöneticisi'ni açmak için Internet Services Manager ' ı tıklatın.
  2. Sunucunuz için ağacını açın. Varsayılan SMTP Sanal Sunucusu'nusağ tıklatın ve sonra Özellikler' i tıklatın.
  3. Teslim sekmesini bulun ve sonra Gelişmiş' i tıklatın.
  4. Akıllı ana bilgisayar metin kutusunda, SMTP posta sunucusunun adını yazın. SMTP posta sunucunuzun adını bilmiyorsanız, posta yöneticinize başvurun.
  5. Basit Posta Aktarım Protokolü (SMTP) hizmetinin çalıştığından emin olun. SMTP hizmetini IIS Admin hizmetinin bir parçasıdır. Bu nedenle, IIS Yönetim hizmeti de çalışmalıdır.

CDONTS e-posta göndermek için bir saklı yordam oluşturma

Not: Örnek şirketler, kuruluşlar, ürünler, etki alanı adları, e-posta adresleri, logolar, kişiler, yerler ve olaylar bu makalede hayalidir. Hiçbir gerçek şirket, kuruluş, ürün, etki alanı adı, e-posta adresi, logo, kişi, yer veya olayları ile amaçlanmamıştır veya kurulmamalıdır.

Veritabanınızdaki CDONTS nesne modelini çağırmak için SQL Server OLE saklanan Otomasyonu yordamları kullanarak e-posta gönderen bir saklı yordam oluşturmak için aşağıdakine benzer bir kod kullanabilirsiniz.

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

Daha sonra oluşturduğunuz saklı yordamı kullanın ve doğru parametreleri sağlar:
exec sp_send_cdontsmail 'someone@example.com','someone2@example.com','Test of CDONTS','It works'
Not: Yalnızca sysadmin sabit sunucu rolü üyelerinin saklanan Otomasyonu yordamları çalıştırabilirsiniz. SQL Server kullanıcı sysadmin sabit sunucu rolünün bir üyesi değilse, e-posta göndermek için örnekte belirtilen saklı yordamı kullanamazsınız. Böyle bir durumda, CDONTS ile e-posta göndermek için bir istemci uygulaması geliştirmek zorunda kalabilirsiniz. Örneğin, bir Microsoft Visual Basic uygulamasını kullanabilirsiniz.

CDONTS, yerel SMTP sanal sunucusu e-posta gönderir. Sunucu SMTP posta sunucusunu Akıllı ana bilgisayar metin kutusunda belirtilen e-posta sonra yönlendirir. SMTP posta sunucusu belirtilen e-posta adresine posta gönderir için: bağımsız değişkeni (örneğin "someone2@example.com"). Belirtilen ad den: bağımsız değişkeni
e-posta (Bu örnekte "someone@example.com") ile "CDONTS Test" konuyu ve iletinin göndereni olarak "e-posta gövdesi olarak çalıştığı" görüntülenir. Gizli alanını veya bilgi için argüman sağlamadı çünkü hiç kimse e-posta kopyalanır.

Örnek HTML tabanlı e-posta veya eki gönderir değiştirebilirsiniz. CDONTS hakkında belgeler için aşağıdaki Microsoft Web sitesini ziyaret edin:Sol bölmede, ileti ve işbirliğigenişletin İşbirliği veri nesneleri' ni genişletin ve sonra CDO 1.2.1genişletin.

SQL Server 2000 Çevrimiçi Kitapları'de SQL Server OLE saklanan Otomasyonu yordamları için belgeleri bulabilirsiniz.

CDO (CDOSYS) Microsoft Windows 2000 için nasıl kullanılır

CDOSYS Microsoft Windows 2000 ileti uygulamaları geliştirmek için bir nesne modeli sağlar. Varolan bir Windows NT Server için CDO (CDONTS) kitaplığı gelişmiş işlevler de sağlar. Windows 2000 ve bir yerel veya uzak bir SMTP sunucusu CDOSYS gerektirir.

CDOSYS programlı olarak geliştiriciler SMTP sunucularını yapılandırma esneklik vermek için SMTP sunucularına işaret edecek şekilde yapılandırabilirsiniz.

CDOSYS hakkında daha fazla bilgi için Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
1.x CDO kitaplıkları ve CDOSYS arasındaki ilişki 195683 . DLL

CDOSYS bir uzak SMTP sunucusuna e-posta gönderebilirsiniz çünkü CDOSYS Internet Bilgi Sunucusu yüklü ve SQL Server çalıştıran bilgisayarda çalışıyor olması gerekmez. Ayrıca SMTP sanal sunucusunu yapılandırmanız gerekmez. Yapmanız gereken tek şey e-posta göndermek için kullanabileceğiniz SQL Server bir saklı yordam oluşturmak için.

SQL Mail yerine CDOSYS kullandığınızda, SQL Server çalıştıran bilgisayarda yüklü Microsoft Outlook gibi bir posta istemcisi olması gerekmez. Ayrıca bir Exchange sunucusu olması gerekmez. Olarak, uzak SMTP posta sunucusunun SMTP postasını destekleyen herhangi bir posta sunucusu kullanabilirsiniz. Ancak, okuma veya CDOSYS kullanıyorsanız, SQL Server'a gönderilen e-posta işleme. Ayrıca SQL Agent posta işlevlerini değiştiremez.

SQL Server OLE CDOSYS nesne modelini çağırmak için Otomasyon üzerinde SQL Server OLE Otomasyon nesne CDOSYS kullanımıyla dayanır. SQL Server 2000 Service Pack 1 (SP1) ve SQL Server 2000 Service Pack 2 (SP2) ile test. Microsoft CDOSYS saklanan Otomasyonu yordamları, SQL Server 2000 SP1'den önce yayımlanan SQL Server sürümlerinde çağrılabilir garanti etmez.

CDOSYS posta göndermek için bir saklı yordam oluşturma

Veritabanınızdaki CDOSYS nesne modelini çağırmak için SQL Server OLE saklanan Otomasyonu yordamları kullanarak e-posta gönderen bir saklı yordam oluşturmak için aşağıdakine benzer bir kod kullanabilirsiniz.

Bu örnekte, hata hresult her EXEC sp_OA * ifadesinin denetlemek için işleme isteğe bağlı bir ölçüde sağlıyoruz. Hresult (@hr) sıfır ise, önceki sp_OA * deyimi başarılı oldu. Ancak, bu hresult sıfır değilse, önceki sp_OA * deyimi başarısız oldu.

Her sıfır olmayan bir hresult hatası, [dbo] tablosuna bir satır eklenir. [cdosysmail_failures], notlar yer ve saat hata. Ayrıca, son hatanın kaynağı ve hatanın açıklaması bildirmek için sp_OAGetErrorInfo depolanan yordamı kullanarak yorumlanır. Bu hata açıklaması yapılan istemci bağlantılarına yazdırılır. Ayrıca bu hata açıklaması, saat ve yerde hata [dbo] tabloya eklenir. [cdosysmail_failures] veritabanında tanımlamak ve sonra gerçeği başarısızlıkları tanımada.

Sp_OAGetErrorInfo depolanan yordamı başarısız olursa, aşağıdaki hata iletisini istemci bağlantısı için örnek yazdırır:

sp_OAGetErrorInfo başarısız oldu
-- 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 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


Daha sonra oluşturduğunuz saklı yordamı kullanın ve doğru parametreleri sağlar.
   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
Not: Yalnızca sysadmin sabit sunucu rolü üyelerinin saklanan Otomasyonu yordamları çalıştırabilirsiniz. SQL Server kullanıcı sysadmin sabit sunucu rolünün bir üyesi değilse, e-posta göndermek için örnekte belirtilen saklı yordamı kullanamazsınız. Böyle bir durumda, CDOSYS ile posta göndermek için bir istemci uygulaması geliştirmek zorunda kalabilirsiniz. Örneğin, bir Microsoft Visual Basic uygulamasını kullanabilirsiniz.

CDOSYS cdoSMTPServerNamebelirtilen SMTP posta sunucusu e-posta gönderir.

SMTP posta sunucusu belirtilen e-posta adresine posta gönderir için: bağımsız değişkeni (Bu örnekte "someone2@example.com"). Belirtilen ad den: bağımsız değişkeni (Bu örnekte "someone@example.com") e-postanın göndereni olarak görünür.


Bu örnek metin tabanlı e-posta veya ekleri göndermek için değiştirebilirsiniz. CDOSYS hakkında belgeler için aşağıdaki Microsoft Web sitesini ziyaret edin:Sol bölmede, ileti ve işbirliğigenişletin İşbirliği veri nesneleri' ni genişletin ve Windows 2000 için CDO'ıgenişletin.

Daha fazla bilgi

Uzak SMTP posta adını kullanmak yerine yerel SMTP alma dizini kullanarak e-posta göndermek öneririz. Sp_send_cdosysmail örnek SQL Server işleminde depolanan yordamı çalıştırır ve SMTP sunucu çevrimdışı veya kırık ise başarısız olur. E-posta yoluyla yerel toplama dizini gönderme yalnızca saklı yordam alma dizini izni gerektirir. SMTP sunucusuna posta bağımsız olarak işler.

Yerel alma dizini kullanarak posta gönderme hakkında daha fazla bilgi için Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
Windows 2000 için CDO ve yerel alma dizini kullanarak posta HTML göndermek nasıl 286430 biçimlendirilmiş

Özellikler

Makale No: 312839 - Son İnceleme: 24 Şub 2017 - Düzeltme: 1

Microsoft SQL Server 2000 Standard Edition, Microsoft SQL Server 7.0 Standard Edition

Geri bildirim