Invio Email con VB .NET

martedì 11 ottobre 2005 - 18.12

Gho5t Profilo | Junior Member

Vorrei sapere come fare per far inviare un'email da VB .NET......

ho già constatato che System.web.mail non funziona visto che si può usare solamente con ASP .NET.


Qualche suggerimento?

Gho5t Profilo | Junior Member

come si fà a referenziarla?
io ho provato con imports System.web.mail
ma lui non me lo accetta......
Gli unici tre imports di System.web sono:

Imports System.Web.AspNetHostingPermission
Imports System.Web.AspNetHostingPermissionAttribute
Imports System.Web.AspNetHostingPermissionLevel

come posso fare?

UN UOMO NON MUORE PER QUALCOSA IN CUI NON CREDE

Gho5t Profilo | Junior Member

ho trovato come referenziarla..... era proprio qui sul sito:
http://www.dotnethell.it/tips/SendEmailASPNET.aspx

ora sempre per quanto riguarda l'invio della mail ho un altro problema(nn finiscono mai)
devo spedire un'allegato insieme alla mail e quindi uso questo codice dopo aver impostato i vari campi (mittente, destinatario, oggetto, corpo e SmtpServer):

Dim Allegato = New MailAttachment(directory)
email.Attachments.Add(Allegato)

Web.Mail.SmtpMail.Send(email)

quando lo mando in esecuzione mi dà il seguente errore:
"Impossibile accedere all'oggetto 'CDO.Message'."

se tolgo dim allegato e l'attachaments mi funziona....



UN UOMO NON MUORE PER QUALCOSA IN CUI NON CREDE

trinity Profilo | Guru

puoi fare anche in questo modo:

System.Web.Mail.MailMessage mailMessage = new
System.Web.Mail.MailMessage()
mailMessage.From = txtSender.Text
mailMessage.To = prova@pippo.it
mailMessage.Subject = txtSubject.Text
mailMessage.BodyFormat = System.Web.Mail.MailFormat.Text
mailMessage.Body = txtBody.Text
System.Web.Mail.SmtpMail.SmtpServer = "smtp.pippo.it"
System.Web.Mail.SmtpMail.Send(mailMessage)

Ciao

Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz

ivanuccio Profilo | Junior Member

Spett. Colleghi.

Ho in problema che non riesco a risolvere, vi chiedo l'enorme aiuto per finire il mio programmino.
Sono in combutta con un programma per creare fatture ed inviarle via email, tutto funziona, quando genero la fattura per singolo cliente ma ora devo generare un ciclo che generi tutte le fatture di fine mese verifichi tutti i clienti ed in automatico mi invii le fatture a tutti per email. potete darmi una mano per piacere ???

Vi allego il codice che mi genera uno l'anteprima e l'altro genera la fattura.

1
++++++++++++++++++anteprima+++++++++++++++++++
Private Sub TestaFatturaDataGridView_CellContentDoubleClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles TestaFatturaDataGridView.CellContentDoubleClick
Dim NrFattura As Integer
Dim DataFattura As Date
Dim Anno As String
Dim Logon As New CrystalDecisions.Shared.TableLogOnInfo

DataFattura = TestaFatturaDataGridView.SelectedRows.Item(0).Cells(1).Value
NrFattura = Int(TestaFatturaDataGridView.SelectedRows.Item(0).Cells(0).Value)
Anno = CStr(Year(DataFattura))
Logon.ConnectionInfo.DatabaseName = "xxxxxxx"
Logon.ConnectionInfo.ServerName = "xxxxxxx"
Logon.ConnectionInfo.UserID = "xxxxxxx"
Logon.ConnectionInfo.Password = "xxxxxxx"
Logon.ConnectionInfo.IntegratedSecurity = False
frmAnteprima.FatturaPDF1.Database.Tables("TestaFattura").ApplyLogOnInfo(Logon)
frmAnteprima.FatturaPDF1.Database.Tables("CorpoFattura").ApplyLogOnInfo(Logon)
frmAnteprima.FatturaPDF1.RecordSelectionFormula = "{TestaFattura.NrFattura} = " & NrFattura
frmAnteprima.ShowDialog()
frmAnteprima.Dispose()
End Sub
++++++++++++++++++generazione file in pdf+++++++++++++++++++

Private Sub btnInvioPDF_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnInvioPDF.Click
Dim NrFattura As Integer
Dim Path As String
Dim FileName As String
Dim DataFattura As Date
Dim Anno As String
Dim Mese As String
Dim ACapo As String
ACapo = Chr(13) + Chr(10)
Path = System.IO.Directory.GetCurrentDirectory + "\FATTUREPDF"
Path = "PERCORSO DOVE RECUPERA IL IL VOLANTINO"
If Not System.IO.Directory.Exists(Path) Then
System.IO.Directory.CreateDirectory(Path)
End If
NrFattura = Int(TestaFatturaDataGridView.SelectedRows.Item(0).Cells(0).Value)
DataFattura = TestaFatturaDataGridView.SelectedRows.Item(0).Cells(1).Value
Anno = CStr(Year(DataFattura))
Mese = CStr(Format(DataFattura, "MMMM"))
Path = Path + "\" + Anno + "\" + Mese
If Not System.IO.Directory.Exists(Path) Then
System.IO.Directory.CreateDirectory(Path)
End If
FileName = CStr(NrFattura) + "_" + CStr(Year(DataFattura)) + CStr(Format(Month(DataFattura), "00")) + CStr(Microsoft.VisualBasic.DateAndTime.Day(DataFattura)) + "_" + DenominazioneTextBox.Text + ".pdf"
Path = Path + "\" + FileName

Dim Logon As New CrystalDecisions.Shared.TableLogOnInfo

Logon.ConnectionInfo.DatabaseName = "XXXXXXXXXX"
Logon.ConnectionInfo.ServerName = "XXXXX"
Logon.ConnectionInfo.UserID = "XXXXX"
Logon.ConnectionInfo.Password = "XXXXX"
Logon.ConnectionInfo.IntegratedSecurity = False

frmAnteprima.FatturaPDF1.Database.Tables("TestaFattura").ApplyLogOnInfo(Logon)
frmAnteprima.FatturaPDF1.Database.Tables("CorpoFattura").ApplyLogOnInfo(Logon)

frmAnteprima.FatturaPDF1.RecordSelectionFormula = "{TestaFattura.NrFattura} = " & NrFattura
If Not System.IO.File.Exists(Path) Then
frmAnteprima.FatturaPDF1.ExportToDisk(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat, Path)
frmAnteprima.Dispose()
End If
frmMail.DestinationAddress.Text = Me.MailTextBox.Text
frmMail.DestinationName.Text = "XXXXX" + Me.DenominazioneTextBox.Text
frmMail.ListBox1.Items.Add(Path)
frmMail.Attachments1.Items.Add(Path)
frmMail.ListBox1.Items.Add("XXXXXXXXXXXXXXX")
frmMail.Body.Text = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX " + _
CStr(NrFattura) + " del " + CStr(DataFattura) + " :" + ACapo + ACapo + _
"- FATTURA - " + FileName + ACapo + ACapo + "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX." + _
ACapo + ACapo + _
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" + ACapo + ACapo
If DataFattura <= #12/31/2007# Then
frmMail.Body.Text = frmMail.Body.Text + _
"XXXXXXXXXXXXXXX"
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" + ACapo + _
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" + ACapo
Else
frmMail.Body.Text = frmMail.Body.Text + _
"XXXXXXXXXXXXXXX" + ACapo + _
"XXXXXXXXXXXXXXX"
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX." + ACapo + _
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" + ACapo
End If
frmMail.MdiParent = frmSapri
frmMail.Show()

End Sub

++++++++++++++++++fine generazione file in pdf+++++++++++++++++++

Grazie mille per il vostro tempo . PER QUANTO RIGUARDA LE XXXXX SONO SOLO TESTO DESCRITTIVO CHE CREDO NON CI INTERESSI AL FINE DELLA RIASOLUZIONE DEL PROBLEMA...

Lanello Profilo | Senior Member

se vi può tornare utile ecco la mia funzioncina per l'invio email:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

che usa semplicemente il server smtp di alice (per esempio)
----------------------------------------------------------------------
http://www.flashinlabs.biz o .com o .net o .it fate voi :P

ivanuccio Profilo | Junior Member

Grazie mille sei davvero gentile.

Ma io non mastico molto bene il vb.net ed ho creato il codice seguente preso un po la e qua su internet.
Il tuo mi fa inviare email come se fosse un ciclo "LOOP"??

Ho una tabella dove ho i miei indirizzi e li recupero tramite il la texbox ora però dovrei fare un ciclo credo io per recuperare questi indirzzi e farli partire. Ma non ci riesco proprio.. E come un blocco....
Puoi dargli uno sguardo tu ???? te ne sarei davvero grato...
PS rimango attaccato al pc per vedere la risposta..

Nella form ho un semplice tasto ed una casella che mi fa scorrere le email. ti allego il file immagine.

******************************

Imports System.Net.Mail 'importo il Namespace
Imports System.Net.Sockets
Imports System.Threading
Imports System.Text
Public Class Form2
Dim mail As MailMessage 'questa dichiarazione deve essere globale
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click


Dim destinatario As MailAddress
Try
mail = New MailMessage()
destinatario = New MailAddress(EmailTextBox.Text) '(DestinationAddress.Text)

Dim mittente As New MailAddress("xxxxx.xxxxxxxxxxxxxxx", "descrizione")

mail.From = mittente

mail.To.Add(destinatario)

mail.Body = "<html><head></head><body>CIAO</body></html>"

mail.Attachments.Add(New Attachment("C:\ciao.txt"))

Dim smtp As New SmtpClient("smtp.fastwebnet.it")

smtp.Credentials = New System.Net.NetworkCredential("xxxxxxxxxxxxxxxx", "xxxxxxxxxxx")
smtp.UseDefaultCredentials = False
AddHandler smtp.SendCompleted, AddressOf invio_completato

Dim Token As New Object
smtp.SendAsync(mail, Token)
Catch ex As SmtpException
MsgBox("Nessuna connessione ad internet attiva", MsgBoxStyle.Exclamation, "Errore")
mail.To.Clear()
mail.Attachments.Clear()
mail.Dispose()
End Try
End Sub

Private Sub invio_completato(ByVal sender As Object, _
ByVal e As System.ComponentModel.AsyncCompletedEventArgs)
Dim Token As Object = e.UserState

If e.Cancelled Then
Debug.WriteLine("Invio annullato")
End If

If e.Error IsNot Nothing Then
Debug.WriteLine("Errore: " & e.Error.ToString)

Else
Debug.WriteLine("Invio completato")
End If

mail.To.Clear()
mail.Attachments.Clear()
mail.Dispose()
End Sub

Private Sub Tab_emailBindingNavigatorSaveItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Tab_emailBindingNavigatorSaveItem.Click
Me.Validate()
Me.Tab_emailBindingSource.EndEdit()
Me.TableAdapterManager.UpdateAll(Me.DSEMail)

End Sub

Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.Tab_emailTableAdapter.Fill(Me.DSEMail.Tab_email)
End Sub
End Class

Lanello Profilo | Senior Member

no ivanuccio, la mia è soltanto una semplice funzione che ti permette un facile invio di una email passando come variabili

destinatari
oggetto
e corpo del messaggio

niente di più
----------------------------------------------------------------------
http://www.flashinlabs.biz o .com o .net o .it fate voi :P

Idea Grip Profilo | Newbie

Scusatemi, mi sono permesso di sfruttare il codice di Lanello con cui ho creato una piccola applicazione per l'invio di e-mail.

Avrei una domanda sul server smtp.

In pratica distribuisco il mio software, nel momento in cui il mio cliente decide di registrarsi per acquistarlo (dopo periodo di prova gratuito), il programma invia sul mio server i dati di registrazione per la successiva attivazione.

Simultaneamente il programma dovrebbe inviarmi una mail di avviso che questo utente si è registrato.

Imposto l'invio con mittente e destinatario la mia stessa mail, ...... uso il mio server smtp, oppure devo trovare il modo di farlo cambiare al cliente in base al proprio ISP?

Da me funziona il mio server ftp (aruba) su alice, ma non so per altri.

Grazie

Ho provato con chiavetta della 3 ma non funziona, come smtp ho dovuto inserire smtp.tre.biz

Come posso evitare questo problema?

Lanello Profilo | Senior Member

questa è tutta colpa della guerra tra provider... basta che utilizzi un indirizzo email tipo gmail che non è associato a nessun operatore telefonico/provider di servizi internet che blocca i diretti concorrenti.

se usi quell'account per inviare non avrai problemi.

ps: io uso alice che funziona dappertutto.
----------------------------------------------------------------------
http://www.flashinlabs.biz o .com o .it fate voi :P

Mau67 Profilo | Expert

Scusa Lanello la tua funziona interessa anche me ma in questi punti dovrei far inserire in automatico dal programma le credenziali

Dim c As New System.Net.NetworkCredential("mia_casella_alice@alice.it", "miapassword")
x.Host = "out.alice.it"
x.Send("indirizzo@mittente.it", destinatario, oggetto, testo)

perchè il programma che ho distribuito deve inviarmi una e-mail a me per comunicare al cliente il codice di attivazione e quindi i provider, l'indirizzo e-mail e la password sono differenti per ogni cliente.

Cope posso fare?

Ti ringrazzio
Mau67

Lanello Profilo | Senior Member

Ciao!

ci sono varie soluzioni, se hai un tuo dominio @nomedeltuosito.it puoi crearti una apposita casella di posta da utilizzare nei tuoi software come credenziali di uscita, questo funzionerà in tutte le adsl i cui provider non bloccano le comunicazioni smtp con gli altri server.

se vuoi evitare questo problema, sempre sul tuo dominio, puoi creare un piccolo webservice (funzione remota) da eseguire dai tuoi softwares, in questo caso mi raccomando di usare SSL e un sistema di autenticazione nella funzione.

;)
----------------------------------------------------------------------
IT Specialist: http://www.flashinlabs.biz
Apple Specialist: http://www.riparazione-iphone.it

giulioz Profilo | Newbie

non so se sto dicendo una scemenza ma io per inviare mail (ma in c#) ho sempre usato SYSTEM.NET.MAIL e non SYSTEM.WEB
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5