提问人:Saurabh Kulkarni 提问时间:11/2/2021 最后编辑:Nick.McSaurabh Kulkarni 更新时间:11/10/2021 访问量:955
如何在 SSIS 包中添加条件以仅在附件可用时发送邮件
How to add condition in SSIS package to send mails only if attachments are available
问:
我创建了一个 SSIS 包,其中包含一个脚本任务,用于在变量“|”后面添加新的附件名称和路径,并在 foreach 循环下运行它以在变量值中包含所有附件名称和路径。然后,我将该变量作为附件传递给发送邮件任务。此包通过批处理文件执行运行良好,并发送一封包含多个文件的电子邮件。
现在,我想将该批处理文件安排为每小时运行一次,为此,我需要在包中添加逻辑,以便在有 2 个附件可用时才发送邮件。如果没有附件或只有一个附件,则不应发送任何电子邮件。这样我想删除手动作业执行。你能帮忙吗?我是 SSIS 开发的新手。脚本任务代码如下:
if (Dts.Variables["User::FileNamesList"].Value.ToString() == "")
{
Dts.Variables["User::FileNamesList"].Value = Dts.Variables["User::InputPath"].Value.ToString() + Dts.Variables["User::Year"].Value.ToString() +"\\" + Dts.Variables["User::FileName"].Value.ToString();
}
else
{
Dts.Variables["User::FileNamesList"].Value = Dts.Variables["User::FileNamesList"].Value.ToString() + "|" + Dts.Variables["User::InputPath"].Value.ToString() + Dts.Variables["User::Year"].Value.ToString() + "\\" + Dts.Variables["User::FileName"].Value.ToString();
}
答:
1赞
KeithL
11/2/2021
#1
任何涉及邮件的事情都可以在脚本任务中更好地处理。
让我解释一下“更好”。您可以对收件人、抄送、密件抄送、回复等进行更多控制。以及能够发送 html 格式的正文。
这应该运行整个应用程序:
{
var fis = Directory.GetFiles(@"C:\folder"); //a 2nd param can be added for search pattern (ex. "*.xls")
//Check for number of files
if(fis.Length>1)
{
SendEmail("Where's it going", "Here are some files", "What you want in the body", fis);
//Archive
foreach (var f in fis)
File.Move(f, @"archive folder path" + new FileInfo(f).Name);
}
}
public static void SendEmail(string to, string subject, string body, string[] filePaths)
{
string from = "[email protected]";
using (MailMessage mail = new MailMessage())
{
SmtpClient SmtpServer = new SmtpClient("YourSMTPClient");
mail.From = new MailAddress(from);
mail.To.Add(new MailAddress(to));
mail.Subject = subject;
mail.IsBodyHtml = true;
mail.Body = body;
foreach (var f in filePaths)
{
Attachment file;
file = new Attachment(f);
mail.Attachments.Add(file);
}
SmtpServer.Port = 9999; //Your SMTP port
SmtpServer.Credentials = new NetworkCredential(from, pword);
SmtpServer.EnableSsl = true;
SmtpServer.Send(mail);
}
}
评论
0赞
Saurabh Kulkarni
11/10/2021
嗨,KeithL,谢谢你的笔记。但是我能够在脚本任务中添加变量来计算文件数(基本上,每次循环执行都会增加 1),然后我在连接到邮件发送任务的箭头中添加了一个简单的条件,以首先检查变量值是否与预期值匹配(在 SSIS 中创建了一个变量并分配了最大预期文件计数), 所以它现在只会在文件夹中有 2 个文件可用时发送邮件。我添加了一个块只是为了重置变量,并且还附加了来自foreach循环的第二个箭头,如果条件不匹配,则运行。
0赞
Saurabh Kulkarni
11/10/2021
请看下面的回答。
0赞
Saurabh Kulkarni
11/10/2021
#2
这在同一天得到了解决。我能够在我的脚本任务中添加变量来计算文件数(基本上,每次循环执行都会增加 1),然后我在连接到邮件发送任务的箭头中添加了一个简单的条件,以首先检查变量值是否与预期值匹配(在 SSIS 中创建了一个变量并分配了最大预期文件计数), 所以它现在只会在文件夹中有 2 个文件可用时发送邮件。我添加了一个块只是为了重置变量,并且还附加了来自foreach循环的第二个箭头,如果条件不匹配,则运行。该工具现在仅发送年份的邮件,该邮件将同时存在或跳过该循环。我也能够安排它。
评论