如何从 SQLServer 发送电子邮件?

如何使用 T-SQL 发送电子邮件,但电子邮件地址存储在一个表中?我想循环通过表,并能够发送电子邮件。到目前为止,我找不到这样做的好例子。

288497 次浏览

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

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

步骤2)

运行:

sp_CONFIGURE 'show advanced', 1
GO
RECONFIGURE
GO
sp_CONFIGURE 'Database Mail XPs', 1
GO
RECONFIGURE
GO

步骤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.'

在表中循环

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

张贴在以下链接 http://ms-sql-queries.blogspot.in/2012/12/how-to-send-email-from-sql-server.html

下面是一个例子,说明如何将电子邮件地址从一个表连接到一个单独的@收件人参数:

CREATE TABLE #emailAddresses (email VARCHAR(25))


INSERT #emailAddresses (email) VALUES ('foo@foobar.com')
INSERT #emailAddresses (email) VALUES ('bar@foobar.com')
INSERT #emailAddresses (email) VALUES ('buzzlightyear@foobar.com')


DECLARE @recipients VARCHAR(MAX)
SELECT @recipients = COALESCE(@recipients + ';', '') + email
FROM #emailAddresses


SELECT @recipients


DROP TABLE #emailAddresses

由此产生的@收件人将是:

Foo@foobar.com; bar@foobar.com; buzzlightyear@foobar.com

您可以尝试使用“ msdb.dbo.sp _ send _ dbmail” (在 Windows Server 2008 R2上工作良好并经过测试)

为了使 SQL 服务器发送电子邮件通知,您需要从管理,数据库邮件创建邮件配置文件。

1)用户右击以获取邮件配置文件菜单并选择配置数据库邮件

2)选择第一个打开(通过以下任务设置一个数据库邮件) ,然后按下 注意: 如果没有配置 SMTP,请参考下面的 URL

Http://www.symantec.com/business/support/index?page=content&id=tech86263

3)在第二个屏幕填写个人资料名称并添加 SMTP 帐户,然后按下

4)选择邮件帐户类型(公共或私人) ,然后按下

5)更改与发送邮件选项相关的参数,然后按下 6)按完成

现在,要让 SQL 服务器发送一封电子邮件,如果行动 X 发生,你可以通过触发器或作业(这是常见的方法,而不是唯一的方法)。

1)您可以从 SQL 服务器代理创建作业,然后右键单击操作员并检查邮件(例如,填写您的电子邮件) ,然后按确定后,右键单击作业并选择新的作业 并填写所需的信息,以及从步骤,名称,... 等,并从通知选项卡选择您的配置文件。

2)从触发器请参考下面的例子。

AS
declare @results varchar(max)
declare @subjectText varchar(max)
declare @databaseName VARCHAR(255)
SET @subjectText = 'your subject'
SET @results = 'your results'
-- write the Trigger JOB
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'SQLAlerts',
@recipients = 'xxxx@xxxx.com',
@body = @results,
@subject = @subjectText,
@exclude_query_output = 1 --Suppress 'Mail Queued' message
GO

可以使用数据库邮件从 SQLServer 内部本机发送电子邮件。这是一个很好的工具,用于通知系统管理员有关错误或其他数据库事件。您还可以使用它向最终用户发送报告或电子邮件。 这个问题的基本语法是:

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'

使用前,必须使用数据库邮件配置向导或 sp _ configure 启用数据库邮件。数据库或 Exchange 管理员可能需要帮助您配置此选项。 你看 Http://msdn.microsoft.com/en-us/library/ms190307.aspx 还有 Http://www.codeproject.com/articles/485124/configuring-database-mail-in-sql-server 以取得更多资料。

你也可以用光标来做。 假设你已经创建了一个帐户和一个配置文件,例如“配置文件”和一个帐户,并且你有一个可以保存电子邮件的表格,例如“ 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

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

EXECUTE mass_email
GO

要通过 SQLServer 发送邮件,我们需要设置 DB 邮件配置文件,我们可以在 SQL 服务器中使用 T-SQL 或 SQL 数据库邮件选项来创建配置文件。以下代码用于通过查询或存储过程发送邮件。

使用下面的链接创建 DB 邮件配置文件

Http://www.freshcodehub.com/article/42/configure-database-mail-in-sql-server-database

Http://www.freshcodehub.com/article/43/create-a-database-mail-configuration-using-t-sql-script

--Sending Test Mail
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'TestProfile',
@recipients = 'To Email Here',
@copy_recipients ='CC Email Here',             --For CC Email if exists
@blind_copy_recipients= 'BCC Email Here',      --For BCC Email if exists
@subject = 'Mail Subject Here',
@body = 'Mail Body Here',
@body_format='HTML',
@importance ='HIGH',
@file_attachments='C:\Test.pdf';               --For Attachments if exists