web-dev-qa-db-fra.com

Comment envoyer un email à partir de SQL Server?

Comment puis-je envoyer un email en utilisant T-SQL alors que l'adresse email est stockée dans une table? Je veux parcourir la table et pouvoir envoyer un email. Je ne peux pas trouver un bon exemple de le faire jusqu'à présent. 

Merci de votre aide

47
moe

Étape 1) Créer un profil et un compte

Vous devez créer un profil et un compte à l'aide de l'option Configurer le courrier de la base de données Wizard, accessible depuis le menu contextuel Configurer le courrier de la base de données du nœud Courrier de la base de données dans le nœud Gestion. Cet assistant permet de gérer les comptes, les profils et les paramètres globaux de messagerie de base de données.

Étape 2) 

COURIR:

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

Étape 3)

USE msdb
GO
EXEC sp_send_dbmail @profile_name='yourprofilename',
@recipients='[email protected]',
@subject='Test message',
@body='This is the body of the test message.
Congrates Database Mail Received By you Successfully.'

Pour parcourir la table 

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

Publié ceci sur le lien suivant http://ms-sql-queries.blogspot.in/2012/12/how-to-send-email-from-sql-server.html

67
Ruzbeh Irani

Vous pouvez envoyer des e-mails en mode natif depuis SQL Server à l'aide de Database Mail. C'est un excellent outil pour informer les administrateurs système des erreurs ou autres événements de base de données. Vous pouvez également l'utiliser pour envoyer un rapport ou un courrier électronique à un utilisateur final. La syntaxe de base utilisée est la suivante:

EXEC msdb.dbo.sp_send_dbmail  
@recipients='[email protected]',
@subject='Testing Email from SQL Server',
@body='<p>It Worked!</p><p>Email sent successfully</p>',
@body_format='HTML',
@from_address='Sender Name <[email protected]>',
@reply_to='[email protected]'

Avant utilisation, le courrier de base de données doit être activé à l'aide de l'assistant de configuration du courrier de base de données ou de sp_configure. Une base de données ou un administrateur Exchange peut avoir besoin de vous aider à configurer cette . Voir http://msdn.Microsoft.com/en-us/library/ms190307.aspx Et http://www.codeproject.com/Articles/485124/Configuring-Database-Mail-in-SQL-Server pour plus d'informations.

4
Salman Lone

Voici un exemple de concaténation des adresses électroniques d'une table dans un paramètre @recipients unique:

CREATE TABLE #emailAddresses (email VARCHAR(25))

INSERT #emailAddresses (email) VALUES ('[email protected]')
INSERT #emailAddresses (email) VALUES ('[email protected]')
INSERT #emailAddresses (email) VALUES ('[email protected]')

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

SELECT @recipients

DROP TABLE #emailAddresses

Les @recipients résultants seront:

[email protected]; [email protected]; [email protected]

3
Lars

Pour que le serveur SQL envoie une notification par courrier électronique, vous devez créer un profil de messagerie à partir de la gestion, courrier de base de données.

1) Utilisateur Cliquez avec le bouton droit de la souris pour afficher le menu du profil de messagerie et choisir de configurer le courrier de la base de données. 

2) choisissez la première ouverture (configurez un courrier de base de données en effectuant les tâches suivantes) et appuyez sur suivant .__ Remarque: si le SMTP n’est pas configuré, veuillez vous reporter à l’URL ci-dessous.

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

3) dans le deuxième écran, renseignez le nom du profil et ajoutez un compte SMTP, puis appuyez sur suivant.

4) choisissez le type de compte mail (public ou privé) puis appuyez sur next

5) modifiez les paramètres liés aux options d'envoi du courrier et appuyez sur suivant 6) appuyez sur terminer

Maintenant, pour que le serveur SQL envoie un courrier électronique si l’action X s’est produite, vous pouvez le faire via un déclencheur ou un travail (ce ne sont pas les seuls moyens courants).

1) vous pouvez créer un travail à partir d’un agent de serveur SQL, puis cliquer avec le bouton droit de la souris sur les opérateurs et vérifier les e-mails (saisissez votre email, par exemple), puis appuyez sur OK puis cliquez sur Travaux et choisissez un nouveau travail. les étapes depuis, nom, ... etc et de l'onglet notification sélectionnez le profil que vous avez créé.

2) des déclencheurs, veuillez vous reporter à l'exemple ci-dessous.

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 = '[email protected]',
 @body = @results,
 @subject = @subjectText,
 @exclude_query_output = 1 --Suppress 'Mail Queued' message
GO
2
Ahmad Abuhasna

Vous pouvez également le faire avec un curseur . En supposant que vous ayez créé un compte et un profil, par exemple. "profil" et un compte et vous avez la table qui tient les emails prêts par exemple. "EmailMessageTable", vous pouvez effectuer les opérations suivantes:

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

Ensuite, il ne vous reste plus qu'à exécuter la procédure stockée. 

EXECUTE mass_email
GO
2
pancy1

parfois en l'absence de sp_send_dbmail directement. Vous pouvez utiliser 'msdb.dbo.sp_send_dbmail' pour essayer (Fonctionne correctement sous Windows Server 2008 R2 et est testé). 

1
Marc Zeroc

Pour envoyer des messages via SQL Server, nous devons configurer un profil de messagerie DB. Nous pouvons utiliser l'option de messagerie T-SQl ou SQL Database du serveur SQL pour créer un profil. Après, le code est utilisé pour envoyer un courrier électronique via une requête ou une procédure stockée.

Utilisez le lien ci-dessous pour créer un profil de messagerie 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

0
Kamal Pratap