2013-07-26 57 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