• SQL Server 2005 群发邮件


    一、发送邮件配置

    (1)配置工具里的 Surface Area  Configure 工具来配置SQL允许发送邮件“Enable SQL Mail  stored procedures" 和"Enable Database Mail stored procedure"

    (2) sql Management studio --》management -->Database Mail-->右键”Configure Database Mail" 配置发送邮件 ,profle name 要记下来,一会用存储过程发的时候需要指定它。

    发件箱配置

    二、发送邮件
    这里用游标发送邮件,实用waiffor delay 在发了10封后休息1秒钟。

    /*
    通过游标发送邮件,发了十封信户休息1秒钟
    author:adandelin
    createdate: 2008-01-19
    */


    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个邮件吧。

  • 相关阅读:
    React页面插入script
    Node Sass does not yet support your current environment解决办法
    ReactNative项目结构目录详解
    Android Studio模拟器磁盘空间不足(Not enough disk space to run AVD)
    React Native在window下的环境搭建(二):创建新项目
    React Native在window下的环境搭建(一)
    转:解决AndroidStudio连不上Android设备真机的问题
    ios中设置input为readonly后,解决弹起软键盘的问题
    转: rem与px的转换
    Python中模块之collections系列
  • 原文地址:https://www.cnblogs.com/adandelion/p/1045851.html
Copyright © 2020-2023  润新知