2013-07-26 52 views
0

我有一个使用smartermail webservice创建邮件帐户的VB.NET脚本,我对VB.Net一无所知,但我对编程有一点了解。我在Visual Studio 2012上创建了一个新项目,并且知道我需要调用在主模块上创建帐户的函数来运行它,这是一个控制台应用程序项目。在主模块上调用函数

主模块(Module1.vb中)如下:

Module Module1 
     Sub Main() 
     End Sub 
End Module* 

我的功能是:

Sub fnc_CriaContas_Email_Lote() 

这是在同一个目录中的文件cria_contas_lote.vb

内容cria_contas_lote.vb的:

Sub fnc_CriaContas_Email_Lote() 

    Dim oPainelWS As PainelControle.svcSmarterMail 
    Dim sRetorno As String = "" 

    Try 
     'oPainelWS = New PainelControle.svcSmarterMail("xxx.xxx.xxx.xxx") 
    Catch ex As Exception 
     Console.WriteLine("Erro ao efetuar a conexão no servidor remoto: " & ex.Message) 
     Exit Sub 
    End Try 

    Dim sNomeArquivo As String = "C:\dir\emails.xlsx" 
    Dim sSQL As String = "" 

    Dim stringExcel As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & sNomeArquivo & ";Extended Properties=Excel 12.0" 
    Dim oExcel As New OleDbConnection(stringExcel) 

    Try 
     oExcel.Open() 
    Catch ex As Exception 
     Console.Write("O arquivo não foi localizado ou ocorreu um erro de abertura no servidor. Arquivo: " & sNomeArquivo) 
     Console.Write(vbCrLf & "================================================") 
     Console.Write(vbCrLf & ex.Message) 
     Console.Write(vbCrLf & "================================================") 

     Exit Sub 
    End Try 

    Dim oDataSet As New DataSet 
    Try 
     Dim oExcelAdapter As New OleDbDataAdapter("select * from [contas_pop$]", oExcel) 
     oExcelAdapter.Fill(oDataSet, "conteudo") 
    Catch ex As Exception 
     Console.Write("A tabela CONTAS_POP não foi localizada. Renomeie sua WorkSheet para CONTAS_POP") 
     oExcel.Close() 
     Exit Sub 
    End Try 
    oExcel.Close() 

    Dim oDataview As DataView = oDataSet.Tables("conteudo").DefaultView 

    Dim lTotal As Long = 0 
    Dim lErro As Long = 0 
    Dim oLinha As DataRow 
    Dim iTamanhoCaixa As Integer = 1024 
    Dim sComCopia As String 

    For Each oLinha In oDataSet.Tables("conteudo").Rows 

     If Not (Trim(oLinha("conta").ToString) = "") Then 

      Console.Write("Criando [" & Trim(oLinha("conta").ToString) & "]...") 
      sRetorno = "" 
      sComCopia = Trim(oLinha("enviar_copia").ToString) 
      iTamanhoCaixa = oLinha("tamanho_mb") 

      sRetorno = CriaContaPOP(Trim(oLinha("conta").ToString), Trim(oLinha("apelidos").ToString), Trim(oLinha("password").ToString), iTamanhoCaixa, oLinha("nome").ToString, sComCopia, "admin", "password") 
      'sRetorno = oPainelWS.CriaContaPOP(oLinha("conta"), Trim(oLinha("apelidos").ToString), oLinha("senha"), iTamanhoCaixa, "", sComCopia, "", "") 
      Console.WriteLine("Retorno: " & sRetorno) 
      'If Not (sRetorno = "OK") Then 
      'Exit Sub 
      'End If 

      Threading.Thread.Sleep(100) 

     End If 

    Next 


End Sub 


Public Function CriaContaPOP(ByVal sConta As String, ByVal sApelidos As String, ByVal sSenha As String, ByVal iTamanhoCaixaKB As String, ByVal sNome As String, ByVal sForwardTo As String, ByVal sAdminUsuario As String, ByVal sAdminSenha As String) As String 


    If Not (iTamanhoCaixaKB > 1) Then 
     Return "ERRO: Tamanho da caixa postal não pode ser inferior a 1 KB" 
    End If 

    Dim aContaNome As String() = Split(sConta, "@") 
    Dim sContaNome As String = "" 
    Dim sDominio As String = "" 
    sContaNome = aContaNome(0) 
    sDominio = aContaNome(1) 

    Dim oUsuarios As New svcUserAdmin 
    Dim oUsuarioInfo As New SettingsRequestResult 
    Dim oResultado As New GenericResult 

    oResultado = oUsuarios.AddUser2(sAdminUsuario, sAdminSenha, sContaNome, sSenha, sDominio, sNome, "", False, iTamanhoCaixaKB) 
    If (oResultado.Result = False) Then 
     Return "ERRO: Não foi possivel incluir a conta de e-mail: " & oResultado.Message 
    End If 


    If Not (sForwardTo.ToString = "") Then 
     Dim arrInfo(0) As String 
     arrInfo(0) = "forwardaddress=" & sForwardTo.ToString 
     oResultado = oUsuarios.SetRequestedUserSettings(sAdminUsuario, sAdminSenha, sConta, arrInfo) 
     If (oResultado.Result = False) Then 
      Return "ERRO: Não foi possivel incluir a conta de e-mail: " & oResultado.Message 
     End If 
    End If 

    Return "OK" 

End Function 

回答

2

你尝试过什么?因为它代表它听起来像所有你需要做的是

Module Module1 

    Sub Main() 
     fnc_CriaContas_Email_Lote() 
    End Sub 

    Sub fnc_CriaContas_Email_Lote() 
     ' Do something. 
    End Sub 

End Module 

如果“fnc_CriaContas_Email_Lote”是一类,那么你可能需要做一些事情,如:

Module Module1 

    Sub Main() 
     dim email as new cria_contas_lote() 

     email.fnc_CriaContas_Email_Lote() 
    End Sub 

End Module 

在没有看到cria_contas_lote文件的硬知道。

编辑:下面是你如何把它所有的只是模块

Imports System.Data.OleDb 

Module Module1 

Sub Main() 

    fnc_CriaContas_Email_Lote() 

End Sub 

Sub fnc_CriaContas_Email_Lote() 

    Dim oPainelWS As PainelControle.svcSmarterMail 
    Dim sRetorno As String = "" 

    Try 
     'oPainelWS = New PainelControle.svcSmarterMail("xxx.xxx.xxx.xxx") 
    Catch ex As Exception 
     Console.WriteLine("Erro ao efetuar a conexão no servidor remoto: " & ex.Message) 
     Exit Sub 
    End Try 

    Dim sNomeArquivo As String = "C:\dir\emails.xlsx" 
    Dim sSQL As String = "" 

    Dim stringExcel As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & sNomeArquivo & ";Extended Properties=Excel 12.0" 
    Dim oExcel As New OleDbConnection(stringExcel) 

    Try 
     oExcel.Open() 
    Catch ex As Exception 
     Console.Write("O arquivo não foi localizado ou ocorreu um erro de abertura no servidor. Arquivo: " & sNomeArquivo) 
     Console.Write(vbCrLf & "================================================") 
     Console.Write(vbCrLf & ex.Message) 
     Console.Write(vbCrLf & "================================================") 

     Exit Sub 
    End Try 

    Dim oDataSet As New DataSet 
    Try 
     Dim oExcelAdapter As New OleDbDataAdapter("select * from [contas_pop$]", oExcel) 
     oExcelAdapter.Fill(oDataSet, "conteudo") 
    Catch ex As Exception 
     Console.Write("A tabela CONTAS_POP não foi localizada. Renomeie sua WorkSheet para CONTAS_POP") 
     oExcel.Close() 
     Exit Sub 
    End Try 
    oExcel.Close() 

    Dim oDataview As DataView = oDataSet.Tables("conteudo").DefaultView 

    Dim lTotal As Long = 0 
    Dim lErro As Long = 0 
    Dim oLinha As DataRow 
    Dim iTamanhoCaixa As Integer = 1024 
    Dim sComCopia As String 

    For Each oLinha In oDataSet.Tables("conteudo").Rows 

     If Not (Trim(oLinha("conta").ToString) = "") Then 

      Console.Write("Criando [" & Trim(oLinha("conta").ToString) & "]...") 
      sRetorno = "" 
      sComCopia = Trim(oLinha("enviar_copia").ToString) 
      iTamanhoCaixa = oLinha("tamanho_mb") 

      sRetorno = CriaContaPOP(Trim(oLinha("conta").ToString), Trim(oLinha("apelidos").ToString), Trim(oLinha("password").ToString), iTamanhoCaixa, oLinha("nome").ToString, sComCopia, "admin", "password") 
      'sRetorno = oPainelWS.CriaContaPOP(oLinha("conta"), Trim(oLinha("apelidos").ToString), oLinha("senha"), iTamanhoCaixa, "", sComCopia, "", "") 
      Console.WriteLine("Retorno: " & sRetorno) 
      'If Not (sRetorno = "OK") Then 
      'Exit Sub 
      'End If 

      Threading.Thread.Sleep(100) 

     End If 

    Next 


End Sub 

Public Function CriaContaPOP(ByVal sConta As String, ByVal sApelidos As String, ByVal sSenha As String, ByVal iTamanhoCaixaKB As String, ByVal sNome As String, ByVal sForwardTo As String, ByVal sAdminUsuario As String, ByVal sAdminSenha As String) As String 


    If Not (iTamanhoCaixaKB > 1) Then 
     Return "ERRO: Tamanho da caixa postal não pode ser inferior a 1 KB" 
    End If 

    Dim aContaNome As String() = Split(sConta, "@") 
    Dim sContaNome As String = "" 
    Dim sDominio As String = "" 
    sContaNome = aContaNome(0) 
    sDominio = aContaNome(1) 

    Dim oUsuarios As New svcUserAdmin 
    Dim oUsuarioInfo As New SettingsRequestResult 
    Dim oResultado As New GenericResult 

    oResultado = oUsuarios.AddUser2(sAdminUsuario, sAdminSenha, sContaNome, sSenha, sDominio, sNome, "", False, iTamanhoCaixaKB) 
    If (oResultado.Result = False) Then 
     Return "ERRO: Não foi possivel incluir a conta de e-mail: " & oResultado.Message 
    End If 


    If Not (sForwardTo.ToString = "") Then 
     Dim arrInfo(0) As String 
     arrInfo(0) = "forwardaddress=" & sForwardTo.ToString 
     oResultado = oUsuarios.SetRequestedUserSettings(sAdminUsuario, sAdminSenha, sConta, arrInfo) 
     If (oResultado.Result = False) Then 
      Return "ERRO: Não foi possivel incluir a conta de e-mail: " & oResultado.Message 
     End If 
    End If 

    Return "OK" 

End Function 

End Module 

你的问题是丢失的以下几种类型:

  • PainelControle.svcSmarterMail
  • svcUserAdmin
  • SettingsRequestResult
  • GenericResult

这些不是建立在.Net类型中,必须在另一个文件中定义。一旦你找到了缺失的课程,只需将它们添加到项目中,你应该很好。

+0

我想知道如何引用文件cria_contas_lote.vb所以主模块知道在哪里可以找到功能fnc_CriaContas_Email_Lote。 基本上我想要的是让主模块运行整个功能。 –

+0

你的意思是将它添加到你的项目中?你能否将cria_contas_lote文件的内容放入问题中? – pingoo

+0

我已被添加到问题 –

0

我想你想让Sub Main运行整个函数,并且不要在执行sub main时退出。
在这里你的问题的 我已经写了答案:VB.net program with no UI

Sub Main() 
    'Write whatever you want, and add this code at the END: 
    Application.Run 
End Sub