73

T-SQLを使用してメールを送信するにはどうすればよいですか?メールアドレスはテーブルに保存されますか?テーブルをループしてメールを送信できるようにしたい。これを行う良い例は今のところ見つかりません。

4

7 に答える 7

89

ステップ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

于 2012-11-09T09:48:26.863 に答える
12

データベースメールを使用して、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/Configure-Database-Mail-in-SQL-Serverを参照してください。

于 2016-05-02T07:34:41.213 に答える
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

その後、あなたがしなければならないのはストアドプロシージャを実行することだけです

EXECUTE mass_email
GO
于 2016-10-30T20:55:48.963 に答える
2

これは、テーブルの電子メールアドレスを単一の@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

于 2012-11-10T23:36:37.003 に答える
2

SQLサーバーに電子メール通知を送信させるには、管理、データベースメールからメールプロファイルを作成する必要があります。

1)ユーザー右クリックしてメールプロファイルメニューを表示し、データベースメールの構成を選択します

2)最初に開くものを選択し(次のタスクに従ってデータベースメールを設定します)、次を押します注:SMTPが構成されていない場合は、以下のURLを参照してください

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

3)2番目の画面で、プロファイル名を入力してSMTPアカウントを追加し、[次​​へ]を押します。

4)メールアカウントの種類(パブリックまたはプライベート)を選択し、[次へ]を押します

5)メール送信オプションに関連するパラメータを変更し、次へを押します6)終了を押します

ここで、アクションXが発生した場合にSQLサーバーに電子メールを送信させるには、トリガーまたはジョブを介してそれを行うことができます(これは唯一の方法ではなく一般的な方法です)。

1)SQL Serverエージェントからジョブを作成し、演算子を右クリックしてメールを確認し(たとえば、メールアドレスを入力)、[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
于 2014-04-10T13:37:35.950 に答える
1

sp_send_dbmailが直接見つからない場合があります。'msdb.dbo.sp_send_dbmail'を使用して試すことができます(Windows Server 2008 R2で正常に動作し、テストされています)

于 2014-03-04T02:15:58.820 に答える
1

SQL Serverを介してメールを送信するには、DBメールプロファイルを設定する必要があります。SQLServerで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

于 2018-05-25T09:45:26.887 に答える