2017-02-24 2 views
0

Si je mets manuellement mon adresse pour EmailMessage.To.Add(GetDelimitedField(x, strEmailRep, ";")) Il m'envoie le message correctement. Toutefois, si j'utilise le code comme est ci-dessous qui utilise une liste qui ressemble à ;[email protected];email2.mail.comUtilisation de MailMessage avec séparation semi-cologn

Ensuite, il donne une erreur qui email address cannot be blank

Quelque part dans GetDelimitedField est adresses effacement. Je ne suis pas sûr d'où vient le problème. Voici tout le code impliqué avec ceci.

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 

Répondre

2

Vous pouvez diviser la liste en utilisant plus facile 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

Pour exclure des éléments vides que vous feriez mieux avec 'Dim lstEmails = strEmails.Split (";" ToCharArray, de StringSplitOptions.. RemoveEmptyEntries) .ToList() ' – MrGadget

+0

Bonne recommandation @MrGadget. – N0Alias