Saltar al contenido principal

 none
Envio de email por Script Task RRS feed

  • Pregunta

  • Hola buenas.

    Agradeceria alguien me pueda ayudar con un error que me aparece al intentar enviar un email desde el objeto script task en SSIS 2008.

    el error dice lo siguiente: "Authentication failed because the remote party has closed the transport stream."

    Estoy utilizando correo de outlook.com

    los parametros para el puerto son 25 y para el servidor smtp es: smtp.office365.com

    comprobé nombre de usuario y contraseña y entro correctamente vía web.

    este es el script utilizado.

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

    namespace ST_75ab2e59748d48ce93c363add76d7d11.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 = Dts.Variables["EmailSubjects"].Value.ToString();
                string sBody = Dts.Variables["EmailBody"].Value.ToString();
                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
                {
                    ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls;  
                    string sEmailServer = Dts.Variables["EmailServer"].Value.ToString();
                    string sEmailPort = Dts.Variables["EmailPort"].Value.ToString();
                    string sEmailUser = Dts.Variables["EmailUser"].Value.ToString();
                    string sEmailPassword = Dts.Variables["EmailPassword"].Value.ToString();
                    string sEmailSendTo = Dts.Variables["EmailSendTo"].Value.ToString();
                    //string sEmailSendCC = Dts.Variables["EmailSendCC"].Value.ToString();
                    string sEmailSendFrom = Dts.Variables["EmailSendFrom"].Value.ToString();
                    string sEmailSendFromName = Dts.Variables["EmailSendFromName"].Value.ToString();
                    SmtpClient smtpClient = new SmtpClient();
                    MailMessage message = new MailMessage();
                    MailAddress fromAddress = new MailAddress(sEmailSendFrom, sEmailSendFromName);
                    //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;
                    smtpClient.EnableSsl = true;
                    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]);
                            }
                        }
                    }
                    /*
                    if (sEmailCC != null)
                    {
                    for (int i = 0; i < sEmailCC.Length; ++i)
                    {
                    if (sEmailCC[i] != null && sEmailCC[i] != ��)
                    {
                    message.To.Add(sEmailCC[i]);
                    }
                    }
                    }*/
                    switch (iPriority)
                    {
                        case 1:
                            message.Priority = MailPriority.High;
                            break;
                        case 3:
                            message.Priority = MailPriority.Low;
                            break;
                        default:
                            message.Priority = MailPriority.Normal;
                            break;
                    }
                   /*
                    Attachment myAttachment = new Attachment("C:/FF/test.txt");
                    message.Attachments.Add(myAttachment);
                    */
                    message.Subject = sSubject;
                    message.IsBodyHtml = true;
                    message.Body = sMessage;
                    smtpClient.Send(message);
                    return true;
                }
                catch (Exception exc)
                {
                    return false;
                }
            }
        }
    }

    viernes, 22 de noviembre de 2019 15:39

Todas las respuestas

  • Si cambio el puerto a 465, el error es diferente.

    System.Net.Mail.SmtpException: Failure sending mail. ---> System.IO.IOException: Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host. ---> System.Net.Sockets.SocketException: An existing connection was forcibly closed by the remote host

    ¿Alguien ha podido solucionarlo?.

    viernes, 22 de noviembre de 2019 19:05