أنت غير متصل حاليًا، وفي انتظار الإنترنت الخاص بك ليقوم بإعادة الاتصال

كيفية إرسال البريد الإلكتروني بدون استخدام البريد SQL في SQL Server

هام: تمت ترجمة هذه المقالة باستخدام برامج مايكروسوفت للترجمة الآلية ومن المحتمل ان يتم تحريرها او تدقيقها بعد ذلك من خلال تكنولوجيا منصة مجموعات الترجمة(CTF) او من خلال مترجم بشري. تقدم لك شركة مايكروسوفت هذه المقالات المترجمة بشكل آلي او بالترجمة البشرية او بعد تحريرها وتدقيقها من قبل مجموعات الترجمة حتى تمكنكم من الوصول إلى جميع المقالات الموجودة في قواعد المعرفة لديها بلغات مختلفة. إلا أن المقالات المترجمة قد تحتوي على أخطاء في المفردات او بناء الجمل او النحو. وعليه، فإن شركة مايكروسوفت ليست مسؤولة عن اية أخطاء او عدم دقة في الترجمة او أية أضرار قد تحدث نتيجة أخطاء في ترجمة محتويات النص او استخدامه من قبل العملاء.

312839

في هذه المهمة

الموجز
بريد SQL يوفر طريقة سهلة لإرسال وقراءة البريد الإلكتروني من Microsoft SQL Server. على الرغم من ذلك، للبريد SQL تطبيق MAPI، يجب النظام فرعي ل MAPI موجود على الملقم. تثبيت Microsoft Windows NT 4.0 النظام فرعي ل MAPI عند تثبيت مراسلات Windows. ومع ذلك، لا يوفر نظام التشغيل Microsoft Windows 2000 النظام فرعي ل MAPI. ولذلك، إذا كنت تريد استخدام البريد SQL، يجب تثبيت عميل MAPI مثل Microsoft Outlook.

يمكنك استخدام أساليب أخرى لإرسال البريد الإلكتروني بروتوكول نقل البريد البسيط (SMTP) مباشرة من SQL Server. على سبيل المثال، يمكنك استخدام كائنات بيانات التعاون التعاون بيانات الكائنات ل Windows 2000 (CDOSYS) أو ملقم NT (CDONTS) بالاشتراك مع إجراءات SQL خادم التنفيذ التلقائي OLE المخزنة sp_OA . تحتوي هذه المقالة على أمثلة لكيفية استخدام هذه التقنيات لإرسال بريد إلكتروني إلى ملقم بريد إنترنت. يمكنك تعديل الأساليب حيث تقوم بتوفير نظام المراسلة أكثر فعالية. على سبيل المثال، قد تحتاج إلى إضافة تعليمات برمجية لمعالجة الأخطاء. الأساليب في الأمثلة لا توفر وسيلة للقراءة أو لمعالجة البريد الإلكتروني.

ملاحظة CDOSYS متوفر بدءاً من نظام التشغيل Windows 2000، ونوصي باستخدام CDOSYS بدلاً من CDONTS. CDONTS غير معتمد بواسطة Windows Server 2003 وأنظمة التشغيل الأحدث.

ملاحظة وتوضح هذه الأمثلة البرمجة التقنيات التي يمكن استخدامها لاستدعاء طراز الكائن CDO في عبارات SQL للعمليات. أنت مسؤول عن أية ملحقات البرمجة للأمثلة أو لأي ضغوط الاختبار التي مطلوب لتشغيل التعليمات البرمجية في بيئة إنتاج.

تقدم Microsoft الأمثلة البرمجية للتوضيح فقط، دون أي ضمان سواء ضمنياً أم صريحا. هذا يتضمن دون الحصر، الضمانات الضمنية الخاصة بالتسويق أو الملاءمة لغرض معين. تفترض هذه المقالة أنك معتاد على لغة البرمجة التي يتم شرحها والأدوات المستخدمة لإنشاء الإجراءات وتصحيحها. يساعد مهندسو الدعم لدى Microsoft شرح وظيفة إجراء محدد، ولكن لن يقوموا بتعديل هذه الأمثلة لتقديم وظيفة إضافية أو إنشاء إجراءات تستوفي متطلبات محددة.

كيفية استخدام CDO لنظام التشغيل Microsoft Windows NT Server (CDONTS)

CDONTS هو بروتوكول نقل بريد بسيط (SMTP) OLE ملقم معين تم تصميمه خصيصا لتوفير وظائف المراسلة للتطبيقات المستندة إلى ويب. وهكذا، CDONTS يدعم إرسال بريد إلكتروني مستندة إلى HTML. التطبيقات المستندة إلى Mapi، مثل بريد SQL، لا. بشكل افتراضي، يقوم Microsoft معلومات ملقم الإنترنت 4.0 أو الأحدث، تثبيت CDONTS. بشكل افتراضي، يقوم Microsoft Windows 2000 تثبيت Microsoft Internet Information Server (IIS) 5.0.

لمزيد من المعلومات حول CDONTS، انقر فوق رقم المقالة التالي لعرضها في "قاعدة المعارف ل Microsoft":
177850 ما هو الفرق بين CDO 1.2 و CDONTS؟
يرسل CDONTS البريد الإلكتروني عبر SMTP إلى الملقم المحلي. إذا لم تكن خادم SMTP على الملقم المحلي لديك، يمكنك استخدام خادم SMTP الظاهري الذي يثبت IIS لتوجيه البريد الإلكتروني SMTP الخاص بك إلى خادم بريد SMTP المناسبة. لاستخدام CDONTS لإرسال بريد إلكتروني من SQL Server، اتبع الخطوات التالية:
  1. تثبيت IIS وأنها تعمل على جهاز الكمبيوتر هذا إيسرونينج SQL Server.
  2. حدد ملقم البريد SMTP باسم المضيف الخاص بك "الذكية" أن خدمة IIS SMTP تلقائياً بتوجيه أي بريد SMTP الإلكتروني التي يتم إرسالها إلى الملقم يورلوكال لخادم بريد SMTP للتسليم.
  3. إنشاء إجراء مخزن في SQL Server التي يمكنك استخدامها في البريد الإلكتروني توسيند.
عند استخدام CDONTS بدلاً من البريد SQL، لم تكن لعميل بريد مثل Microsoft Outlook مثبتاً على جهاز الكمبيوتر الذي يستخدم SQL Server. كما لم تكن لخادم Microsoft Exchange. يمكنك استخدام أي ملقم البريد الذي يدعم بريد SMTP الإلكتروني باسم المضيف الخاص بك "الذكية." ومع ذلك، لا يمكن قراءة ومعالجة البريد الإلكتروني التي يتم إرسالها إلى جهاز الكمبيوتر الذي يستخدم SQL Server باستخدام CDONTS. لا يمكن أيضا استبدال وظيفة البريد عامل SQL.

الإرشادات التالية تعتمد على نظام التشغيل Microsoft Windows 2000. إذا تم تثبيت IIS 4.0 على جهاز الكمبيوتر، يمكنك تكوين نظام التشغيل Microsoft Windows NT 4.0 بالمثل. ومع ذلك، سوف تختلف الخطوات قليلاً.

لمزيد من المعلومات حول كيفية تكوين "المضيف الذكية" في Microsoft Windows NT 4.0، انقر فوق رقم المقالة التالي لعرضها في "قاعدة المعارف ل Microsoft":
230235 كيفية تكوين خدمة SMTP ترحيل البريد IIS SMTP

تكوين المضيف الذكية

  1. انقر فوق ابدأ، أشر إلى البرامج، وأشر إلى أدوات إدارية، ثم
    انقر فوق إدارة خدمات إنترنت لفتح "إدارة IIS".
  2. فتح الشجرة للملقم الخاص بك. زر الماوس الأيمن فوق الملقم الظاهري SMTP الافتراضية، ومن ثم انقر فوق خصائص.
  3. حدد علامة التبويب التسليم ، ومن ثم انقر فوق خيارات متقدمة.
  4. اكتب اسم خادم بريد SMTP الخاص بك في مربع النص المضيف الذكية . إذا كنت لا تعرف اسم سيرفيركونتاكت بريد SMTP الخاص بك مسؤول البريد الخاص بك.
  5. تأكد من أن يتم تشغيل خدمة بروتوكول نقل البريد البسيط (SMTP). خدمة SMTP جزء من Service.Therefore مسؤول IIS، يجب أيضا تشغيل خدمة مسؤول IIS.

إنشاء إجراء مخزن لإرسال البريد الإلكتروني CDONTS

ملاحظة الشركات، المؤسسات، منتجات، أسماء المجال، عناوين البريد الإلكتروني، الشعارات، والأشخاص والأماكن والأحداث المذكورة في هذه المقالة وهمية. تهدف أي ارتباط مع أي شركة حقيقية، المؤسسة، المنتج، اسم المجال، عنوان البريد الإلكتروني، شعار، الشخص أو أماكن أو أحداث أو الإشارة إليها.

يمكنك استخدام تعليمات برمجية مشابهة لما يلي لإنشاء إجراء مخزن في قاعدة البيانات الخاصة بك بإرسال بريد إلكتروني باستخدام الإجراءات SQL خادم التنفيذ التلقائي OLE المخزنة لاستدعاء طراز الكائن 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

وبعد ذلك، استخدم الإجراء المخزن الذي قمت بإنشائه وتوفير المعلمات الصحيحة:
exec sp_send_cdontsmail 'someone@example.com','someone2@example.com','Test of CDONTS','It works'
ملاحظة يمكن فقط لأعضاء دور مسؤول النظام sysadmin الثابت على الملقم تشغيل إجراءات التنفيذ التلقائي OLE المخزنة. إذا لم يكن SQL Server المستخدم عضوا دور مسؤول النظام sysadmin الثابت على الملقم، لا يمكنك استخدام إجراء مخزن المذكورة في المثال لإرسال بريد إلكتروني. وفي هذه حالة، قد يلزم تطوير تطبيق عميل لإرسال بريد إلكتروني باستخدام CDONTS. على سبيل المثال، يمكنك استخدام أحد تطبيقات Microsoft Visual Basic.

CDONTS لإرسال البريد الإلكتروني إلى خادم SMTP الظاهري المحلي. الملقم ثم بتوجيه البريد الإلكتروني إلى خادم بريد SMTP المحدد في مربع النص المضيف الذكية . خادم بريد SMTP لإرسال البريد إلى عنوان البريد الإلكتروني المحدد في إلى: الوسيطة ("someone2@example.com" في المثال). الاسم الذي تم تحديده في من: الوسيطة
يظهر كمرسل البريد الإلكتروني ("someone@example.com" في هذا المثال) مع موضوع "اختبار CDONTS" والرسالة "أنه يعمل" النص الأساسي لرسالة البريد الإلكتروني. يتم نسخ أي شخص على البريد الإلكتروني لأنه لم تدخل وسيطة ل نسخة أو مخفية .

يمكنك تعديل المثال حيث سيتم إرسال البريد الإلكتروني المستندة إلى HTML أو المرفقات. للحصول على وثائق حول CDONTS، قم بزيارة موقع Microsoft التالي على الويب: في الجزء الأيمن، قم بتوسيع المراسلة والمساهمة، قم بتوسيع كائنات بيانات التعاونثم قم بتوسيع CDO 1.2.1.

يمكن العثور على وثائق للحصول على إجراءات SQL خادم التنفيذ التلقائي OLE المخزنة في كتب SQL Server 2000.

back to the top

كيفية استخدام CDO Microsoft Windows 2000 (CDOSYS)

CDOSYS يوفر طراز كائن لتطوير تطبيقات الرسائل على نظام التشغيل Microsoft Windows 2000. كما يوفر وظائف محسنة عبر مكتبة CDO لنظام التشغيل Windows NT Server (CDONTS) موجودة. يتطلب CDOSYS Windows 2000، وملف محلي أو ملقم SMTP بعيد.

يمكنك تكوين CDOSYS للإشارة إلى ملقمات SMTP برمجياً لإعطاء المطورين مرونة في تكوين خوادم SMTP.

لمزيد من المعلومات حول CDOSYS، انقر فوق رقم المقالة التالي لعرضها في "قاعدة المعارف ل Microsoft":
195683 العلاقة بين CDOSYS ومكتبات CDO 1.x.DLL
لأن CDOSYS يمكن إرسال بريد إلكتروني إلى ملقم SMTP بعيد، CDOSYS لا تتطلب وجود "ملقم معلومات إنترنت" مثبتة وقيد التشغيل على الكمبيوتر الذي يستخدم SQL Server. كما لم تكن لتكوين خادم SMTP الظاهري. كل ما عليك القيام به هو إنشاء إجراء مخزن في SQL Server التي يمكنك استخدامها لإرسال بريد إلكتروني.

عند استخدام CDOSYS بدلاً من البريد SQL، لم تكن لعميل بريد مثل Microsoft Outlook مثبتاً على جهاز الكمبيوتر الذي يستخدم SQL Server. كما لم تكن لخادم Exchange. يمكنك استخدام أي ملقم البريد الذي يدعم بريد SMTP كخادم SMTP البريد البعيد. ومع ذلك، لا يمكن قراءة أو معالجة البريد الإلكتروني التي يتم إرسالها إلى SQL Server إذا كنت تستخدم CDOSYS. لا يمكن أيضا استبدال وظيفة البريد عامل SQL.

استخدام CDOSYS مع SQL خادم التنفيذ التلقائي OLE الكائن يعتمد على SQL خادم التنفيذ التلقائي OLE لاستدعاء طراز الكائن CDOSYS. تم اختبار هذا مع حزمة الخدمة service Pack 2 (SP2) SQL Server 2000 و SQL Server 2000 Service Pack 1 (SP1). ولا تضمن Microsoft أن CDOSYS يمكن استدعاؤها من إجراءات التنفيذ التلقائي OLE المخزنة على إصدارات SQL Server التي تم إصدارها من قبل SQL Server 2000 SP1.

إنشاء إجراء مخزن لإرسال بريد CDOSYS

يمكنك استخدام تعليمات برمجية مشابهة لما يلي لإنشاء إجراء مخزن في قاعدة البيانات الخاصة بك بإرسال بريد إلكتروني باستخدام الإجراءات SQL خادم التنفيذ التلقائي OLE المخزنة لاستدعاء طراز الكائن CDOSYS.

في هذه العينة، نقدم درجة اختيارية لمعالجة الأخطاء للتحقق hresult كل عبارة sp_OA EXEC * . إذا كان صفراً hresult (@hr)، كشف sp_OA * السابقة كانت ناجحة. على الرغم من ذلك، إذا كان ذلك hresult غير صفري، فشلت عبارة sp_OA * السابقة.

لكل فشل hresult غير صفرية، يتم إدراج صف في الجدول [dbo].[cdosysmail_failures] التي تلاحظ المكان والوقت للفشل. بالإضافة إلى ذلك، يتم تفسير خطأ آخر باستخدام الإجراء sp_OAGetErrorInfo تخزين مصدر ووصف الخطأ. تتم طباعة هذا وصف الخطأ لاتصال العميل. كما يتم إدراج ذلك وصف الخطأ ووقت ومكان الفشل في الجدول [dbo].[cdosysmail_failures] في قاعدة البيانات وبذلك يمكن تعريف وتشخيص حالات الفشل بعد وقوعها.

في حالة فشل الإجراء sp_OAGetErrorInfo تخزين نفسه، يطبع المثال إلى اتصال العميل رسالة الخطأ التالية:

فشل sp_OAGetErrorInfo
-- drop old cdosysmail_failures table if 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
وبعد ذلك، استخدم الإجراء المخزن الذي قمت بإنشائه وتوفير المعلمات الصحيحة.
   declare @Body varchar(4000)   select @Body = 'This is a Test Message'   exec sp_send_cdosysmail 'someone@example.com','someone2@example.com','Test of CDOSYS',@Body
ملاحظة يمكن فقط لأعضاء دور مسؤول النظام sysadmin الثابت على الملقم تشغيل إجراءات التنفيذ التلقائي OLE المخزنة. إذا لم يكن SQL Server المستخدم عضوا دور مسؤول النظام sysadmin الثابت على الملقم، لا يمكنك استخدام إجراء مخزن المذكورة في المثال لإرسال بريد إلكتروني. وفي هذه حالة، قد يلزم تطوير تطبيق عميل لإرسال البريد باستخدام CDOSYS. على سبيل المثال، يمكنك استخدام أحد تطبيقات Microsoft Visual Basic.

CDOSYS لإرسال البريد الإلكتروني إلى خادم بريد SMTP البعيد الذي تم تحديده كدوسمتبسيرفيرنامي.

خادم بريد SMTP لإرسال البريد إلى عنوان البريد الإلكتروني المحدد في إلى: الوسيطة ("someone2@example.com" في هذا المثال). الاسم الذي تم تحديده في من: وسيطة تظهر كمرسل البريد الإلكتروني ("someone@example.com" في هذا المثال).

يمكنك تعديل هذا المثال لإرسال البريد الإلكتروني المستندة إلى النص أو المرفقات. للحصول على وثائق حول CDOSYS، قم بزيارة موقع Microsoft التالي على الويب: في الجزء الأيمن، قم بتوسيع المراسلة والمساهمة، قم بتوسيع كائنات بيانات التعاونثم قم بتوسيع CDO لنظام التشغيل Windows 2000.

back to the top
معلومات أخرى
نوصي بشدة إرسال بريد إلكتروني باستخدام دليل الالتقاط SMTP المحلي بدلاً من استخدام اسم بريد SMTP البعيد. نموذج sp_send_cdosysmail تخزين تشغيل الإجراء في العملية مع SQL Server وستفشل إذا كان خادم SMTP دون اتصال أو مقطوعة. إرسال بريد إلكتروني من خلال دليل الالتقاط المحلي يتطلب فقط أن الإجراء المخزن لديه الإذن لدليل الالتقاط. سيقوم خادم SMTP البريد بشكل مستقل.

لمزيد من المعلومات حول كيفية إرسال البريد باستخدام دليل الالتقاط المحلي، انقر فوق رقم المقالة التالي لعرضها في "قاعدة المعارف ل Microsoft":
286430 كيفية إرسال HTML منسق البريد باستخدام CDO لنظام التشغيل Windows 2000 ودليل الالتقاط المحلي
pop3 إنترنت lotus notes novell groupwise

تحذير: تمت ترجمة هذا المقال تلقائياً

خصائص

رقم الموضوع: 312839 - آخر مراجعة: 06/24/2014 04:50:00 - المراجعة: 2.0

  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 7.0 Standard Edition
  • kbsqlsetup kbhowtomaster kbmt KB312839 KbMtar
تعليقات