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