不使用凭据向Outlook电子邮件发送SSIS包失败通知



我是SSIS的新手,想在包失败时发送电子邮件通知。我使用以下代码的脚本任务:

#region Namespaces
using System;
using System.Net;
using System.Net.Mail;
using System.Data;
using Microsoft.SqlServer.Dts.Runtime;
using System.Windows.Forms;
#endregion
public void Main()
{
// TODO: Add your code here
String SendMailFrom = Dts.Variables["EmailFrom"].Value.ToString();
String SendMailTo = Dts.Variables["EmailTo"].Value.ToString();
String SendMailSubject = Dts.Variables["EmailSubject"].Value.ToString();
String SendMailBody = Dts.Variables["EmailBody"].Value.ToString();
try
{
MailMessage email = new MailMessage();
SmtpClient SmtpServer = new SmtpClient("smtp.office365.com");
// START
email.From = new MailAddress(SendMailFrom);
email.To.Add(SendMailTo);
email.Subject = SendMailSubject;
email.Body = SendMailBody;
//END
SmtpServer.Port = 587;
SmtpServer.Credentials = new System.Net.NetworkCredential(SendMailFrom, "Password");
SmtpServer.EnableSsl = true;
SmtpServer.Send(email);
MessageBox.Show("Email was Successfully Sent ");
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
Dts.TaskResult = (int)ScriptResults.Success;
Dts.TaskResult = (int)ScriptResults.Success;
}

我的第一个问题是,我不能让这个任务与我自己的凭据工作,我得到错误"系统。net_io_connection已关闭。">

但即使超越,我知道这是不明智的硬编码我自己的凭据到这个脚本任务,我想由一个SQL代理作业运行。有没有一种不需要任何凭证就可以发送这封邮件的方法?我不在乎这封邮件是从哪里来的,我只在乎它被发送到哪里。

SSIS发送邮件任务有很多限制。

它是很久以前创建的,用于与Microsoft Exchange一起工作。它甚至不支持HTML格式的邮件。

而不是下面的行:

SmtpServer.Credentials = new System.Net.NetworkCredential(SendMailFrom, "Password");

您可以尝试以下操作:

SmtpServer.UseDefaultCredentials = true;
SmtpServer.Credentials = CredentialCache.DefaultNetworkCredentials;

我在这里找到了最初问题的解决方案

我可以添加以下代码行来使用我自己的凭据运行脚本:

System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12

然而,仍然需要找出一个解决方案来运行这个脚本使用sql代理作业。如果另一个用户运行作业,是否会出现凭据问题?

最新更新