Errore invio email async

di il
1 risposte

Errore invio email async

Buona sera a tutti,
Ho un messaggio di errore, ma non so come agire, spero che sia capitato già ad alcuni di voi...
Io ho necessità di mandare un immagine per email, la mail la spedisco in modo asyncrono, ed essendo che nel corpo dell' email ho inserito un immagine, il body dell'email=true.
all'interno di esso ho inserito un try, e fino a qui tutto bene, esce dal try senza problemi, ma quando richiamo l’evento Sendcompleted genera un errore. Cio non succede se spedisco la email in modo sincrono.

messaggio di errore:

{System.Net.Mail.SmtpException: Errore durante l'invio della posta. ---> System.NotSupportedException: Il flusso non supporta la lettura.
   in System.Net.Mime.MimeBasePart.EndSend(IAsyncResult asyncResult)
   in System.Net.Mail.Message.EndSend(IAsyncResult asyncResult)
   in System.Net.Mail.SmtpClient.SendMessageCallback(IAsyncResult result)
   --- Fine della traccia dello stack dell'eccezione interna ---}

questo è il modo come invio email:

 	 Dim img As New PictureBox
        smtp = New SmtpClient()
        smtp.Host = "host_mail"
        smtp.Port = porta
        smtp.Credentials = New Net.NetworkCredential("email", "pss")
        mail = New MailMessage()
        mail.From = New MailAddress("email")
        mail.To.Add(email_usare)
        mail.CC.Add(email_copia)
        mail.Subject = "prova"
        mail.IsBodyHtml = True
        Dim myMailHTMLBody = "<html><head></head><body><img src=cid:ThePictureID></body></html>"
        Dim myImageData() As Byte = Nothing
        Using myImage = img.Image
            Dim IC As New ImageConverter
            myImageData = DirectCast(IC.ConvertTo(myImage, GetType(Byte())), Byte())
        End Using
        Using myStream As New MemoryStream(myImageData)
            Dim myAltView As AlternateView = AlternateView.CreateAlternateViewFromString(myMailHTMLBody, New 					 
            System.Net.Mime.ContentType("text/html"))
            Dim myLinkedResouce = New LinkedResource(myStream, "image/jpeg")
            myLinkedResouce.ContentId = "ThePictureID"
            myAltView.LinkedResources.Add(myLinkedResouce)
            mail.AlternateViews.Add(myAltView)         
        End Using
        Try
            Dim state As Object = mail
            AddHandler smtp.SendCompleted, AddressOf SendCompletedCallback
            smtp.SendAsync(mail, state)
            inviato = True
        Catch smtpEx1 As System.Net.Mail.SmtpFailedRecipientsException  
            smtp.SendAsyncCancel()
        Catch smtpEx2 As System.Net.Mail.SmtpFailedRecipientException
            smtp.SendAsyncCancel()
        Catch smtpEx3 As System.Net.Mail.SmtpException
            smtp.SendAsyncCancel()
        Catch smtpEx4 As System.Net.Sockets.SocketException
            smtp.SendAsyncCancel()
        Catch ex As Exception
            smtp.SendAsyncCancel()
        Finally
        End Try


  Private Sub SendCompletedCallback(ByVal sender As Object, ByVal e As AsyncCompletedEventArgs)
        Dim mail As MailMessage = TryCast(e.UserState, MailMessage)

        If Not e.Cancelled AndAlso e.[Error] IsNot Nothing Then
            ' MsgBox("Mail sent unsuccessfully")
        End If
        If e.Error IsNot Nothing Then
            Console.WriteLine("[{0}] {1}", mail, e.Error.ToString())   'qua genera errore!!!!!!!!!!!!!!!!!'
            '  MsgBox("Mail sent UNsuccessfully")    
            smtp.Dispose()
        Else
            '  MsgBox("Mail sent successfully")
            smtp.Dispose()
        End If
    End Sub

1 Risposte

  • Re: Errore invio email async

    Può essere che nella clausola using, chiudo stream prima che l'email venga inviata?
Devi accedere o registrarti per scrivere nel forum
1 risposte