+ Rispondi al Thread
Pagina 1 di 2 12 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11

Discussione: [VBE2015]Invio mail tramite client posta

  1. #1
    L'avatar di vbrookie
    vbrookie non è in linea Scolaretto
    Luogo
    Treviso
    Post
    169

    [VBE2015]Invio mail tramite client posta

    Buongiorno a tutti.
    Attualmente utilizzo questo codice per inviare un mail con allegato e campi precompilati.
    codice:
    Dim Mail As New MailMessage
            
            My.Computer.FileSystem.CopyFile(Application.StartupPath & "Demo.pdf", "D:\" & TextBox14.Text, True)
            
            Dim Allegato = New System.Net.Mail.Attachment("D:\" & TextBox14.Text)
            Mail.Subject = "Prova Mail da Vb.net"
            Mail.To.Add("xxxxxxxxxxxx@xxxx.xxx")
            Mail.From = New MailAddress("yyyyyyyyyyy@yyyyyy.yyyy")
            Mail.Body = "Invio documento Nr. " & TextBox11.Text
            Mail.Attachments.Add(Allegato)
    
            Dim SMTP As New SmtpClient("smtp-mail.outlook.com")
            SMTP.EnableSsl = True
            SMTP.Credentials = New System.Net.NetworkCredential("xxxxxxxxxx@xxxxx.xxx", "zzzzzz")
            SMTP.Port = "587"
            MsgBox("Invio messaggio in corso", vbInformation, "Invio Mail")
            Cursor.Current = Cursors.WaitCursor
            SMTP.Send(Mail)
            MsgBox("Messaggio inviato correttamente", vbOK, "Invio Mail")
            Cursor.Current = Cursors.Default
    Viene visualizzato un form coi campi destinatario, oggetto, allegato e testo già compilati e la mail viene inviata.
    Mi sembra più professionale però utlilizzare il clienti di posta predefinito dall'utente.
    Quindi vorrei che fosse lanciato il client (outlook, thunderbird ecc) coi campi precompilati e l'allegato inserito ma, pur avendo girato per il web, non riesco a trovare un suggerimento che mi aiuti.
    Chiedo a voi se sapete illuminarmi il cammino...
    Vi ringrazio per l'aiuto.
    Ciao

  2. #2
    Francesco53 non è in linea Scolaretto
    Post
    106

  3. #3
    L'avatar di vbrookie
    vbrookie non è in linea Scolaretto
    Luogo
    Treviso
    Post
    169
    Grazie Francesco53.
    Avevo visto questo thread, ma nell'esempio non è previsto l'invio dell'allegato.
    Grazie comunque.
    Ciao

  4. #4
    Francesco53 non è in linea Scolaretto
    Post
    106
    Ciao se devi inviare un file, e conosci percorso e nome del file, puoi aggiungere alla riga attachment
    codice:
    Dim myMail As New MailMessage()
            myMail.Subject = "Oggetto Email"
            myMail.Body = TextBox4.Text
            Dim str As String
            str = "mailto:" + "miaemail@gmail.com" + "?Subject=" & myMail.Subject + "&Body=" & myMail.Body + "&attachment=" & percorso_file
            System.Diagnostics.Process.Start(str)
    Francesco

  5. #5
    L'avatar di vbrookie
    vbrookie non è in linea Scolaretto
    Luogo
    Treviso
    Post
    169
    Ciao Francesco53,
    ho provato come da te suggerito ma sul client di posta l'allegato non viene aggiunto.
    Sembra proprio che l'oggetto system.net.mail non preveda l'allegato.
    Grazie comunque per l'aiuto.
    Ciao

  6. #6
    Sgrubak non è in linea Scolaretto
    Luogo
    Torrazza Piemonte
    Post
    191
    Quote Originariamente inviato da vbrookie Visualizza il messaggio
    Ciao Francesco53,
    Sembra proprio che l'oggetto system.net.mail non preveda l'allegato.
    Ciao
    Ciao vbrookie,

    quello è un Namesapce. Francesco ti ha suggerito di usare l'oggetto MailMessage

  7. #7
    L'avatar di vbrookie
    vbrookie non è in linea Scolaretto
    Luogo
    Treviso
    Post
    169
    Ciao,
    sto facendo un pò di confusione e credo di essermi perso.
    Questo è il codice che uso:

    codice:
    Imports System
    Imports System.Net
    Imports System.Net.Mail
    
    Public Class Form1
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Dim myMail As New MailMessage()
            Dim str As String
            myMail.Subject = "Oggetto Email"
            myMail.Body = "pippo"
            str = "mailto:" + "YYYYYYYYYYYY@YYYYYYYY.YY" + "?Subject=" & "Prova" + "&Body=" & "Invio mail" + "&attachment=" & "C:\Users\LS\Desktop\XXXX.XXX"
            System.Diagnostics.Process.Start(str)
        End Sub
    End Class
    Il programma predefinito parte ma senza allegato.
    Dove sbaglio ??????

  8. #8
    patel45 non è in linea Scolaretto
    Post
    245
    io credo che mailto non c'entri niente con la classe mailmessage che andrei a studiare meglio

  9. #9
    Sgrubak non è in linea Scolaretto
    Luogo
    Torrazza Piemonte
    Post
    191
    Quote Originariamente inviato da vbrookie Visualizza il messaggio
    Dove sbaglio ??????
    In un paio di punti a mio avviso:
    Non ha senso creare un MailMessage se poi non lo usi...
    Puoi valorizzarne le proprietà così:
    codice:
            Dim myMail As New MailMessage("mittente@dominio.it", "destinatario@dominio.it")
            myMail.Subject = "Oggetto Email"
            myMail.Body = "pippo"
            myMail.Attachments.Add(New Attachment("C:\miofile.txt"))
    E poi lo invii tramite un SmtpClient.Send ma non passi tramite il client predefinito...

    Il protocollo mailto: ti apre il client predefinito, ma non prevede "Attachements" tra gli headers. Se usi questa strada il file lo deve allegare l'utente a mano.

    Un buon compromesso è riportato a questo link ma è da tradurre da C# a VB.

  10. #10
    Sgrubak non è in linea Scolaretto
    Luogo
    Torrazza Piemonte
    Post
    191
    AGGIORNAMENTO:

    HO riscritto il codice in VB ed ottengo correttamente una nuova mail con tanto di allegato annesso. Sfortunatamente non la apre come "Nuovo Messaggio"...
    Devo scegliere l'opzione "modifica come nuovo messaggio" e poi inviarla. il mio client di posta è Thunderbird

    Riporto di seguito la traduzione del codice:

    Option Infer On

    Imports System.IO
    Imports System.Net.Mail
    Imports System.Reflection
    Imports System.Runtime.CompilerServices

    Namespace Utility
    Public Module MailMessageExtensions
    <Extension()>
    Public Sub Save(message As MailMessage,
    filename As String, Optional addUnsentHeader As Boolean = True)

    Using filestr = File.Open(filename, FileMode.Create)
    If addUnsentHeader Then
    Dim binaryWriter = New BinaryWriter(filestr)
    'Scrive l'intestazione Unsent così che il Client apra il file in modalità "Nuovo Messaggio"
    binaryWriter.Write(System.Text.Encoding.UTF8.GetBytes("X-Unsent: 1" & Environment.NewLine))
    End If

    Dim assembly = GetType(SmtpClient).Assembly
    Dim mailWriterType = assembly.GetType("System.Net.Mail.MailWriter")

    Dim Par1() = {GetType(Stream)}
    Dim mailWriterConstructor = mailWriterType.GetConstructor(BindingFlags.Instance Or BindingFlags.NonPublic, Nothing, Par1, Nothing)

    Dim Par2() = {filestr}
    Dim mailWriter = mailWriterConstructor.Invoke(Par2)
    Dim sendMethod = GetType(MailMessage).GetMethod("Send", BindingFlags.Instance Or BindingFlags.NonPublic)

    Dim Par3() = {mailWriter, True, True}
    sendMethod.Invoke(message, BindingFlags.Instance Or BindingFlags.NonPublic, Nothing, Par3, Nothing)

    Dim closeMethod = mailWriter.GetType().GetMethod("Close", BindingFlags.Instance Or BindingFlags.NonPublic)
    Dim Par4() = {}
    closeMethod.Invoke(mailWriter, BindingFlags.Instance Or BindingFlags.NonPublic, Nothing, Par4, Nothing)
    End Using
    End Sub
    End Module
    End Namespace


    per l'utilizzo del Modulo:

    Imports System.Net.Mail
    '====ATTENZIONE: SOSTITUIRE CON IL NAMESPACE CORRETTO!! ===========
    Imports WindowsApp1.Utility
    '==================================================================

    Public Class Form1
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim myMail As New MailMessage("mittente@dominio.it", "destinatario@dominio.it") With {
    .Subject = "Oggetto Email",
    .Body = "pippo"
    }
    myMail.Attachments.Add(New Attachment("C:\percorsoallegato.est"))
    myMail.Save("PercorsoTemporaneo") 'Chiamata al metodo d'estensione
    Process.Start("PercorsoTemporaneo")
    End Sub
    End Class


+ Rispondi al Thread
Pagina 1 di 2 12 ultimoultimo

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi