使用带有分号分隔符的 MailMessage

Using MailMessage with semi cologn seperation

如果我手动输入 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

您可以使用 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