Cómo enviar correo electrónico desde SQL Server?


¿Cómo puedo enviar un correo electrónico usando T-SQL pero la dirección de correo electrónico se almacena en una tabla? Quiero recorrer la tabla y poder enviar correos electrónicos. No encuentro un buen ejemplo de ello hasta ahora..

Gracias por tu ayuda

Author: Bhugy, 2012-11-09

7 answers

Paso 1) Crear Perfil y Cuenta

Debe crear un perfil y una cuenta con el Asistente Configurar Correo de base de datos al que se puede acceder desde el menú contextual Configurar correo de base de datos del nodo Correo de base de datos en el nodo Administración. Este asistente se utiliza para administrar cuentas, perfiles y configuraciones globales de correo de base de datos.

Paso 2)

EJECUTAR:

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

Paso 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.'

Para recorrer la tabla

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

Publicado en el siguiente enlace http://ms-sql-queries.blogspot.in/2012/12/how-to-send-email-from-sql-server.html

 62
Author: Ruzbeh Irani,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-20 01:16:27

Aquí hay un ejemplo de cómo puede concatenar direcciones de correo electrónico de una tabla en un solo parámetro @ recipients:

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

Los @ destinatarios resultantes serán:

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

 3
Author: Lars,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-11-10 23:36:37

Puede enviar correo electrónico de forma nativa desde SQL Server utilizando Database Mail. Esta es una gran herramienta para notificar a los administradores de sistemas sobre errores u otros eventos de la base de datos. También puede usarlo para enviar un informe o un mensaje de correo electrónico a un usuario final. La sintaxis básica para esto es:

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]'

Antes de su uso, el Correo de la base de datos debe habilitarse mediante el Asistente de Configuración de correo de la base de datos, o sp_configure. Es posible que un administrador de base de datos o Exchange necesite ayudarlo a configurar esto. Ver http://msdn.microsoft.com/en-us/library/ms190307.aspx y http://www.codeproject.com/Articles/485124/Configuring-Database-Mail-in-SQL-Server para más información.

 3
Author: Salman Lone,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-02 07:34:41

Para hacer que SQL server envíe una notificación por correo electrónico, debe crear un perfil de correo desde Administración, correo de base de datos.

1) Haga clic con el botón derecho del usuario para obtener el menú perfil de correo y elija configurar correo de base de datos

2) elija la primera apertura (configure un correo de base de datos siguiendo las siguientes tareas) y presione siguiente Nota: si el SMTP no está configurado, consulte la URL abajo

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

3) en la segunda pantalla rellene el nombre del perfil y agregue la cuenta SMTP, luego presione siguiente

4) elija el tipo de cuenta de correo (pública o privada) y luego presione siguiente

5) cambie los parámetros relacionados con las opciones de envío de correo y presione siguiente 6) presione finish

Ahora para hacer que SQL server envíe un correo electrónico si ocurrió la acción X, puede hacerlo a través de trigger o job ( Esta es la forma común, no la única).

1) puede crear un trabajo desde el agente de SQL server, luego haga clic con el botón derecho en operadores y verifique los correos (llene su correo electrónico, por ejemplo) y presione Aceptar después de hacer clic con el botón derecho en Trabajos y elija nuevo trabajo y rellene la información requerida, así como los pasos de, nombre,...etc y desde la pestaña notificación seleccione el perfil que hizo.

2) de disparadores por favor consulte el siguiente ejemplo.

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
Author: Ahmad Abuhasna,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-04-10 13:50:14

También puedes hacerlo con un cursor. Suponiendo que ha creado una Cuenta y un Perfil, por ejemplo, "perfil" y una Cuenta y tiene lista la tabla que contiene los correos electrónicos, por ejemplo, "EmailMessageTable", puede hacer lo siguiente:

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

Después de eso todo lo que tiene que hacer es ejecutar el Procedimiento almacenado

EXECUTE mass_email
GO
 2
Author: pancy1,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-10-30 20:55:48

A veces, mientras no se encuentra sp_send_dbmail directamente. Puede usar ' msdb.dbo.sp_send_dbmail' para intentar (Funciona bien en Windows Server 2008 R2 y se prueba)

 1
Author: Marc Zeroc,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-03-04 02:15:58

Para enviar correo a través de SQL Server necesitamos configurar DB mail profile podemos usar la opción T-SQl o SQL Database mail en sql server para crear el perfil. Después de código a continuación se utiliza para enviar correo a través de consulta o procedimiento almacenado.

Use el siguiente enlace para crear correo de base de datos perfil

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
Author: Kamal Pratap,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-25 09:45:26