SQL Server 不使用凭据将SSIS包失败通知发送到Outlook电子邮件

iq0todco  于 2022-12-17  发布在  其他
关注(0)|答案(2)|浏览(228)

我是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;
        }

我的第一个问题是,我不能让这个任务与我自己的凭据工作,我得到错误“System.IOException:无法从传输连接读取数据:net_io_连接已关闭。”
但除此之外,我知道将我自己的凭据硬编码到我希望由SQL代理作业运行的此脚本任务中是不明智的。有没有方法在没有任何凭据的情况下发送此电子邮件?我不关心电子邮件来自哪里,只关心它发送到哪里。

qfe3c7zg

qfe3c7zg1#

SSIS发送电子邮件任务有很多限制。
它是很久以前为Microsoft Exchange创建的,甚至不支持HTML格式的电子邮件。
而不是下面的行:

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

您可以尝试以下操作:

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

fcg9iug32#

我找到了最初问题here的解决方案
我可以添加以下代码行,以便使用自己的凭据运行脚本:

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

但是仍然需要找到一个使用sql代理作业运行此脚本的解决方案。如果另一个用户运行此作业,会不会有凭据问题?

相关问题