MSSQL2005 发送SMTP 邮件的设置

配置前说明:

就像我们其他场景发送邮件一样,我们需要配置SMTP服务器地址,账户, 密码,邮箱等信息。

在SQL Server2005 中,为了避免某个邮件服务器的问题导致无法发送邮件的问题,SQL Server 2005 引入了 mail profile 这个东东。一个 profile 中可以包含多个 account (邮件帐户),这样,SQL Server 发邮件的时候会依次尝试 profile 中的多个邮件帐户,如果发送成功,则退出,否则,利用下一个邮件帐户发送邮件。

我们需要先完成mail profile 的配置,以及数据库邮箱的一些设置,然后发送邮件就只需要一个简单的SQL语句就搞定了。

配置数据库邮箱功能

如下图所示,在SQL Server Management Studio中启动配置数据库邮件。

9001

我们会依次看到下面的步骤:

9002

在如下的步骤,我们来设置数据库Mail。

9003

下面这一步,我们需要给Mail Profile起个名字,之后发送邮件时会用到。

同时在 SMTP accounts 中加入可用的发送邮件服务器以及帐号,密码

 9004

点击 add 可以看到下面的图

9011

根据你的情况,增加发送的帐号。至少一个。

完成邮件帐号配置后,继续下去则是如下图:

9005

Private Profiles 部分的信息如下:

9006

这里是邮件的一些限制设置

9007

 

这一步是要让我们确认一下我们的设置

9008

点击完成,系统将完成数据库邮件的设置

9009

 

完成上述步骤,我们就设置好了数据库邮件。

发送邮件的测试

我们可以通过下面地址,发送封测试邮件

9010

就会出现下面的发送测试邮件的窗口,输入要接收者的邮箱地址,点击发送测试邮件,测试邮件就发送出去了。

9012

这时候,SQL 方式发送测试邮件则是如下的SQL 语句

exec msdb..sp_send_dbmail
 @profile_name =  '报表通知邮件配置'           -- profile 名称
,@recipients   =  'ghj1976@csdn.net'          -- 收件人邮箱
,@subject      =  'SQL Server 2005 Mail Test' -- 邮件标题
,@body         =  'Hello Mail!'               -- 邮件内容
,@body_format  =  'TEXT'                      -- 邮件格式

 

参考资料: 

在 SQL Server 2005/2008 中,使用 Gmail 帐号配置数据库邮件功能
http://space.zdnet.com.cn/html/82/289382-2777798.html



群发时可以参考存储过程

/*
通过游标发送邮件,发了十封信户休息1秒钟
*/


BEGIN TRY
    
Declare @MailAddress varchar(20),@Id int
    
DECLARE CMail CURSOR  for
        
select  top 2   usermail,UserId from usersmail
            
where issend=0 and updatedate <getdate()+1
    
open CMail

    
declare @Count int
    
set @count = 1

    
FETCH NEXT FROM CMail into @MailAddress,@id
    
while @@FETCH_STATUS =0
    
BEGIN
        
EXEC msdb.dbo.sp_send_dbmail  --调用SQL2005的邮件发送的存储过程。
            @profile_name = 'sohu',  --就是在步骤2中的配置文件名。
            --调用发送邮件的存储过程,登录帐号必须有msdb的datamail权限
            @recipients = @Mailaddress,--用来接受邮件的地址
            @subject = '诗词在线邮件',
            
@body = '<a href="http://www.52shici.cn"  target="_blank"  >诗词在线欢迎您!</a>' ,
            
@body_format ='HTML'
        
update usersmail 
            
set isSend = '1' 
            
where userid = @id
        
print @id
        
--如果发了10个了,那休息一秒钟
        if @Count>9 and  @count%10 = 0
        
begin
            
waitfor DELAY  '00:01'
            
print 'delay 1 second'
        
end
        
SET @Count = @count+1
        
--下一列
        FETCH NEXT FROM CMail
       
INTO @MailAddress@id
    
END 
    
--update usersmail set IsSend = 0
    CLOSE CMail
    
DEALLOCATE CMail
END TRY
--捕捉异常
BEGIN CATCH
    
SELECT 
        ERROR_NUMBER() 
as ErrorNumber,
        ERROR_MESSAGE() 
as ErrorMessage
END CATCH;


出错分析:

发送后可以
SELECT * FROM msdb.dbo.sysmail_allitems
来查看邮件发送是否成功。
如果想看详细的异常信息那么
SELECT * FROM msdb.dbo.sysmail_event_log
或者sql Management studio --》management -->Database Mail-->右键 View Database mail log

用10封测试的时候发送成功,后来发100个的时候有问题了。日志里:
xsi:schemaLocation="http://schemas.microsoft.com/databasemail/responses ResponseTypes.xsd" xmlns:responses="http://schemas.microsoft.com/databasemail/responses">
  <Information>
    <Failure Message="The mail could not be sent to the recipients because of the mail server failure. (Sending Mail using Account 2 (2008-01-19T23:12:21). Exception Message: Cannot send mails to mail server. (语法错误,无法识别命令。 服务器响应为: 5.7.0 Sohu sender blocked!). )" />
  </Information>
  <MailItemId Id="191" />
  <SentStatus Status="3" />
  <SentAccountId Id="0" />
  <SentDate Date="2008-01-19T23:12:21" />
  <CallingProcess Id="1892" />
</responses:SendMail>

估计是sohu有的邮件进行了设置不可以连续向一个邮箱发N个邮件吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值