gpt4 book ai didi

sql-server - SSIS包执行成功但没有发送邮件

转载 作者:行者123 更新时间:2023-12-02 10:06:52 25 4
gpt4 key购买 nike

我已经创建了 SSIS 项目,它执行以下操作

控制流程:-

enter image description here

数据流:-

enter image description here

  • 首先删除Excel工作表中的数据
  • 创建新的 Excel 工作表
  • 将数据从数据库插入到 Excel 文件
  • 发送该 Excel 文件的邮件

当我通过右键单击包来执行它并说执行它效果很好(邮件已发送)。但是,当我安排 Sql Server 代理作业中的包运行时,它显示“包执行成功”,但没有发送邮件。虽然它能够将数据插入 Excel 工作表。

那么为什么 SQL Server 代理作业没有发送邮件?

SQL 作业在 SQL 服务帐户中运行,因此我向 SQL Server 作业代理用户授予了对我的 excel 文件的“完全访问”权限。

根据 SQL 代理作业没有错误[有警告],但没有发送邮件

The package execution returned DTSER_SUCCESS (0) but had warnings, with warnings being treated as errors.  Started:  4:16:51 PM  Finished: 4:17:04 PM  Elapsed:  13.119 seconds.  The command line parameters are invalid.  The step failed.

电子邮件脚本代码:-

using System;
using System.Data;
using Microsoft.SqlServer.Dts.Runtime;
using System.Windows.Forms;
using System.Net.Mail;
using System.Text.RegularExpressions;

namespace ST_cb3e2bf527bb45c58359315bb058656e.csproj
{
[System.AddIn.AddIn("ScriptMain", Version = "1.0", Publisher = "", Description = "")]
public partial class ScriptMain : Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase
{

#region VSTA generated code
enum ScriptResults
{
Success = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Success,
Failure = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Failure
};
#endregion

public void Main()
{
string sSubject = "Monitum : ICICI Cash Balance : "+DateTime.Now.ToShortDateString()+" : "+DateTime.Now.ToShortTimeString();
string sBody = "";
int iPriority = 2;

if (SendMail(sSubject, sBody, iPriority))
{
Dts.TaskResult = (int)ScriptResults.Success;
}
else
{
//Fails the Task
Dts.TaskResult = (int)ScriptResults.Failure;
}
}

public bool SendMail(string sSubject, string sMessage, int iPriority)
{
try
{
string sEmailServer = Dts.Variables["User::sEmailServer"].Value.ToString();
string sEmailPort = Dts.Variables["User::sEmailPort"].Value.ToString();
string sEmailUser = Dts.Variables["User::sEmailUser"].Value.ToString();
string sEmailPassword = Dts.Variables["User::sEmailPassword"].Value.ToString();
string sEmailSendTo = Dts.Variables["User::sEmailSendTo"].Value.ToString();
string sEmailSendFrom = Dts.Variables["User::sEmailSendFrom"].Value.ToString();
string sEmailSendFromName = Dts.Variables["User::sEmailSendFromName"].Value.ToString();

SmtpClient smtpClient = new SmtpClient();
MailMessage message = new MailMessage();
Attachment attach = new Attachment("C:\\Users\\Administrator\\Documents\\ICICI Cash Balance.xls");
attach.Name = "ICICI_Cash_Balance_"+DateTime.Now.ToLongDateString()+"_"+DateTime.Now.ToLongTimeString()+".xls";
message.Attachments.Add(attach);
MailAddress fromAddress = new MailAddress(sEmailSendFrom, sEmailSendFromName);
message.Bcc.Add("sagar.dumbre@agsindia.com");
//You can have multiple emails separated by ;
string[] sEmailTo = Regex.Split(sEmailSendTo, ";");
//string[] sEmailCC = Regex.Split(sEmailSendCC, ";");
int sEmailServerSMTP = int.Parse(sEmailPort);

smtpClient.Host = sEmailServer;
smtpClient.Port = sEmailServerSMTP;

System.Net.NetworkCredential myCredentials =
new System.Net.NetworkCredential(sEmailUser, sEmailPassword);
smtpClient.Credentials = myCredentials;

message.From = fromAddress;

if (sEmailTo != null)
{
for (int i = 0; i < sEmailTo.Length; ++i)
{
if (sEmailTo[i] != null && sEmailTo[i] != "")
{
message.To.Add(sEmailTo[i]);
}
}
}
switch (iPriority)
{
case 1:
message.Priority = MailPriority.High;
break;
case 3:
message.Priority = MailPriority.Low;
break;
default:
message.Priority = MailPriority.Normal;
break;
}

message.Subject = sSubject;
message.IsBodyHtml = true;
message.Body = sMessage;

smtpClient.Send(message);
return true;
}
catch (Exception ex)
{
Dts.Events.FireError(0, "Script Task Example", ex.Message + "\r" + ex.StackTrace, String.Empty, 0);
return false;
}
}
}
}

最佳答案

我感觉很幸运,所以我会发布不包含所有详细信息的帖子。

它不起作用的前 N ​​个原因

  1. 不允许 SQL Server 代理帐户与 Exchange 通信。 Domain\SqlServiceAccount 不是 Exchange 中的用户,因此无法发送邮件。 Domain\SagarDumbre Exchange 中的用户,可以发送邮件,这就是它为您工作的原因。

  2. 服务器无权与 Exchange 通信。您的 Exchange 管理员可以授权 IP 地址,即使运行 SQL Server 的帐户可以与 Exchange 通信,但也不允许地址 192.168.1.101 与邮件服务器通信。我们在 Exchange 升级/维护期间遇到了这个问题。管理员启用了该功能,以防止从未经授权的地址和不在列表中的服务器发送垃圾邮件。

  3. 防火墙和/或病毒扫描程序。由于您没有指定是否可以从您的计算机或相关服务器成功发送电子邮件,因此我还看到这些产品阻止对邮件服务器的访问,因为请求不是来自 Outlook。

    <
  4. 错误的代码。您的邮件发送代码中的某些内容出现故障,或者收到来自 MTA 的错误消息,指出它无法处理您的请求,并且代码没有在监听,或者谁知道是什么情况。触发一些信息事件,以便您可以从脚本任务获取反馈。

与您的 Exchange 管理员联系,看看他们的日志中是否有有关所发生情况的详细信息。他们可能希望在包触发时观察其界面以捕获适当的事件。

关于sql-server - SSIS包执行成功但没有发送邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13933803/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com