|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Feb 2003
Messaggi: 2817
|
[VB.NET] Invio email: tanti utenti
Ho questo problema.
Devo inviare una email con un allegato a più utenti di una lista (1000-2000-4000 utenti) e non so come devo fare, mi spiego meglio. Se creo l'email con un allegato ad esempio da 2Mb e poi lo spedisco a tutto la lista, il server SMTP di uscita logicamente mi ferma l'invio perchè sono troppi i destinatari. Se creo l'email con un allegato ad esempio da 2Mb e poi lo spedisco ad uno ad uno della lista, mi serve una marea di tempo. Esempio: Se invio questo allegato da 2Mb a 2000 utenti mi trovo un traffico di 4Gb in uscita, con un problema molto grave: mentre invio queste 2000 email non posso più utilizzare il programma fino alla fine di questa funzione Avevo pensato ad una soluzione mista: suddiviso la lista con blocchi da 10-15 utenti, cosi tutti i server SMTP accettano l'invio, poi replico la stessa email con il famoso allegato fino alla fine dei gruppi. Il tutto deve essere gestito con un MultiThread. Cosi facendo piano piano invia tutti gli allegato però nello stesso tempo posso continuare ad utilizzare il programma. Voi cosa mi consigliate? Come posso risolvere questo problema?
__________________
AMD 3700x --- ASUS X570 CROSSHEAR VIII HERO --- 4x 8GB Corsair Vengeance RGB PRO 3600 MHz --- SSD: Samsung 980Pro 1TBb --- EVGA RTX 2070 SUPER |
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Quote:
1. Invii tutto il blocco di mail, una alla volta su un thread separato, e lasci libera l'applicazione. 2. Usi il sistema dei sotto-blocchi ( sempre multithread ) e dovresti andare più veloce. A te testare nella realtà quale vada meglio... |
|
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Feb 2003
Messaggi: 2817
|
ok
Quote:
Ora c'è solo un problema....come faccio a fare un multithread???? Hai qualche esempio da indicarmi?
__________________
AMD 3700x --- ASUS X570 CROSSHEAR VIII HERO --- 4x 8GB Corsair Vengeance RGB PRO 3600 MHz --- SSD: Samsung 980Pro 1TBb --- EVGA RTX 2070 SUPER |
|
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Quote:
L'essenziale è avere una classe ( ClasseThread ) con un metodo che "fa qualcosa" ( MetodoThread() ). Nel tuo caso questa classe avrà le varie proprietà necessarie ( ad es. un array con tutti gli indirizzi mail, il percorso dell'allegato ecc... ) e ovviamente il metodo Invia()... 1. La mia ClasseThread : Codice:
Public Class ClasseThread
Private m_valore As Integer
Public Property valore() As Integer
Get
Return m_valore
End Get
Set(ByVal value As Integer)
m_valore = value
End Set
End Property
Public Sub New(ByVal valoreDefault As Integer)
m_valore = valoreDefault
End Sub
Public Sub MetodoThread()
Dim FT As New FormThread
FT.Show()
FT.ProgressBar1.Minimum = 0
FT.ProgressBar1.Value = FT.ProgressBar1.Minimum
FT.ProgressBar1.Maximum = m_valore
For i As Integer = 0 To m_valore
System.Threading.Thread.Sleep(10)
FT.ProgressBar1.Value = i
Next
MsgBox("Thread Terminato")
End Sub
End Class
3. Creo un un nuovo thread : Codice:
Dim CT As New ClasseThread(100)
Dim T As New Threading.Thread(AddressOf CT.MetodoThread)
T.Start()
|
|
|
|
|
|
|
#5 |
|
Junior Member
Iscritto dal: Jun 2009
Messaggi: 1
|
Generazione di email con allegato la fattura per N clienti come faccio ?????
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 = "\\x205\FATTUREPDF" 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 ' ************************** P R O V A *************************** Dim Logon As New CrystalDecisions.Shared.TableLogOnInfo Logon.ConnectionInfo.DatabaseName = "StacxSQL" Logon.ConnectionInfo.ServerName = "X205" Logon.ConnectionInfo.UserID = "sapri" Logon.ConnectionInfo.Password = "sapri" Logon.ConnectionInfo.IntegratedSecurity = False frmAnteprima.FatturaPDF1.Database.Tables("TestaFattura").ApplyLogOnInfo(Logon) frmAnteprima.FatturaPDF1.Database.Tables("CorpoFattura").ApplyLogOnInfo(Logon) ' ************************** P R O V A *************************** 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 = "Amministrazione " + Me.DenominazioneTextBox.Text ' frmMail.ListBox1.Items.Add(Path) frmMail.Attachments1.Items.Add(Path) 'frmMail.ListBox1.Items.Add("C:\spoolPDF\Volantino.pdf") frmMail.Body.Text = "Con la presente Vi inviamo in allegato il seguente file, in formato pdf, della Fattura N. " + _ CStr(NrFattura) + " del " + CStr(DataFattura) + " :" + ACapo + ACapo + _ "- FATTURA - " + FileName + ACapo + ACapo + "Per vedere il contenuto del file allegato cliccare sulla graffetta e quindi scegliere l'opzione desiderata." + _ ACapo + ACapo + _ "Riportiamo, altresì, di seguito le coordinate bancarie utili per il pagamento della fattura allegata: " + ACapo + ACapo 'Fattura Diana If DataFattura <= #12/31/2007# Then frmMail.Body.Text = frmMail.Body.Text + _ "coordinate bancarie" "Per la visualizzazione dei file pdf e' necessario il programma Acrobat Reader." + ACapo + _ "Per scaricare, cliccare qui: http://www.adobe.it/products/acrobat/readstep2_allversions.html" + ACapo Else frmMail.Body.Text = frmMail.Body.Text + _ "Banco di Napoli S.P.A." + ACapo + _ "coordinate bancarie" "Per la visualizzazione dei file pdf e' necessario il programma Acrobat Reader." + ACapo + _ "Per scaricare, cliccare qui: http://www.adobe.it/products/acrobat/readstep2_allversions.html" + ACapo End If frmMail.MdiParent = frmSapri frmMail.Show() End Sub ++++++++++++++++++fine generazione file in pdf+++++++++++++++++++ Grazie mille per il vostro tempo |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 15:48.



















