在SQL Server中,使用CDONTS发送邮件,并让发件人显示姓名而不是单纯的邮件地址

 
使用 SQL Server SQL Mail 发送邮件不好配置, 还是用微软的 CDO for Microsoft Windows NT Server (CDONTS) ,来得更容易。
下面是发送邮件的存储过程:
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
/***************************************************************************************
    者: shongshong 修改加注
    期: 2007 1 15
目  的: 使用 MS CDONTS 发送邮件
参数说明:
@SMTPSERVER varchar(100)-- 发送服务器
,@USER_ID VARCHAR(100)-- 用户名
,@USER_PWD VARCHAR(30)-- 密码
,@From varchar(100)-- 发件人 MAIL
,@To varchar(100)-- 收件人 MAIL
,@Bcc varchar(500)-- 副本 MAIL
,@Subject varchar(400)=" "-- 邮件标题
,@Body varchar(1000) =" " -- 邮件内容
范    例:              
exec sys_sendmail ' 发送服务器 ',' 用户名 ',' 密码 ', ' 发件人 MAIL,' 收件人 MAIL',' 副本 MAIL',' 邮件标题 ',' 邮件内容 '
'***************************************************************************************/
CREATE       PROCEDURE sys_sendmail @SMTPSERVER varchar(100),@USER_ID VARCHAR(100),@USER_PWD VARCHAR(30), @From varchar(100) , @To varchar(100) , @Bcc varchar(500), @Subject varchar(400)=" ", @Body varchar(1000) =" "
AS
Declare @SQLSTRING varchar(8000)
set @SQLSTRING='Declare @object int '+char(13)
set @SQLSTRING=@SQLSTRING+'Declare @hr int '+char(13)
set @SQLSTRING=@SQLSTRING+'EXEC @hr = sp_OACreate ''CDO.Message'', @object OUT '+char(13)
-- 设定服务器地址
set @SQLSTRING=@SQLSTRING+'EXEC @hr = sp_OASetProperty @object, ''Configuration.fields("http://schemas.microsoft.com/cdo/configuration/sendusing").Value'',''2'' '+char(13)
set @SQLSTRING=@SQLSTRING+'EXEC @hr = sp_OASetProperty @object, ''Configuration.fields("http://schemas.microsoft.com/cdo/configuration/smtpserver").Value'', '''+@SMTPSERVER+''''+char(13)
-- 设定验证用户名和密码
set @SQLSTRING=@SQLSTRING+'EXEC @hr = sp_OASetProperty @object, ''Configuration.fields("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate").Value'',''1'' '+char(13)
set @SQLSTRING=@SQLSTRING+'EXEC @hr = sp_OASetProperty @object, ''Configuration.fields("http://schemas.microsoft.com/cdo/configuration/sendusername").Value'','''+@USER_ID+''''+char(13)
set @SQLSTRING=@SQLSTRING+'EXEC @hr = sp_OASetProperty @object, ''Configuration.fields("http://schemas.microsoft.com/cdo/configuration/sendpassword").Value'','''+@USER_PWD+''''+char(13)
-- 设定 收件人,副本,发件人,邮件标题
set @SQLSTRING=@SQLSTRING+'EXEC @hr = sp_OAMethod @object,''Configuration.Fields.Update'', null'+char(13)
set @SQLSTRING=@SQLSTRING+'EXEC @hr = sp_OASetProperty @object, ''To'', '''+@To+''''+char(13)
set @SQLSTRING=@SQLSTRING+'EXEC @hr = sp_OASetProperty @object, ''Bcc'', '''+@Bcc+''''+char(13)
set @SQLSTRING=@SQLSTRING+'EXEC @hr = sp_OASetProperty @object, ''From'', '''+@From+''''+char(13)
set @SQLSTRING=@SQLSTRING+'EXEC @hr = sp_OASetProperty @object, ''Subject'','''+@Subject+''''+char(13)
-- 设定支持格式,邮件内容
set @SQLSTRING=@SQLSTRING+'EXEC @hr = sp_OASetProperty @object, ''TextBody'', '''+@Body+''''+char(13)--Text 格式
--set @SQLSTRING=@SQLSTRING+'EXEC @hr = sp_OASetProperty @object, ''HtmlBody'', '''+@Body+''''+char(13)--HTML 格式的邮件
set @SQLSTRING=@SQLSTRING+'EXEC @hr = sp_OAMethod @object, ''Send'', NULL'+char(13)
-- 判断是否发送成功
set @SQLSTRING=@SQLSTRING+'IF @hr <> 0'+char(13)
set @SQLSTRING=@SQLSTRING+'BEGIN'+char(13)
set @SQLSTRING=@SQLSTRING+' EXEC sp_OAGetErrorInfo @object   '+char(13)
set @SQLSTRING=@SQLSTRING+'END'+char(13)
set @SQLSTRING=@SQLSTRING+'PRINT ''success'''+char(13)
set @SQLSTRING=@SQLSTRING+'EXEC @hr = sp_OADestroy @object'+char(13)
exec(@SQLSTRING)
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
上面的存储过程你在网上搜一下就可以找到一打的,我只不过是加了一些注释方便自己理解。
这里要说的是我发现的一个东西。当我们用上面的存储过程给用户发邮件时,收件人收到的邮件显示的发件人是一个 E-mail 地址,而当客户要求要显示发件人姓名时这个存储过程好像没有办法了。当我无计可施时,忽然想起 OUT LOOK 中复制一个发件人到新增的邮件的收件人一栏时会发生这样的变化:我复制发件人 ”shongshong” 到收件人一栏,粘贴上去之后会变成 ”shongshong<shong@Gamil.com>” 。于是我就想,我将“发送 MAILE ”变成这种格式是否可以发送邮件给收件人,并让收件人收到的邮件中发件人显示姓名。
我试了一下,结果是可以的。耶 !! 问题解决。
还有一点要提的是,当我们用正确的用户名与密码登入发送服务器后,我们用这个发送服务器中任一存在的邮件账号都可以发邮件出去。也就是说,发件人可以填你知道的发送服务器中任意邮件账号。
 
参考文献:
How to send e-mail without using SQL Mail in SQL Server
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值