如何在SSIS SMTP连接管理器中为简单身份验证指定凭据?

时间:2017-04-26 14:25:22

标签: asp.net sql-server email ssis exchange-server

我们有几个发送电子邮件的asp.net个网络应用,MailMessage对象配置了SMTP服务器,用户名和密码。电子邮件发送没有问题。

SSIS包中,我添加了一个SMTP连接管理器,并配置了smtp服务器。我设置了UseWindowsAuthentication=True,因为我看不到用户名/密码输入的位置。

当我从SQL Server Agent运行包时,SSIS会正确发送电子邮件,因此显然不需要用户/密码。

那么SMTP包如何在没有用户凭据的情况下发送电子邮件? asp.net是否也不需要凭证?

我们都在同一公司网络下,我们使用Exchange Server

感谢。

4 个答案:

答案 0 :(得分:3)

查看此link

它解释了该软件包正在使用Sql Server Agent帐户连接到主机。 此外,SMTP连接管理器仅支持匿名身份验证和Windows身份验证。它不支持基本身份验证 - 如documentation中所述。

答案 1 :(得分:3)

Alan Gaylor的回答对我不起作用,但是在脚本任务(而不是电子邮件任务)中执行以下操作有效:

using System.Diagnostics;
using System.Net;
using System.Net.Mail;


    public void Main()
    {
        string UserName = Dts.Variables["UserName"].Value.ToString();
        string Password = Dts.Variables["Password"].Value.ToString();
        string EmailRecipient = Dts.Variables["EmailRecipient"].Value.ToString();
        string EmailSender = Dts.Variables["EmailSender"].Value.ToString();

        string SMTPEndPoint = Dts.Variables["SMTPEndPoint"].Value.ToString();
        Int32.TryParse(Dts.Variables["SMTPPort"].Value.ToString(), out int SMTPPort);

        string MessageSubject = Dts.Variables["MessageSubject"].Value.ToString();
        string MessageBody = Dts.Variables["MessageBody"].Value.ToString();

        MailMessage msg = new MailMessage();
        msg.To.Add(new MailAddress(EmailRecipient));
        msg.From = new MailAddress(EmailSender);
        msg.Subject = MessageSubject;
        msg.Body = MessageBody +
            "\n" +
            "\n" +
            "DISCLAIMER: The information contained in this transmission may contain privileged and confidential information. " +
            "It is intended only for the use of the person(s) named above.If you are not the intended recipient, " +
            "you are hereby notified that any review, dissemination, distribution or duplication of this communication " +
            "is strictly prohibited. If you are not the intended recipient, please contact the sender by reply email and destroy all copies of the original message.";


        SmtpClient client = new SmtpClient(SMTPEndPoint, SMTPPort)
        {
            EnableSsl = true,
            DeliveryMethod = SmtpDeliveryMethod.Network,
            Credentials = new NetworkCredential(UserName, Password)
        };
        try
        {
            client.Send(msg);
        }
        catch (Exception e)
        {
            Debug.WriteLine(e);
        }
        Dts.TaskResult = (int)ScriptResults.Success;
    }

答案 2 :(得分:2)

使用参数化的ConnectionString属性创建一个SMTP连接管理器,该属性包含一个包含smtp用户和密码的字符串。

  1. 使用New Connection ...选项创建连接,选择SMTP作为类型。
  2. 无需任何连接设置即可保存。给它任何你想要的名字。
  3. 右键单击连接,然后选择参数化...
  4. 选择Property = ConnectionString
  5. 选择创建新参数(例如SMTPConnectionManager_ConnectionString)
  6. 将值设置为连接字符串(例如,SmtpServer = aspmx.l.google.com; port = 25; UseWindowsAuthentication = False; EnableSsl = False; user=user@gmail.com; password = password123
  7. 为您的部署方法(包或项目)设置适当级别的范围。
  8. 点击确定

答案 3 :(得分:0)

按照以下步骤操作

  1. 创建一个发送邮件任务,然后创建一个新的 smtpConnection。

enter image description here

  1. 输入您的邮件服务器名称,然后单击确定

enter image description here

  1. 右键单击 SMTP 连接管理器,然后单击参数化。

enter image description here

  1. 从属性列表中选择 ConnectionString

enter image description here

  1. 将用户名、密码和端口添加到您的连接字符串值
<块引用>

SmtpServer=mail.yourServerName.com;UseWindowsAuthentication=False;EnableSsl=False;port=portnumber;user=YourUserName;Password=YourPassword;

enter image description here