我是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代理作业运行的此脚本任务中是不明智的。有没有方法在没有任何凭据的情况下发送此电子邮件?我不关心电子邮件来自哪里,只关心它发送到哪里。
2条答案
按热度按时间qfe3c7zg1#
SSIS发送电子邮件任务有很多限制。
它是很久以前为Microsoft Exchange创建的,甚至不支持HTML格式的电子邮件。
而不是下面的行:
您可以尝试以下操作:
fcg9iug32#
我找到了最初问题here的解决方案
我可以添加以下代码行,以便使用自己的凭据运行脚本:
但是仍然需要找到一个使用sql代理作业运行此脚本的解决方案。如果另一个用户运行此作业,会不会有凭据问题?