如何使用T-SQL发送电子邮件,但是电子邮件地址存储在表中?我想循环浏览表并能够发送电子邮件。到目前为止,我还没有找到一个好的示例。
如何使用T-SQL发送电子邮件,但是电子邮件地址存储在表中?我想循环浏览表并能够发送电子邮件。到目前为止,我还没有找到一个好的示例。
第一步) 创建个人资料和账户
您需要使用“配置数据库邮件向导”创建个人资料和账户,该向导可以从管理节点中的“数据库邮件”节点的“配置数据库邮件”上下文菜单中访问。此向导用于管理帐户、个人资料和数据库邮件全局设置。
第二步)
运行:
sp_CONFIGURE 'show advanced', 1
GO
RECONFIGURE
GO
sp_CONFIGURE 'Database Mail XPs', 1
GO
RECONFIGURE
GO
第三步)
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
@max_id=MIN(id)
应该改为 @max_id=MAX(id)
吗?否则似乎不会发送任何电子邮件。 - Jimmy你可以使用数据库邮件在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'
在使用之前,必须使用“Database Mail Configuration Wizard”或“sp_configure”启用“数据库邮件”。您可能需要数据库或Exchange管理员帮助您进行配置。 有关更多信息,请参见http://msdn.microsoft.com/en-us/library/ms190307.aspx 和http://www.codeproject.com/Articles/485124/Configuring-Database-Mail-in-SQL-Server。
您也可以使用光标来完成此操作。假设您已经创建了一个帐户和一个档案,例如“profile”,并且已准备好保存电子邮件的表格,例如“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
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
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
要通过SQL Server发送邮件,我们需要设置DB邮件配置文件,可以使用T-SQl或SQL数据库邮件选项在SQL Server中创建配置文件。在使用以下代码通过查询或存储过程发送邮件之后。
请使用以下链接创建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