使用具有半cologn分离的MailMessage

时间:2017-02-24 19:24:14

标签: vb.net mailmessage

如果我手动将我的地址输入EmailMessage.To.Add(GetDelimitedField(x, strEmailRep, ";"))它会向我发送消息。但是,如果我使用下面的代码,它使用的列表看起来像;email1@mail.com;email2.mail.com

然后它会出现email address cannot be blank

的错误

GetDelimitedField中的某处正在删除地址。我不确定问题实际发生在哪里。以下是与此相关的所有代码。

strmsg = "LOW STOCK ALERT: Component (" & rsMPCS("MTI_PART_NO") & ") has reached or fallen below it's minimum quantity(" & rsMPCS("MIN_QTY") & ")."
                Dim EmailMessage As MailMessage = New MailMessage
                EmailMessage.From = New MailAddress("noreply@mail.com")
                For x = 1 To GetCommaCount(strEmailRep) + 1
                EmailMessage.To.Add(GetDelimitedField(x, strEmailRep, ";"))
                Next
                EmailMessage.Subject = ("LOW STOCK ALERT!")
                EmailMessage.Body = strmsg
                EmailMessage.Priority = MailPriority.High
                EmailMessage.IsBodyHtml = True

                Dim smtp As New SmtpClient("smtp.mycompany.com")

                smtp.UseDefaultCredentials = True
                smtp.Send(EmailMessage)


    Public Function GetCommaCount(ByVal sText As String)
        Dim X As Integer
        Dim Count As Integer
        Dim Look As String
        For X = 1 To Len(sText)
            Look = Microsoft.VisualBasic.Left(sText, X)
            If InStr(X, Look, ";", 1) > 0 Then
                Count = Count + 1
            End If
        Next
        GetCommaCount = Count
    End Function


    Public Function GetDelimitedField(ByRef FieldNum As Short, ByRef DelimitedString As String, ByRef Delimiter As String) As String
        Dim NewPos As Short
        Dim FieldCounter As Short
        Dim FieldData As String
        Dim RightLength As Short
        Dim NextDelimiter As Short

        If (DelimitedString = "") Or (Delimiter = "") Or (FieldNum = 0) Then
            GetDelimitedField = ""
            Exit Function
        End If

        NewPos = 1
        FieldCounter = 1

        While (FieldCounter < FieldNum) And (NewPos <> 0)
            NewPos = InStr(NewPos, DelimitedString, Delimiter, CompareMethod.Text)
            If NewPos <> 0 Then
                FieldCounter = FieldCounter + 1
                NewPos = NewPos + 1
            End If
        End While

        RightLength = Len(DelimitedString) - NewPos + 1
        FieldData = Microsoft.VisualBasic.Right(DelimitedString, RightLength)
        NextDelimiter = InStr(1, FieldData, Delimiter, CompareMethod.Text)
        If NextDelimiter <> 0 Then
            FieldData = Microsoft.VisualBasic.Left(FieldData, NextDelimiter - 1)
        End If
        GetDelimitedField = FieldData
    End Function

1 个答案:

答案 0 :(得分:2)

您可以使用string.Split:

更轻松地拆分列表
    Dim strEmails = "a@test.com;b@test.com;c@test.com;"

    Dim lstEmails = strEmails.Split(";").ToList()

    'In case the last one had a semicolon:
    If (lstEmails(lstEmails.Count - 1).Trim() = String.Empty) Then
        lstEmails.RemoveAt(lstEmails.Count - 1)
    End If

    If (lstEmails.Count > 0) Then
        lstEmails.AddRange(lstEmails)
    End If