0

我有一个使用 smartermail web 服务创建邮件帐户的 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
4

2 回答 2

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
  • 设置请求结果
  • 通用结果

这些不是内置的 .Net 类型,必须在另一个文件中定义。找到缺少的类后,只需将它们添加到项目中,您就可以开始了。

于 2013-07-26T14:36:39.163 回答
0

我想你想让 Sub Main 运行 ENTIRE 函数,并且 DON'T EXIT as 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
于 2013-07-28T10:53:44.927 回答