【发布时间】:2021-10-31 17:27:46
【问题描述】:
我使用循环创建了 SSIS 包。此包从 Reporting Services 导出 2 个文件(一个 pdf,一个 xlsx)。
通常,在通过 Outlook 发送导出文件的“脚本任务”中会出现超时错误。我看了但我想不通,我不是关于 c# 的出口。
错误描述。 ; System.Net.Mail.SmtpException:操作已超时。在 System.Net.Mail.SmtpClient.Send(MailMessage) .......
我的代码;
#region Help: Introduction to the script task
#region Namespaces
using System;
using System.Data;
using Microsoft.SqlServer.Dts.Runtime;
using System.Windows.Forms;
using System.Text;
using System.Net;
using System.Net.Mail;
using System.IO;
using Microsoft.SqlServer.Dts;
#endregion
namespace ST_01aa093042ba46959a419d75a80d117c
{
[Microsoft.SqlServer.Dts.Tasks.ScriptTask.SSISScriptTaskEntryPointAttribute]
public partial class ScriptMain :
Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase
{
public void Main()
{
try
{
MailMessage mail = new MailMessage();
SmtpClient SmtpServer = new SmtpClient("smtp.office365.com", 587);
string fromString = (string)Dts.Variables["User::Email_From"].Value;
string toString = (string)Dts.Variables["User::Email_TO"].Value;
string ccString = (string)Dts.Variables["User::Email_CC"].Value;
string attachmentName = (string)Dts.Variables["User::Pdf_Send_Path"].Value;
string attachmentName1 = (string)Dts.Variables["User::Excel_Send_Path"].Value;
string emailBody = (string)Dts.Variables["User::Email_Body"].Value;
mail.From = new MailAddress(fromString);
mail.To.Add(toString);
mail.CC.Add(ccString);
mail.Subject = (String)Dts.Variables["User::Email_Subject"].Value;
mail.IsBodyHtml = false;
System.Net.Mail.Attachment attachment;
attachment = new System.Net.Mail.Attachment(attachmentName);
mail.Attachments.Add(new Attachment(attachmentName));
mail.Attachments.Add(new Attachment(attachmentName1));
mail.Body = emailBody;
SmtpServer.EnableSsl = true;
SmtpServer.UseDefaultCredentials = false;
SmtpServer.Credentials = new NetworkCredential("user@domain.com.tr", "1111");
SmtpServer.Timeout = 100000;
SmtpServer.Send(mail);
Dts.TaskResult = (int)ScriptResults.Success;
}
catch (Exception ex)
{
ex.ToString();
MessageBox.Show(ex.ToString());
Dts.Variables["User::Error_Value"].Value = 1;
Dts.TaskResult = (int)ScriptResults.Failure;
}
}
#region ScriptResults declaration
enum ScriptResults
{
Success = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Success,
Failure = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Failure
};
#endregion
}
}
【问题讨论】:
-
你能从运行 SSIS 的服务器的 587 端口 ping smtp.office365.com 吗?可能是防火墙问题。
-
@MitchWheat,ping 成功(使用 telnet),防火墙也关闭了。
-
@AlwaysLearning,实际上它在正常的 etl 期间运行良好。但是,当 etl 进程比平时花费更长的时间时,它会出现超时错误。所以我必须重新启动服务器之后才能成功运行包。太奇怪了,我想我的小技巧可以解决这个错误。
标签: c# sql-server ssis