Bagaimana cara mengirim e-mail tanpa menggunakan SQL Mail di SQL Server

Terjemahan Artikel Terjemahan Artikel
ID Artikel: 312839 - Melihat produk di mana artikel ini berlaku.
Perbesar semua | Perkecil semua

Pada Halaman ini

Ringkasan

SQL Mail menyediakan cara mudah untuk mengirim dan membaca e-mail dari Microsoft SQL Server. Namun, karena SQL Mail aplikasi MAPI, subsistem MAPI harus hadir pada server. Microsoft Windows NT 4.0 menginstal subsistem MAPI ketika Anda menginstal Windows Olahpesan. Namun, Microsoft Windows 2000 tidak menyediakan subsistem MAPI. Oleh karena itu, jika Anda ingin menggunakan SQL Mail, Anda harus menginstal klien MAPI seperti Microsoft Outlook.

Anda dapat menggunakan metode lain untuk mengirim e-mail protokol Transfer Surat sederhana (SMTP) langsung dari SQL Server. Misalnya, Anda dapat menggunakan Collaboration Data Objects untuk NT Server (CDONTS) atau kolaborasi Data objek untuk Windows 2000 (CDOSYS) dalam kombinasi dengan sp_OA SQL Server OLE otomatisasi disimpan prosedur. Artikel ini berisi contoh bagaimana menggunakan teknik ini untuk mengirim e-mail ke Internet server email. Anda dapat memodifikasi teknik sehingga mereka akan menyediakan sistem mailing lebih kuat. Misalnya, Anda mungkin ingin menambahkan penanganan kode galat. Metode dalam contoh tidak menyediakan sarana untuk membaca atau pengolahan e-mail.

Catatan CDOSYS tersedia dimulai dengan Windows 2000, dan kami sarankan Anda untuk menggunakan CDOSYS bukan CDONTS. CDONTS tidak didukung dengan Windows Server 2003 dan kemudian sistem operasi.

Catatan Contoh-contoh ini pemrograman menggambarkan teknik yang dapat Anda gunakan untuk memohon CDO object model di Transact-SQL. Anda bertanggung jawab untuk ekstensi pemrograman untuk contoh atau untuk stres pengujian yang diperlukan untuk menjalankan kode dalam lingkungan produksi.

Microsoft menyediakan contoh pemrograman sebagai ilustrasi saja, tanpa jaminan, baik tersurat maupun tersirat. Termasuk, namun tidak terbatas pada, jaminan tersirat kelayanan untuk diperdagangkan atau kesesuaian untuk tujuan tertentu. Artikel ini mengasumsikan bahwa Anda sudah terbiasa dengan bahasa pemrogram yang didemonstrasikan dan dengan alat-alat yang digunakan untuk membuat dan proses debugging. Microsoft teknisi dapat membantu menjelaskan fungsi prosedur tertentu, namun mereka tidak akan mengubah contoh-contoh ini untuk menyediakan menambahkan fungsi atau membangun prosedur untuk memenuhi kebutuhan spesifik Anda.

Cara menggunakan CDO Microsoft Windows NT server (CDONTS)

CDONTS adalah server OLE tertentu protokol Transfer Surat sederhana (SMTP) yang dirancang khusus untuk menyediakan fungsi pesan untuk aplikasi berbasis Web. Dengan demikian, CDONTS mendukung pengiriman e-mail berbasis HTML. Aplikasi berbasis MAPI, seperti SQL Mail, tidak. secara asali, Microsoft Internet Information Server (IIS) 4.0 atau yang lebih baru, menginstal CDONTS. secara asali, Microsoft Windows 2000 menginstal Microsoft Internet Information Server (IIS) 5.0.

Untuk informasi lebih lanjut tentang CDONTS, klik nomor artikel berikut ini untuk melihat artikel di dalam Pangkalan Pengetahuan Microsoft:
177850 What is the perbedaan antara CDO 1.2 dan CDONTS?
CDONTS mengirim e-mail melalui SMTP ke server lokal. Jika Anda tidak memiliki sebuah server SMTP server lokal Anda, Anda dapat menggunakan SMTP server virtual yang menginstall IIS untuk merutekan SMTP e-mail ke server e-mail SMTP yang sesuai. Untuk menggunakan CDONTS untuk mengirim e-mail dari SQL Server, ikuti langkah berikut:
  1. Instal IIS dan telah berjalan pada komputer yang isrunning SQL Server.
  2. Menetapkan SMTP server mail Anda sebagai Anda "host pintar" sehingga layanan IIS SMTP otomatis rute SMTP e-mail yang dikirim ke yourlocal server ke server SMTP e-mail Anda untuk pengiriman.
  3. Membuat prosedur tersimpan SQL Server yang dapat Anda gunakan tosend e-mail.
Bila Anda menggunakan CDONTS bukan SQL Mail, Anda tidak perlu memiliki klien email seperti Microsoft Outlook diinstal pada komputer yang menjalankan SQL Server. Anda juga tidak harus memiliki server Microsoft Exchange. Anda dapat menggunakan server e-mail apapun yang mendukung SMTP e-mail sebagai "tuan rumah pintar." Namun, Anda tidak bisa membaca dan proses e-mail yang dikirim ke komputer yang menjalankan SQL Server dengan menggunakan CDONTS. Anda juga tidak dapat menggantikan fungsi SQL Agent Mail.

Petunjuk yang mengikuti bergantung pada Microsoft Windows 2000. Jika IIS 4.0 diinstal pada komputer, Anda dapat mengkonfigurasi Microsoft Windows NT 4.0 demikian pula. Namun, langkah-langkah akan berbeda sedikit.

Untuk selengkapnya tentang cara mengkonfigurasi "host pintar" pada Microsoft Windows NT 4.0, klik nomor artikel berikut ini untuk melihat artikel di dalam Pangkalan Pengetahuan Microsoft:
230235 Cara mengkonfigurasi Layanan IIS SMTP ke relay SMTP pesan

Mengkonfigurasi host pintar

  1. Klik mulai, arahkan ke program, arahkan ke Alat administratif, kemudian
    Klik Internet Services Manager untuk membuka pengelola IIS.
  2. Buka pohon untuk server Anda. Klik kanan-atas Default SMTP Virtual Server, dan kemudian klik properti.
  3. Cari tab pengiriman , dan kemudian klik Advanced.
  4. Ketik nama server SMTP e-mail di kotak teks host pintar . Jika Anda tidak tahu nama Anda SMTP e-mail servercontact administrator pesan Anda.
  5. Pastikan bahwa layanan protokol Transfer Surat sederhana (SMTP) yang berjalan. Layanan SMTP adalah bagian dari IIS Admin Service.Therefore, IIS Admin layanan harus juga menjalankan.

Membuat Stored Procedure untuk mengirim CDONTS e-mail

Catatan Contoh perusahaan, organisasi, produk, nama domain, alamat penyuratan e-mail, logo, orang, tempat dan peristiwa-peristiwa yang digambarkan dalam artikel ini adalah rekaan. Tidak ada hubungannya dengan setiap perusahaan nyata, organisasi, produk, nama domain, alamat penyuratan e-mail, logo, orang, tempat atau peristiwa dimaksudkan atau harus disimpulkan.

Anda dapat menggunakan kode yang mirip dengan berikut untuk membuat prosedur tersimpan dalam database Anda yang mengirimkan e-mail dengan menggunakan SQL Server OLE otomatisasi disimpan prosedur untuk memohon CDONTS object model.

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

Selanjutnya, menggunakan prosedur tersimpan yang Anda buat dan memberikan parameter benar:
exec sp_send_cdontsmail 'someone@example.com','someone2@example.com','Test of CDONTS','It works'
Catatan Hanya anggota dari peran sysadmin tetap server dapat menjalankan OLE otomatisasi disimpan prosedur. Jika pengguna SQL Server bukanlah anggota dari peran sysadmin tetap server, Anda tidak dapat menggunakan prosedur tersimpan yang disebutkan dalam contoh mengirim e-mail. Dalam situasi seperti ini, Anda mungkin harus mengembangkan aplikasi klien untuk mengirim e-mail dengan CDONTS. Misalnya, Anda dapat menggunakan aplikasi Microsoft Visual Basic.

CDONTS mengirim e-mail ke lokal SMTP server virtual. Server kemudian rute e-mail ke SMTP server mail yang ditentukan dalam kotak teks host pintar . Server e-mail SMTP mengirim surat ke alamat penyuratan e-mail yang ditentukan dalam untuk: argumen ("someone2@example.com" dalam contoh). Nama yang ditentukan dalam dari: argumen
muncul sebagai pengirim e-mail ("someone@example.com" dalam contoh ini) dengan subjek "Test CDONTS" dan pesan "berhasil" sebagai tubuh e-mail. Tidak ada yang disalin pada e-mail karena Anda tidak menyediakan sebuah argumen untuk CC atau bidang BCC .

Anda dapat memodifikasi contoh sehingga akan mengirim e-mail berbasis HTML atau lampiran. Untuk dokumentasi tentang CDONTS, kunjungi Web site Microsoft berikut:
http://msdn.Microsoft.com/Library
Dalam pane kiri, memperluas Olahpesan dan kolaborasi, memperluas Collaboration Data Objects, dan kemudian memperluas CDO 1.2.1.

Anda dapat menemukan dokumentasi prosedur SQL Server OLE otomatisasi disimpan di SQL Server 2000 buku Online.

Cara menggunakan CDO untuk Microsoft Windows 2000 (CDOSYS)

CDOSYS menyediakan model objek untuk mengembangkan aplikasi pesan pada Microsoft Windows 2000. Ini juga memberikan peningkatan fungsi atas Perpustakaan CDO untuk Windows NT Server (CDONTS) yang sudah ada. CDOSYS memerlukan Windows 2000, dan lokal atau remote SMTP server.

Anda dapat mengkonfigurasi CDOSYS untuk menunjuk ke SMTP server pemrograman untuk memberikan pengembang fleksibilitas dalam konfigurasi server SMTP.

Untuk informasi lebih lanjut tentang CDOSYS, klik nomor artikel berikut ini untuk melihat artikel di dalam Pangkalan Pengetahuan Microsoft:
195683 Hubungan antara 1.x CDO Perpustakaan dan CDOSYS.DLL
Karena CDOSYS dapat mengirim e-mail ke remote SMTP server, CDOSYS tidak memerlukan bahwa Anda memiliki Internet Information Server diinstal dan berjalan pada komputer yang menjalankan SQL Server. Anda juga tidak perlu mengkonfigurasi SMTP virtual server. Yang harus Anda lakukan adalah untuk membuat prosedur tersimpan SQL Server yang dapat Anda gunakan untuk mengirim e-mail.

Bila Anda menggunakan CDOSYS bukan SQL Mail, Anda tidak perlu memiliki klien email seperti Microsoft Outlook diinstal pada komputer yang menjalankan SQL Server. Anda juga tidak harus memiliki Exchange server. Anda dapat menggunakan server e-mail apapun yang mendukung e-mail SMTP sebagai server e-mail SMTP terpencil. Namun, Anda tidak dapat membaca atau proses e-mail yang dikirim ke SQL Server jika Anda menggunakan CDOSYS. Anda juga tidak dapat menggantikan fungsi SQL Agent Mail.

Penggunaan CDOSYS dengan SQL Server OLE Automation object bergantung pada SQL Server OLE otomatisasi untuk memohon CDOSYS object model. Ini diuji dengan SQL Server 2000 Service Pack 1 (SP1) dan SQL Server 2000 Service Pack 2 (SP2). Microsoft tidak menjamin bahwa CDOSYS dapat dipanggil dari prosedur OLE otomatisasi disimpan pada versi SQL Server yang dirilis sebelum SQL Server 2000 SP1.

Membuat prosedur tersimpan untuk mengirim email CDOSYS

Anda dapat menggunakan kode yang mirip dengan berikut untuk membuat prosedur tersimpan dalam database Anda yang mengirimkan e-mail dengan menggunakan SQL Server OLE otomatisasi disimpan prosedur untuk memohon CDOSYS object model.

Dalam contoh ini, kami menyediakan tingkat kesalahan penanganan untuk memeriksa hresult setiap EXEC sp_OA * pernyataan opsional. Jika hresult (@hr) adalah nol, sebelumnya sp_OA * pernyataan ini sukses. Namun, jika hresult itu bukan nol, sp_OA * pernyataan sebelumnya gagal.

Untuk setiap kegagalan bukan nol hresult, baris dimasukkan ke dalam Daftar Tabel [dbo].[cdosysmail_failures] yang catatan tempat dan waktu dari kegagalan. Selain itu, terakhir kesalahan ditafsirkan dengan menggunakan sp_OAGetErrorInfo disimpan prosedur untuk melaporkan sumber dan deskripsi error. Deskripsi kesalahan itu dicetak untuk sambungan klien. Juga bahwa Deskripsi kesalahan, waktu, dan tempat kegagalan yang dimasukkan ke dalam Daftar Tabel [dbo].[cdosysmail_failures] dalam database sehingga Anda dapat mengidentifikasi dan mendiagnosa kegagalan setelah fakta.

Jika gagal sp_OAGetErrorInfo disimpan prosedur itu sendiri, contoh cetakan pesan galat berikut untuk sambungan klien:

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

Selanjutnya, menggunakan prosedur tersimpan yang Anda buat dan memberikan parameter yang benar.
   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
Catatan Hanya anggota dari peran sysadmin tetap server dapat menjalankan OLE otomatisasi disimpan prosedur. Jika pengguna SQL Server Anda bukanlah anggota dari peran sysadmin tetap server, Anda tidak dapat menggunakan prosedur tersimpan yang disebutkan dalam contoh mengirim e-mail. Dalam situasi seperti ini, Anda mungkin harus mengembangkan aplikasi klien untuk mengirim email dengan CDOSYS. Misalnya, Anda dapat menggunakan aplikasi Microsoft Visual Basic.

CDOSYS mengirim e-mail ke remote server e-mail SMTP yang ditentukan sebagai cdoSMTPServerName.

Server e-mail SMTP mengirim surat ke alamat penyuratan e-mail yang ditentukan dalam untuk: argumen ("someone2@example.com" dalam contoh ini). Nama yang ditentukan dalam dari: argumen muncul sebagai pengirim e-mail ("someone@example.com" dalam contoh ini).

Anda dapat memodifikasi contoh ini untuk mengirim e-mail berbasis teks atau lampiran. Untuk dokumentasi tentang CDOSYS, kunjungi Web site Microsoft berikut:
http://msdn.Microsoft.com/Library
Dalam pane kiri, memperluas Olahpesan dan kolaborasi, memperluas Collaboration Data Objects, dan kemudian memperluas CDO untuk Windows 2000.

Informasi lebih lanjut

Kami sangat menyarankan bahwa Anda mengirim e-mail menggunakan SMTP pickup direktori lokal daripada menggunakan nama e-mail SMTP terpencil. Sampel sp_send_cdosysmail disimpan prosedur berjalan dalam proses dengan SQL Server dan akan gagal jika SMTP server offline atau rusak. Mengirim e-mail melalui Direktori pengambilan lokal hanya memerlukan bahwa prosedur tersimpan memiliki izin untuk Direktori pengambilan. SMTP server independen akan menangani mail.

Untuk informasi lebih lanjut tentang bagaimana cara mengirim pesan dengan menggunakan Direktori pengambilan lokal, klik nomor artikel berikut ini untuk melihat artikel di dalam Pangkalan Pengetahuan Microsoft:
286430 Bagaimana cara mengirim HTML diformat mail menggunakan CDO untuk Windows 2000 dan Direktori pengambilan lokal

Properti

ID Artikel: 312839 - Kajian Terakhir: 24 Juni 2014 - Revisi: 4.0
Berlaku bagi:
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 7.0 Standard Edition
Kata kunci: 
kbsqlsetup kbhowtomaster kbmt KB312839 KbMtid
Penerjemahan Mesin
PENTING: Artikel ini diterjemahkan oleh perangkat lunak penerjemahan mesin Microsoft, dan mungkin telah diedit oleh Masyarakat Microsoft melalui teknologi CTF dan bukan oleh seorang penerjemah profesional. Microsoft menawarkan baik artikel yang diterjemahkan oleh manusia maupun artikel hasil editan terjemahan oleh mesin/komunitas, sehingga Anda dapat mengakses semua artikel di Sentra Pengetahuan yang kami miliki dalam berbagai bahasa. Namun artikel hasil editan mesin atau bahkan komunitas tidak selalu sempurna. Artikel ini dapat mengandung kesalahan dalam hal kosa kata, sintaksis atau tatabahasa, sangat mirip dengan penutur asing yang membuat kekeliruan ketika berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab atas ketidakakuratan, kesalahan atau kerugian apa pun akibat dari kekeliruan dalam penerjemahan isi atau penggunaannya oleh pelanggan kami. Microsoft juga akan senantiasa memperbarui perangkat lunak penerjemahan mesin dan alat untuk menyempurnakan Editan Hasil Penerjemahan Mesin.
Klik disini untuk melihat versi Inggris dari artikel ini: 312839

Berikan Masukan

 

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