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:
-
Crea una tabla llamada
dbo.EmailData
usando el script provisto bajo Scripts SQL sección. -
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. -
En el paquete SSIS, cree 5 variables como se muestra en la captura de pantalla #2.
-
En el paquete SSIS, coloque las siguientes tareas:
Execute SQL task
,Foreach loop container
,Script task
dentro de Contenedor de bucle para cada uno ySend Email task
. -
Configurar el
Execute SQL task
como se muestra en las capturas de pantalla #3 y #4. -
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 delScript task
. -
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. -
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.
-
Después de configurar las tareas del flujo de control, su paquete debería verse como se muestra en la captura de pantalla #8.
-
La ejecución del paquete de muestra se muestra en la captura de pantalla #9.
-
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:
Captura de pantalla n. ° 2:
Captura de pantalla n. ° 3:
Captura de pantalla n. ° 4:
Captura de pantalla n. ° 5:
Captura de pantalla n. ° 6:
Captura de pantalla n. ° 7:
Captura de pantalla n. ° 8:
Captura de pantalla n. ° 9:
Captura de pantalla n. ° 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.
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:
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 += "" + dt.Columns[i].ColumnName + " ";
html += " ";
//add rows
for (int i =0;i";
for (int j = 0; j < dt.Columns.Count; j++)
html += "" + dt.Rows[i][j].ToString() + " ";
html += "";
html += "
";
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.
Valoraciones y reseñas
Agradecemos que quieras ayudar nuestra misión añadiendo un comentario o dejando una valoración te damos las gracias.