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

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

谢谢你的帮助

moe asked 2020-02-12T22:31:14Z
7个解决方案
70 votes

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

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

第2步)

跑:

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]

Ruzbeh Irani answered 2020-02-12T22:31:48Z
5 votes

您可以使用数据库邮件从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'

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

Salman Lone answered 2020-02-12T22:32:14Z
3 votes

这是一个示例,说明如何将表中的电子邮件地址连接为单个@recipients参数:

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

结果@recipients将是:

foo@foobar.com; bar@foobar.com; buzzlightyear@foobar.com

Lars answered 2020-02-12T22:32:43Z
2 votes

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

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

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

[http://www.symantec.com/business/support/index?page=content&id=TECH86263]

3)在第二个屏幕上填写配置文件名称并添加SMTP帐户,然后按下一步

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

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

现在,如果操作X发生,则使SQL Server发送电子邮件,您可以通过触发器或作业来做到这一点(这是唯一的通用方法)。

1)您可以从SQL Server代理创建Job,然后右键单击运算符并检查邮件(例如填写您的电子邮件),然后在右键单击Jobs并选择新作业后按OK。并填写所需的信息以及步骤,名称,...等,然后从通知选项卡中选择您创建的配置文件。

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
Ahmad Abuhasna answered 2020-02-12T22:33:43Z
2 votes

您也可以使用光标进行操作。假设您已经创建了一个帐户和一个配置文件,例如 “个人资料”和一个帐户,您便拥有了可容纳电子邮件的表格,例如 您可以在“ 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
pancy1 answered 2020-02-12T22:34:08Z
1 votes

有时虽然找不到sp_send_dbmail直接。 您可以使用“ msdb.dbo.sp_send_dbmail”尝试(在Windows Server 2008 R2上正常工作并经过测试)

Marc Zeroc answered 2020-02-12T22:34:28Z
0 votes

要通过SQL Server发送邮件,我们需要设置数据库邮件配置文件,我们可以在sql server中使用T-SQl或SQL数据库邮件选项来创建配置文件。 下面的代码用于通过查询或存储过程发送邮件。

使用下面的链接创建数据库邮件配置文件

[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

Kamal Pratap answered 2020-02-12T22:35:06Z
translate from https://stackoverflow.com:/questions/13300881/how-to-send-email-from-sql-server