姓名     工号     金额   邮件地址
戴军 DJV003 12    [email protected]
戴军 DJV003 23    [email protected]
蒋万明 JWM001 14    [email protected]
马庆弢 MQT001 9     [email protected]
马庆弢 MQT001 4     [email protected]
王梅 WMV003 1     [email protected]
王梅 WMV003 33    [email protected]
王梅 WMV003 24    [email protected]
以上数据想实现从第一行开始每读取完一个工号的数据,就自动发送一封邮件,邮件内容为该工号的数据。
比如:读取第一个工号,则发送邮箱地址:[email protected].邮件内容:
姓名     工号     金额   邮件地址
戴军 DJV003 12    [email protected]
戴军 DJV003 23    [email protected]
接着读第二个工号,则发送邮箱地址:[email protected].邮件内容:
姓名     工号     金额   邮件地址
蒋万明 JWM001 14    [email protected]
就这样循环,请问用存储过程可以实现吗?要不用其他方法可以实现吗?

解决方案 »

  1.   


    SQL Server 并没有内置邮件服务器(Mail Server),它跟我们发送邮件一样,需要用户名和密码通过 SMTP(Simple Message Transfer Protocol)去连接邮件服务器。我们想让 SQL Server 来发送邮件,首先要告诉它用户名称,密码,服务器地址,网络传送协议,邮件服务器的端口等信息。
      以下脚本实现了数据库邮件的配置:
    --下面是具体的配置邮件步骤 
    --在 sa 系统帐户下运行。 
    --
    --1. 启用 SQL Server 2005 邮件功能。 
    use master
    go
    exec sp_configure 'show advanced options',1
    go
    reconfigure
    go
    exec sp_configure 'Database mail XPs',1
    go
    reconfigure
    go
    --2. 在 SQL Server 2005 中添加邮件帐户(account) 
    exec msdb..sysmail_add_account_sp
            @account_name            = 'jgj'      -- 邮件帐户名称(SQL Server 使用)
           ,@email_address           = [email='[email protected]']'[email protected]'[/email] -- 发件人邮件地址
           ,@display_name            = null                      -- 发件人姓名
           ,@replyto_address         = null
           ,@description             = null
           ,@mailserver_name         = '203.86.70.229'           -- 邮件服务器地址
           ,@mailserver_type         = 'SMTP'                    -- 邮件协议(SQL 2005 只支持 SMTP)
           ,@port                    = 25                        -- 邮件服务器端口
           ,@username                = [email='[email protected]']'[email protected]'[/email] -- 用户名
           ,@password                = 'xxxxxx'      -- 密码
           ,@use_default_credentials = 0
           ,@enable_ssl              = 0
           ,@account_id              = null
    --3. 在 SQL Server 2005 中添加 profile 
    exec msdb..sysmail_add_profile_sp @profile_name = 'dba_profile'      -- profile 名称 
                                     ,@description  = 'dba mail profile' -- profile 描述 
                                     ,@profile_id   = null
    -- 在 SQL Server 2005 中映射 account 和 profile 
    exec msdb..sysmail_add_profileaccount_sp  @profile_name    = 'dba_profile' -- profile 名称 
                                             ,@account_name    = 'jgj'     -- account 名称 
                                             ,@sequence_number = 1             -- account 在 profile 中顺序 
    --5. 利用 SQL Server 2005 Database Mail 功能发送邮件。 
    exec msdb..sp_send_dbmail @profile_name =  'dba_profile'     -- profile 名称 
                             ,@recipients   =  [email='[email protected]']'[email protected]'[/email]  -- 收件人邮箱 
                             ,@subject      =  'SQL Server 2005 Mail 测试' -- 邮件标题 
                             ,@body         =  'Hello Mail!测试'   -- 邮件内容 
                             ,@body_format  =  'TEXT'      -- 邮件格式 
    --6. 查看邮件发送情况: 
    use msdb
    go
    select * from sysmail_allitems
    select * from sysmail_mailitems
    select * from sysmail_event_log
    --如果不是以 sa 帐户发送邮件,则可能会出现错误: 
    --
    --Msg 229, Level 14, State 5, Procedure sp_send_dbmail, Line 1
    --EXECUTE permission denied on object 'sp_send_dbmail', database 'msdb', schema 'dbo'.
    --
    --这是因为,当前 SQL Server 登陆帐户(login),在 msdb 数据库中没有发送数据库邮件的权限,需要加入 msdb 数据库用户,并通过加入 sp_addrolemember 角色赋予权限。假设该SQL Server 登陆帐户名字为 “dba” 
    --
    --use msdb
    --go
    --
    --create user dba for login dba
    --go
    --
    --exec dbo.sp_addrolemember @rolename   = 'DatabaseMailUserRole',
    --                          @membername = 'dba'
    --go
    --
    --此时,再次发送数据库邮件,仍可能有错误: 
    --
    --Msg 14607, Level 16, State 1, Procedure sp_send_dbmail, Line 119
    --profile name is not valid
    --
    --虽然,数据库用户 “dba” 已经在 msdb 中拥有发送邮件的权限了,但这还不够,他还需要有使用 profile:“dba_profile” 的权限。 
    --
    --use msdb
    --go
    --
    --exec sysmail_add_principalprofile_sp  @principal_name = 'dba'
    --                                     ,@profile_name   = 'dba_profile'
    --                                     ,@is_default     = 1
    --
    --从上面的参数 @is_default=1 可以看出,一个数据库用户可以在多个 mail profile 拥有发送权限。
      

  2.   

    写循环 (游标 或者 while)可以在循环中,取一个一发信,也可以在循环中拼接出所有的发信sql再一起执行
      

  3.   

    发邮件 还是用java mail 吧 ,数据库怎么发邮件.