使用SQL Server 2000发送邮件

时间:2009-10-26 10:18:11

标签: sql sql-server

重复: Automated SMTP (not MAPI) emails using SQL Server Job Scheduler


我想使用Windows smtp组件使用SQL Server 2000使用存储过程发送邮件。我不想要第三方组件。我的SMTP服务器名称='mail.met.net'.how使用sql server 2000发送邮件?

CREATE PROCEDURE [dbo].[sp_send_mail]
  @from varchar(500) ,
  @password varchar(500) ,
  @to varchar(500) ,  
  @subject varchar(500),
  @body varchar(4000) ,
  @bodytype varchar(10),
  @output_mesg varchar(10) output,
  @output_desc varchar(1000) output
AS
DECLARE @imsg int
DECLARE @hr int
DECLARE @source varchar(255)
DECLARE @description varchar(500)

EXEC @hr = sp_oacreate 'cdo.message', @imsg out

--SendUsing Specifies Whether to send using port (2) or using pickup directory (1)
EXEC @hr = sp_oasetproperty @imsg,
'configuration.fields("http://schemas.microsoft.com/cdo/configuration/sendusing").value','2'

--SMTP Server
EXEC @hr = sp_oasetproperty @imsg, 
  'configuration.fields("http://schemas.microsoft.com/cdo/configuration/smtpserver").value', 
  'mail.met.net' 

--UserName
EXEC @hr = sp_oasetproperty @imsg, 
  'configuration.fields("http://schemas.microsoft.com/cdo/configuration/sendusername").value', 
  @from 

--Password
EXEC @hr = sp_oasetproperty @imsg, 
  'configuration.fields("http://schemas.microsoft.com/cdo/configuration/sendpassword").value', 
  @password 

--UseSSL
EXEC @hr = sp_oasetproperty @imsg, 
  'configuration.fields("http://schemas.microsoft.com/cdo/configuration/smtpusessl").value', 
  'True' 

--PORT 
EXEC @hr = sp_oasetproperty @imsg, 
  'configuration.fields("http://schemas.microsoft.com/cdo/configuration/smtpserverport").value', 
  '465' 

--Requires Aunthentication None(0) / Basic(1)
EXEC @hr = sp_oasetproperty @imsg, 
  'configuration.fields("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate").value', 
  '1' 

EXEC @hr = sp_oamethod @imsg, 'configuration.fields.update', null
EXEC @hr = sp_oasetproperty @imsg, 'to', @to
EXEC @hr = sp_oasetproperty @imsg, 'from', @from
EXEC @hr = sp_oasetproperty @imsg, 'subject', @subject

-- if you are using html e-mail, use 'htmlbody' instead of 'textbody'.

EXEC @hr = sp_oasetproperty @imsg, @bodytype, @body
EXEC @hr = sp_oamethod @imsg, 'send', null

SET @output_mesg = 'Success'

-- sample error handling.
IF @hr <>0 
 SELECT @hr
 BEGIN
  EXEC @hr = sp_oageterrorinfo null, @source out, @description out
  IF @hr = 0
  BEGIN
   --set @output_desc = ' source: ' + @source
   set @output_desc =  @description
  END
 ELSE
 BEGIN
  SET @output_desc = ' sp_oageterrorinfo failed'
 END
 IF not @output_desc is NULL
   SET @output_mesg = 'Error'
END
EXEC @hr = sp_oadestroy @imsg
GO

1 个答案:

答案 0 :(得分:0)

你有没有尝试过使用过CDO?您不必安装任何其他东西 这是DTS ActiveX中的一个示例,您可以使用sp_OAMethod等将其转换为T-SQL:

'**********************************************************************
'  Visual Basic ActiveX Script
'************************************************************************

Function Main()
    Set objMessage = CreateObject("CDO.Message") 
    objMessage.Subject = "Testing" 
    objMessage.From = "email" 
    objMessage.To = "email"
    objMessage.ReplyTo = "email" 
    objMessage.TextBody = "Sample Text" 
    objMessage.AddAttachment "Attachment File"

    objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2 

    'Name or IP of Remote SMTP Server
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "SMTPServer"

    'Server port (typically 25)
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25 

    objMessage.Configuration.Fields.Update

    objMessage.Send
    Main = DTSTaskExecResult_Success
End Function