SQL Server中发送邮件的新方式

说是新方式,其实也是早就用到的技术了,所以放上来!

在.NET中,大家知道,可以使用System.Web.Mail来发送邮件。在Framework 1.1下支持验证。

private void Page_Load(object sender, System.EventArgs e)
{
       MailMessage mail = new MailMessage();
       mail.To = "
me@mycompany.com";
       mail.From = "
you@yourcompany.com";
       mail.Subject = "this is a test email.";
       mail.Body = "Some text goes here";
       mail.Fields.Add("
http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", "1"); //basic authentication
       mail.Fields.Add("
http://schemas.microsoft.com/cdo/configuration/sendusername", "my_username_here"); //set your username here
      mail.Fields.Add("
http://schemas.microsoft.com/cdo/configuration/sendpassword", "super_secret"); //set your password here

    SmtpMail.SmtpServer = "mail.mycompany.com";  //your real server goes here
    SmtpMail.Send( mail );
}

以前我曾写过在.NET下发送邮件的方法,详见:

http://dev.csdn.net/develop/article/17/17189.shtm

 

SQL Server中,我们一般使用SQL本身的邮件发送方式,但需要配置Exchage Server、Outlook等,也是一个比较繁琐的事情。很多人抱怨说配置不成功。

其实,我们可以在 SQL Server中创建 OLE 对象实例,调用IIS SMTP自带的发送组件来实现邮件发送。

我们建立这个存储过程,你需要修改的地方是,SmtpServer的名字

Create PROCEDURE sys_sendmail @From varchar(100) , @To varchar(100) , @Bcc varchar(500), @Subject varchar(400)=" ", @Body ntext =" "

AS

Declare @object int
Declare @hr int

EXEC @hr = sp_OACreate 'CDO.Message', @object OUT

EXEC @hr = sp_OASetProperty @object, 'Configuration.fields("http://schemas.microsoft.com/cdo/configuration/sendusing").Value','2'
EXEC @hr = sp_OASetProperty @object, 'Configuration.fields("
http://schemas.microsoft.com/cdo/configuration/smtpserver").Value', 'smtp.163.com'

--下面三条语句是smtp验证,如果服务器需要验证,则必须要这三句,你需要修改用户名和密码
EXEC @hr = sp_OASetProperty @object, 'Configuration.fields("
http://schemas.microsoft.com/cdo/configuration/smtpauthenticate").Value','1'
EXEC @hr = sp_OASetProperty @object, 'Configuration.fields("
http://schemas.microsoft.com/cdo/configuration/sendusername").Value','lihonggen0'
EXEC @hr = sp_OASetProperty @object, 'Configuration.fields("
http://schemas.microsoft.com/cdo/configuration/sendpassword").Value','xxx'

EXEC @hr = sp_OAMethod @object, 'Configuration.Fields.Update', null
EXEC @hr = sp_OASetProperty @object, 'To', @To
EXEC @hr = sp_OASetProperty @object, 'Bcc', @Bcc
EXEC @hr = sp_OASetProperty @object, 'From', @From
EXEC @hr = sp_OASetProperty @object, 'Subject', @Subject

EXEC @hr = sp_OASetProperty @object, 'TextBody', @Body
EXEC @hr = sp_OAMethod @object, 'Send', NULL

--判断出错
IF @hr <> 0
BEGIN
   EXEC sp_OAGetErrorInfo @object  
   RETURN @object
END
PRINT 'success'
EXEC @hr = sp_OADestroy @object

GO

注意:必须确保安装Smtp,可以访问CDO对象。

1.使用 MSSQLServer 服务会用到的用户帐户登录到 Microsoft Windows NT? 4.0 或 Windows? 2000 上。该用户帐户必须是本地计算机的管理员和域帐户。 2.确认 Exchange Server 客户端 (Exchnge32.exe) 或 Microsoft Outlook? 客户端 (Outlook.exe) 能够连接到 Exchange Server 而且能够发送电子邮件。如果使用 Outlook,确保 Outlook 安装时选择了 "用于企业或工作组 "选项。 3.确认所用的 Exchange Server 配置文件没有个人消息存储 (.pst)。Exchange Server 配置文件的名字不应超过 32 个字符。 4.在 "服务 "选项卡上,确认 Microsoft Exchange Server 和个人通讯簿是唯一可用的服务,然后单击 "发送 "选项卡。确认 "发送到 "框选定的内容是 Exchange Server 的邮箱,它应该有一个类似于 "邮箱 - <友好的用户名 > "的名字(其 <友好的用户名 >是在第一步登录到 Windows NT 4.0 或 Windows 2000 的用户名)。 5.要运行带有 Exchange Server 的 "SQL 邮件 ",MSSQLServer 服务必须在第一步登录的同一个用户帐户下运行。在 "控制面板 ",双击 "服务 ",选择 MSSQLServer 服务,然后单击 "启动 "。 6.确认 "SQL 邮件 "的配置文件是否正确。在 SQL Server 企业管理器,展开服务器,展开 "支持服务 "文件夹,选择 "SQL 邮件 ",然后用右键单击。单击 "属性 ",然后在 "常规 "选项卡上,确保 "配置文件名 "框指定的配置文件名正确。(事件探查器名必须与第三步用到的配置文件名匹配。)单击 "测试 ",验证配置文件设置正确。 7.如果 "SQL 邮件 "无法启动(例如,显示错误信息指出配置文件不正确),请检查设置确保未将 Outlook Express 设置为默认的电子邮件客户程序。在 "控制面板 "双击 "Internet "选项。在 "程序 "选项卡,验证 Outlook Express 不在电子邮件组合框。如果不得不将默认的电子邮件客户程序更改为 Outlook Express 以外的客户程序,那么,可能需要先验证 "SQL 邮件 "能够用邮件配置文件启动,然后再停止并重启动 MSSQLServer 服务。 在有些情况下,邮件的配置文件可能会损坏而且 "SQL 邮件 "将无法使用它。要更正这个问题,需要把配置文件复制到另一个文件名下,或重创建配置文件。 8.如果用来启动 Microsoft SQL Server? 的帐户没有权限访问 Exchange 服务器,那么就无法使用 "SQL 邮件 "。执行 xp_cmdshell 来测试 SQL Server 对 Exchange Server访问权限,它执行与 "SQL 邮件 "相同的权限。使用下面的命令测试对服务器的连接,假定 Exchange Server 位于名为 "MyServer "的计算机上。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值