2017-07-28 4 views
1

J'ai une tâche de script d'e-mail que j'essaie d'utiliser pour passer des variables via un SSIS script task. Je me suis assuré que j'ai bien orthographié tout et mon code compile. Je reçois cette erreur:Erreur dans la tâche de script C# dans SSIS lors de l'exécution du code pour le courrier électronique (POP3)

Exception has been thrown by the target of an invocation. at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor) at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments) at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) at System.RuntimeType.InvokeMember(String name, BindingFlags bindingFlags, Binder binder, Object target, Object[] providedArgs, ParameterModifier[] modifiers, CultureInfo culture, String[] namedParams) at Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTATaskScriptingEngine.ExecuteScript()

Je dois admettre d'être un débutant ici, et je présente mes excuses s'il y a une solution facile.

J'ai ajouté les deux espaces de noms suivants:

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

Dans le code ci-dessous, je suis codage en dur mon nom d'utilisateur et mot de passe pour les informations d'identification. Je peux changer cela en une variable (je pense.)

Lorsque je code les valeurs directement aux variables directement dans le code, il donne toujours la même erreur. Le code construit et nettoie très bien, donc toute aide est appréciée. Je vous remercie.

public void Main() 
    { 
     // TODO: Add your code here 
     { 

      string SendMailTo = Dts.Variables["SendMailTo"].Value.ToString(); 
      string SendMailFrom = Dts.Variables["SendMailFrom"].Value.ToString(); 
      string sSubject = Dts.Variables["sSubject"].Value.ToString(); 
      string sBody = Dts.Variables["sBody"].Value.ToString(); 
      string SmtpServer = Dts.Variables["SmtpServer"].Value.ToString(); 





      SendMailMessage(SendMailTo, SendMailFrom, sSubject, sBody, false, SmtpServer); 

      Dts.TaskResult = (int)ScriptResults.Success; 

     } 
    } 
    private void SendMailMessage(string SendTo, string From, string Subject, string Body, bool IsBodyHtml, string Server) 
    { 

     MailMessage htmlMessage; 
     SmtpClient mySmtpClient; 

     htmlMessage = new MailMessage(SendTo, From, Subject, Body); 
     htmlMessage.IsBodyHtml = IsBodyHtml; 

     mySmtpClient = new SmtpClient(Server); 
     mySmtpClient.Credentials = new System.Net.NetworkCredential("myusername", "mypassword"); ; 
     mySmtpClient.Send(htmlMessage); 

    } 

    } 

    #region ScriptResults declaration 
    /// <summary> 
    /// This enum provides a convenient shorthand within the scope of this class for setting the 
    /// result of the script. 
    /// 
    /// This code was generated automatically. 
    /// </summary> 
    enum ScriptResults 
    { 
     Success = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Success, 
     Failure = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Failure 
    }; 
    #endregion 

} 

Répondre

1

Rookie erreur! Le code n'a pas fonctionné dans une console C# régulière. Débogué là, fait les ajustements nécessaires, et hop! Mes excuses pour le spam.