2017-02-24 33 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