2017-02-24 30 views
0

如果我手動把我的地址爲EmailMessage.To.Add(GetDelimitedField(x, strEmailRep, ";"))它發送給我的消息就好了。但是如果我使用的代碼是低於使用,看起來像;[email protected];email2.mail.com使用Mailmessage與半科隆分開

然後給出了一個錯誤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("[email protected]") 
       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 

回答

2

您可以分割使用string.Split列表容易:

Dim strEmails = "[email protected];[email protected];[email protected];" 

    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 
+0

要排除你最好空元素與'昏暗lstEmails = strEmails.Split( 「;」 ToCharArray,StringSplitOptions。 RemoveEmptyEntries).ToList()' – MrGadget

+0

不錯的推薦@MrGadget。 – N0Alias