如何从SQL Server发送电子邮件?

moe*_*moe 53 sql t-sql sql-server

如何使用T-SQL发送电子邮件,但电子邮件地址存储在表中?我想遍历表格并能够发送电子邮件.到目前为止,我找不到这样做的好例子.

谢谢你的帮助

Ruz*_*ani 70

步骤1)创建个人资料和帐户

您需要使用"配置数据库邮件向导"创建配置文件和帐户,该向导可以从"管理节点"中"数据库邮件"节点的"配置数据库邮件"上下文菜单中访问.此向导用于管理帐户,配置文件和数据库邮件全局设置.

第2步)

跑:

sp_CONFIGURE 'show advanced', 1
GO
RECONFIGURE
GO
sp_CONFIGURE 'Database Mail XPs', 1
GO
RECONFIGURE
GO
Run Code Online (Sandbox Code Playgroud)

第3步)

USE msdb
GO
EXEC sp_send_dbmail @profile_name='yourprofilename',
@recipients='test@Example.com',
@subject='Test message',
@body='This is the body of the test message.
Congrates Database Mail Received By you Successfully.'
Run Code Online (Sandbox Code Playgroud)

循环遍历表格

DECLARE @email_id NVARCHAR(450), @id BIGINT, @max_id BIGINT, @query NVARCHAR(1000)

SELECT @id=MIN(id), @max_id=MAX(id) FROM [email_adresses]

WHILE @id<=@max_id
BEGIN
    SELECT @email_id=email_id 
    FROM [email_adresses]

    set @query='sp_send_dbmail @profile_name=''yourprofilename'',
                        @recipients='''+@email_id+''',
                        @subject=''Test message'',
                        @body=''This is the body of the test message.
                        Congrates Database Mail Received By you Successfully.'''

    EXEC @query
    SELECT @id=MIN(id) FROM [email_adresses] where id>@id

END
Run Code Online (Sandbox Code Playgroud)

发布于以下链接http://ms-sql-queries.blogspot.in/2012/12/how-to-send-email-from-sql-server.html

  • 要添加这个优秀的答案,默认情况下只能从MSDB发送电子邮件.我花了几分钟时间弄清楚为什么当我使用这种方法时我的sp失败了. (2认同)

Sal*_*one 6

您可以使用数据库邮件从SQL Server内部发送电子邮件。这是通知系统管理员有关错误或其他数据库事件的好工具。您也可以使用它向最终用户发送报告或电子邮件。其基本语法为:

EXEC msdb.dbo.sp_send_dbmail  
@recipients='user@yourdomain.com',
@subject='Testing Email from SQL Server',
@body='<p>It Worked!</p><p>Email sent successfully</p>',
@body_format='HTML',
@from_address='Sender Name <sender@yourdomain.com>',
@reply_to='sender@yourdomain.com'
Run Code Online (Sandbox Code Playgroud)

在使用之前,必须使用“数据库邮件配置向导”或sp_configure启用数据库邮件。数据库或Exchange管理员可能需要帮助您进行配置。有关更多信息,请参见 http://msdn.microsoft.com/zh-cn/library/ms190307.aspxhttp://www.codeproject.com/Articles/485124/Configuring-Database-Mail-in-SQL-Server以获取更多信息。


pan*_*cy1 6

您也可以使用游标来完成。假设您已经创建了一个帐户和一个个人资料,例如“个人资料”和一个帐户,并且您拥有准备好电子邮件的表格,例如“EmailMessageTable”,您可以执行以下操作:

USE database_name
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE mass_email AS
declare @email nvarchar (50) 
declare @body nvarchar (255)  

declare test_cur cursor for             
SELECT email from [dbo].[EmailMessageTable]

open test_cur                                        

fetch next from test_cur into   
@email     
while @@fetch_status = 0       
begin                                    

set @body = (SELECT body from [dbo].[EmailMessageTable] where email = @email)
EXEC msdb.dbo.sp_send_dbmail
    @profile_name = 'profile',
    @recipients = @email,
    @body = @body,
    @subject = 'Credentials for Web';
fetch next from test_cur into  
@email 
end    
close test_cur   
deallocate test_cur
Run Code Online (Sandbox Code Playgroud)

之后你所要做的就是执行存储过程

EXECUTE mass_email
GO
Run Code Online (Sandbox Code Playgroud)