Saltar al contenido

¿Cómo enviar los registros desde una tabla en un cuerpo de correo electrónico usando el paquete SSIS?

Hola, descubrimos la respuesta a lo que necesitas, continúa leyendo y la obtendrás un poco más abajo.

Solución:

Aquí hay una opción posible. El siguiente ejemplo podría darle una idea de cómo puede lograr enviar por correo electrónico un conjunto de resultados utilizando Send Email task. Este ejemplo muestra cómo recorrer el conjunto de resultados de la consulta para formar el cuerpo del mensaje que luego se enviará por correo electrónico usando Send Email task.

Si no desea enviar un correo electrónico cuando el conjunto de resultados está en blanco, puede agregar un Expression a la restricción de precedencia entre Conjunto de resultados de bucle y Enviar correo electrónico Tareas.

El ejemplo usa la base de datos SSIS 2008 R2 y SQL Server 2008 R2.

Proceso paso a paso:

  1. Crea una tabla llamada dbo.EmailData usando el script provisto bajo Scripts SQL sección.

  2. Captura de pantalla #1 muestra datos de muestra que Execute SQL La tarea la consultará y la enviará por correo electrónico en este ejemplo.

  3. En el paquete SSIS, cree 5 variables como se muestra en la captura de pantalla #2.

  4. En el paquete SSIS, coloque las siguientes tareas: Execute SQL task, Foreach loop container, Script task dentro de Contenedor de bucle para cada uno y Send Email task.

  5. Configurar el Execute SQL task como se muestra en las capturas de pantalla #3 y #4.

  6. Configurar el Foreach loop container como se muestra en las capturas de pantalla #5 y #6. La sección de asignaciones de variables muestra el orden en el que aparecen las columnas de resultados de la consulta y cómo se asignan a las variables SSIS. Estas variables se utilizarán para formar el mensaje de correo electrónico dentro del Script task.

  7. En el Script task, reemplace el código con el que se muestra debajo de Código de tarea de secuencia de comandos sección. La tarea de secuencia de comandos tiene un formato de mensaje de correo electrónico de texto sin formato muy simple.

  8. Configure la tarea Enviar correo electrónico como se muestra en la captura de pantalla #7. Debe configurarlo con una dirección de correo electrónico válida en De y Para los campos.

  9. Después de configurar las tareas del flujo de control, su paquete debería verse como se muestra en la captura de pantalla #8.

  10. La ejecución del paquete de muestra se muestra en la captura de pantalla #9.

  11. El correo electrónico enviado por el paquete se muestra en la captura de pantalla #10. Se ha eliminado parte de la información de la captura de pantalla. Puede comparar los datos de la tabla que se muestran en la captura de pantalla #1 con esta salida de correo electrónico y deberían ser iguales.

Espero que ayude.

Scripts SQL:
.

CREATE TABLE [dbo].[EmailData](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [ItemId] [varchar](255) NOT NULL,
    [ItemName] [varchar](255) NOT NULL,
    [ItemType] [varchar](255) NOT NULL,
    [IsProcessed] [bit] NULL,
 CONSTRAINT [PK_EmailData] PRIMARY KEY CLUSTERED ([Id] ASC)) ON [PRIMARY]
GO

Código de tarea de secuencia de comandos:

C# código que solo se puede usar en SSIS 2008 and above. .

/*Microsoft SQL Server Integration Services Script Task
   Write scripts using Microsoft Visual C# 2008.
   The ScriptMain is the entry point class of the script.
*/

using System;
using System.Data;
using Microsoft.SqlServer.Dts.Runtime;
using System.Windows.Forms;

namespace ST_7f59d09774914001b60a99a90809d5c5.csproj

    [System.AddIn.AddIn("ScriptMain", Version = "1.0", Publisher = "", Description = "")]
    public partial class ScriptMain : Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase
    

        #region VSTA generated code
        enum ScriptResults
        
            Success = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Success,
            Failure = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Failure
        ;
        #endregion

        public void Main()
        
            Variables varCollection = null;
            string header = string.Empty;
            string message = string.Empty;

            Dts.VariableDispenser.LockForWrite("User::EmailMessage");
            Dts.VariableDispenser.LockForWrite("User::ItemId");
            Dts.VariableDispenser.LockForWrite("User::ItemName");
            Dts.VariableDispenser.LockForWrite("User::ItemType");
            Dts.VariableDispenser.GetVariables(ref varCollection);

            //Set the header message for the query result
            if (varCollection["User::EmailMessage"].Value == string.Empty)
            
                header = "Execute SQL task output sent using Send Email Task in SSIS:nn";
                header += string.Format("0t1ttt2n", "Item number", "Item name", "Item type");
                varCollection["User::EmailMessage"].Value = header;
            

            //Format the query result with tab delimiters
            message = string.Format("0t1t2",
                                        varCollection["User::ItemId"].Value,
                                        varCollection["User::ItemName"].Value,
                                        varCollection["User::ItemType"].Value);

            varCollection["User::EmailMessage"].Value = varCollection["User::EmailMessage"].Value + message;

            Dts.TaskResult = (int)ScriptResults.Success;
        
    

Captura de pantalla n. ° 1:

1

Captura de pantalla n. ° 2:

2

Captura de pantalla n. ° 3:

3

Captura de pantalla n. ° 4:

4

Captura de pantalla n. ° 5:

5

Captura de pantalla n. ° 6:

6

Captura de pantalla n. ° 7:

7

Captura de pantalla n. ° 8:

8

Captura de pantalla n. ° 9:

9

Captura de pantalla n. ° 10:

10

Paso 1 : Cree una variable de tipo de datos de Objeto que contendrá el conjunto de resultados de una tabla dada y un string escriba la variable para contener los ID de correo electrónico del destinatario.
declaración de variable

Paso 2 : Utilice un Editor de tareas Ejecutar SQL y elija la opción Conjunto de resultados como Conjunto de resultados completo y una declaración de consulta para obtener los datos de una tabla determinada. Utilice la variable de objeto para mantener el conjunto de resultados de su tabla como se muestra en las capturas de pantalla a continuación:

captura de pantalla-1captura de pantalla-2

Paso 3 : Tome un editor de tareas de secuencia de comandos y use Recepient_email_id variable como variable de solo lectura y use lo siguiente C# script para enviar un correo electrónico.

#region Namespaces
using System;
using System.Data;
using Microsoft.SqlServer.Dts.Runtime;
using System.Windows.Forms;
using System.Linq;
using System.Collections.Generic;
using System.Collections;
using System.Data.OleDb;
using System.Net.Mail;
using System.Net;
#endregion

namespace ST_a5f34f5fc36645b6bd90a5b8887ac589

    /// 
    /// ScriptMain is the entry point class of the script.  Do not change the name, attributes,
    /// or parent of this class.
    /// 
    [Microsoft.SqlServer.Dts.Tasks.ScriptTask.SSISScriptTaskEntryPointAttribute]
    public partial class ScriptMain : Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase
    

        enum ScriptResults
        
            Success = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Success,
            Failure = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Failure
        

        public void Main()
        
            Variables varCollection = null;

            string User_Recepient_Email_ID = Dts.Variables["User::Recepient_Email_ID"].Value.ToString();

            Dts.VariableDispenser.LockForWrite("User::Test_Table_Result");
            Dts.VariableDispenser.GetVariables(ref varCollection);
            var data = varCollection["User::Test_Table_Result"].Value;

            OleDbDataAdapter da = new OleDbDataAdapter();
            DataTable dt = new DataTable();
            da.Fill(dt, varCollection["User::Test_Table_Result"].Value);

            SendMailMessage("[email protected]", User_Recepient_Email_ID, "ETL Load Status Report",ConvertDataTableToHTML(dt),true,"174.18.10.122");

            Dts.TaskResult = (int)ScriptResults.Success;
        


        public static string ConvertDataTableToHTML(DataTable dt)
        
            string html = "";
            //add header row
            html += "";
            for (int i = 0; i < dt.Columns.Count; i++)
                html += "";
            html += "";
            //add rows
            for (int i =0;i";
                html += "";
            
            html += "
" + dt.Columns[i].ColumnName + "
"; return html; private void SendMailMessage(string From, string SendTo,string Subject, string Body,bool IsBodyHtml,string Server) MailMessage htmlMessage; SmtpClient mySmtpClient; htmlMessage = new MailMessage(From, SendTo, Subject, Body); htmlMessage.IsBodyHtml = IsBodyHtml; mySmtpClient = new SmtpClient(Server); mySmtpClient.Credentials = CredentialCache.DefaultNetworkCredentials; mySmtpClient.Send(htmlMessage);

Tenga en cuenta: debe cambiar la identificación del correo electrónico del remitente, el asunto del correo electrónico y la dirección IP del servidor para la siguiente declaración en el script anterior.

SendMailMessage("[email protected]", User_Recepient_Email_ID, "ETL Load Status Report",ConvertDataTableToHTML(dt),true,"174.18.10.122");

A continuación se muestra el formato de correo electrónico que recibe.
captura de pantalla-3

Valoraciones y reseñas

Agradecemos que quieras ayudar nuestra misión añadiendo un comentario o dejando una valoración te damos las gracias.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *