Inviare e-mail in formato HTML con allegati (re-loaded!)

Riprendo il mio post con cui mostravo il codice per inviare un’e-mail con allegato in modo automatico da Visual Basic, anche in formato HTML.

Ovviamente quel codice si riferiva alla possibilità di utilizzare un server SMTP “libero”, senza necessità di credenziali. Ora quasi tutti i server SMTP richiedono le credenziali di accesso e quindi si rende necessario cambiare metodo di connessione, senza contare che potremmo voler effettuare l’invio delle e-mail dal nostro server SMTP.

Ecco quindi il codice necessario:

Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, _
          ByVal e As System.EventArgs) Handles Button1.Click

        inviaMail(Me.TextBox1.Text, Me.TextBox2.Text,
           Me.TextBox3.Text, Me.TextBox4.Text, Me.TextBox5.Text,
           Me.TextBox6.Text, Me.TextBox7.Text, Me.TextBox8.Text)

        MessageBox.Show("Mail spedita!")
    End Sub

    Sub inviaMail(ByVal SmtpServer As String,
                   ByVal utente As String,
                   ByVal nomeMittente As String,
                   ByVal password As String,
                   ByVal destinatario As String,
                   ByVal oggetto As String,
                   ByVal messaggio As String,
                   ByVal allegato As String)
        ' Imposta Mittente
        Dim addr As New Net.Mail.MailAddress(utente, nomeMittente)
        ' Imposta Destinatario
        Dim dest As New Net.Mail.MailAddress(destinatario)
        ' Imposta E-Mail
        Dim mess As New Net.Mail.MailMessage(addr, dest)
        ' Imposta oggetto
        mess.Subject = oggetto
        ' Imposta tipo messaggio (HTML o testo)
        If Me.CheckBox1.Checked Then
            mess.IsBodyHtml = True
        Else
            mess.IsBodyHtml = False
        End If
        ' Imposta corpo del messaggio
        mess.Body = messaggio
        ' Imposta allegato
        Dim attach As New Net.Mail.Attachment(allegato)
        mess.Attachments.Add(attach)
        ' Connessione al server SMTP
        Dim smtpcl As New Net.Mail.SmtpClient(SmtpServer, 25)
        ' Imposta credenziali di accesso
        Dim cred As New Net.NetworkCredential(utente, password)
        smtpcl.Credentials = cred
        ' Invio e-mail
        smtpcl.Send(mess)
    End Sub
End Class

 

Potete implementare l’interfaccia grafica come volete, ma nel codice sono stati previsti 8 controlli di tipo TextBox: ciascuno di questi rappresenta, nello stesso ordine, gli argomenti passati al metodo inviaMail. Inoltre ho utilizzato un controllo CheckBox per impostare il tipo di messaggio: se selezionato = formato HTML, se non selezionato = formato testo.

Ovviamente, nei campi relativi al server SMTP, al nome utente e alla password dovrete inserire quelli che vi vengono forniti dal vostro provider.

Annunci

Pubblicato il 19 marzo 2012 su Novità. Aggiungi ai preferiti il collegamento . 6 commenti.

  1. Ciao ho una curiosità;

    Supponendo ti utilizzare questo codice all’interno di un software per dare la possibilità di inviare feedback o segnalare degli errori, c’è il rischio che qualche utente un po incivile possa scovare i campi relativi al nome utente e password ?

    Mi piace

    • Ovviamente sì, se inserisci le credenziali direttamente nel codice (cosa che non consiglio).
      Probabilmente, la cosa migliore sarebbe far sì che il lavoro di spedire le e-mail lo facesse un web server o un web service, così che tu puoi autenticare l’utente e se l’utente è regolarmente autenticato può accedere alla funzionalità di invio, senza però avere le credenziali della casella di posta elettronica.
      I feedback e le segnalazioni di errore, comunque, si possono inviare anche con altri mezzi, senza utilizzare l’e-mail (appunto con web service e altre tecniche).

      Mi piace

  2. Grazie Mario, stavo cercando un esempio simile.

    Mi piace

  3. secondo voi è possibile creare un codice di qeusto genere che vada a creare un messaggio di posta con outlook express compilato con i dati da noi scelti e quindi pronto all’invio?
    oppure con invio diretto ma in modo d’averne traccia nella “Posta inviata”.
    Grazie per l’attenzione! Saluti a tutti!

    Mi piace

    • Con Outlook “full” (non Express) è possibile utilizzare l’automazione di Office, mentre non credo che sia possibile farlo con Outlook Express (non essendo Office…).
      La cosa più semplice da fare con Outlook Express potrebbe essere quella di inviare i messaggi aggiungendo anche la propria e-mail nel campo “ccn:”, così che nella posta in arrivo troveremo il messaggio spedito al destinatario con il programma esterno.
      Non è molto elegante, questo è sicuro, ma è sicuramente una possibilità da prendere in considerazione per aggirare il problema…

      Mi piace

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

%d blogger hanno fatto clic su Mi Piace per questo: