2011-01-25 4 views
0

J'ai un problème usuel avec ma pièce jointe memorystream sur un projet VB.net. J'appelle un membre partagé (SendMail) passant dans un objet client et un flux de mémoire d'un fichier à envoyer en pièce jointe. Dans le "SendMail" il appelle deux fonctions distinctes pour préparer un e-mail régulier et un autre pour un e-mail signé numériquement. Le problème que j'ai est que je reçois l'email signé numériquement parfait, cependant, dans l'email normal, la pièce jointe est vide et le nom de fichier a été ajouté (64 B). Si je désactive la partie de la signature numérique, les courriers réguliers fonctionnent correctement. Il semble que le flux de données change quelque part dans la signature numérique.problème usuel avec la pièce jointe system.net.mail

Voici la façon dont je fais les appels

mailHelper.SendMail(cust, attachment) 

withing la mailHelper CLASSE

Public Shared Sub SendEmail(ByVal cust As Customer, ByVal attachment As MemoryStream) 

    Dim messages As New List(Of MailMessage) 
    messages.Add(CreateUnSignedMail(cust,attachment) 
    messages.Add(CreateSignedMail(cust,attachment) 
    SendSMTPMail(messages) 
End Sub 

Private Shared Function CreateUnSignedMail(ByVal cust As Customer, ByVal attachment As MemoryStream) As MailMessage 

Dim eMail As New MailMessage() 
     With eMail 
      .//Normal properties set (like to, from etc) 

      .Attachments.Add(New Attachment(attachment, "someFilename.doc") 
     End With 
     Return eMail 
End Function 

Private Shared Function CreateSignedMail(ByVal cust As Customer, ByVal attachment As MemoryStream) As MailMessage 

Dim eMail As New SecureMailMessage() 
     With eMail 
      .//Normal properties set (like to, from etc) 

      .Attachments.Add(New SecureAttachment(attachment, "someFilename.doc") 
     End With 
     Return eMail 
End Function 


Private Shared Sub SendSMTPMail(ByVal messages As List(Of System.Net.Mail.MailMessage)) 
     Dim smtp As New SmtpClient("myServer") 
     Try 
      With smtp 
       .//Additional properties set 

       For Each email In messages 
        .Send(email) 
       Next 

      End With 

     Catch ex As Exception 
      //Log error to file. 
      Logger.Log.Error("SMTP Error", ex) 
      Throw 
     End Try 
End Sub 

Si j'essayez ce qui suit, il fonctionne très bien, cependant, est-ce la bonne solution?

messages.Add(SendUnSignedMail(cust, New MemoryStream(attachment.ToArray()))) 
messages.Add(SendSignedMail(cust, New MemoryStream(attachment.ToArray()))) 

Répondre

0

On suppose que vous avez déjà réglé ça étant donné le retard à obtenir une réponse, mais voici ma tentative de toute façon ...

Il y en a plusieurs pour créer une surcharge pièce jointe, aucun d'eux correspondre à la façon dont vous initialisé l'attachement. Lors de la création d'une pièce jointe, le second paramètre doit être NULL ou identifier un type MIME valide pour votre pièce jointe.

Espérons que cela aide.