Un mio programma Visual Basic.NET: FASTMail

In questi giorni ho ripreso sottomano un programmino che avevo lasciato in sospeso da qualche tempo. Gli ho dato un nome un casino professionale, FASTMail, che sta per Find Address and Send The eMail messages. Il nome dice già abbastanza in modo chiaro quello che fa. Prende in input un file di testo e cerca tutti gli indirizzi email presenti in essi permettendo all’utente di inviare ad essi un messaggio di posta. Funziona sia con file di testo normali, composti magari da un semplice elenco di indirizzi email, che con file di testo che costituiscono pagine web. Nel primo caso si può usare se si ha la necessità di mandare sovente email allo stesso gruppo di indirizzi: li si salva su un file e via. Una sorta di mailing list. Nel caso di pagine web se si ha la necessità di recuperare una serie di indirizzi può far risparmiare del tempo. O magari si può fare dello spamming sugli indirizzi recuperati dalle varie pagine!
Permette ovviamente di salvare su un file di testo la lista degli indirizzi trovati. Si ha la possibilità di spedire degli allegati, il cui elenco compare in una specifica ListBox, si possono aggiungere manualmente degli indirizzi a quelli della lista dei “trovati” e si può impostare la priorità del messaggio che può essere sia in formato solo testo che in formato html.
Programmino semplice, ma che può anche risultare utile. Spero.

Ecco un’immagine della sua interfaccia utente.
Screen_FASTMail

Il sorgente è disponibile qui:

This entry was posted in $1$s. Bookmark the permalink.

22 thoughts on “Un mio programma Visual Basic.NET: FASTMail

  1. Si potrebbe fare una cosa simile,semplicemente indicando che per esempio l’intervallo di celle A2:A45 contiene i dati da riscontrare nel database access,e che poi questa macro li riporti in ogni cella adiacente (es valore A2–>descriz.B2)
    ho fatto un piccolo script,ma è solo un do until,e nn posso selezionare un intervallo di celle da cui prendere i dati,ma dirgli solo da dove partire,e alla prima cella vuota si blocca..mi servirebbe una dritta..:D

  2. ciao, probabilmente hai commentato il post sbagliato, ti riferivi a quello sull’esportazione dei dati su un foglio Excel, ma fa niente.
    In realtà non ho capito bene cosa intendi con le prime 3 righe, e quindi, quale operazione vorresti cercare di “automatizzare”. Così al volo, mi viene da pensare che ci sia da introdurre l’uso dei Range, ma ripeto, non son sicuro di aver inquadrato il problema. Se riesci a spiegarmi bene son disponibilissimo a collaborare ed a aiutarti, se sarò in grado.

  3. SMTP (e non SMPT) è il server di posta in uscita che usi per inviare le mail. Per farti un esempio, per l’ADSL di Alice il server SMTP (Simple Mail Transfer Protocol) è out.alice.it
    Per usare il mio programmino devi semplicemente mettere nell’apposito campo il nome del “tuo” server SMTP.

  4. Intanto grazie x l’attenzione!!
    Si ho commentato questo,ma in realtà avrei dovuto commentare “esportazione dei dati su un foglio Excel”..sorry
    Si esatto,vorrei introdurre i Range anziché utilizzare un loop.Le mie poche righe in VB sono queste:

    Sub TrovaCodice()

    Dim cnDB As ADODB.Connection
    Dim rsTabella As ADODB.Recordset
    Dim PathDB As String
    Dim SQLSource As String
    Dim ActRow As Integer

    ActRow = 6
    PathDB = “\\Gamma02\gammaweb\magazzino\dbase\COMPONENTS.mdb”

    Set cnDB = New ADODB.Connection
    cnDB.CursorLocation = adUseClient
    cnDB.Open “Provider=Microsoft.Jet.OLEDB.4.0;Data Source=” & PathDB

    SQLSource = “SELECT revname, revdes FROM DBAGAMMA_VTMM_COMPONENT”

    Set rsTabella = New ADODB.Recordset
    rsTabella.Open SQLSource, cnDB, adOpenDynamic, adLockOptimistic, adCmdText

    Do Until ActiveSheet.Cells(ActRow, 1).Value = “”

    rsTabella.Filter = “revname = ‘” & ActiveSheet.Cells(ActRow, 1).Value & “‘”

    If rsTabella.RecordCount > 0 Then
    ActiveSheet.Cells(ActRow, 2).Value = rsTabella.Fields(“revdes”).Value
    Else
    ActiveSheet.Cells(ActRow, 2).Value = “NESSUN ARTICOLO!”
    End If

    ActRow = ActRow + 1

    Loop

    rsTabella.Close
    cnDB.Close

    Set rsTabella = Nothing
    Set cnDB = Nothing

    End Sub

    Come vedi è poco flessibile come codice..mi servirebbe una mano,dato che sono una schiappa in Vb…:D

  5. Allora, dovremmo aver inquadrato il problema. Tu hai sulla colonna 1 del tuo foglio excel un elenco di nomi dei prodotti che devi confrontare con quelli memorizzati nel database ed estrarne quindi la descrizione. Giusto?
    Bè, il tuo codice non mi sembra poi così poco flessibile. L’idea del loop fino alla prima cella vuota è buona, quando si deve ciclare su una sequenza di dati di cui non si conosce la dimensione bisogna trovare la giusta condizione su cui farlo e mi sembra tu l’abbia trovata. Perché se per qualsiasi motivo viene aggiunta qualche riga quella é la condizione che ti permette ancora di scorrere nel modo giusto tutti gli elementi. Per generalizzare la funzione e renderla facilmente riutilizzabile magari quel valore di ‘ActRow’ potresti passarglielo come parametro, e volendo anche il numero della colonna in cui si trovano i valori da confrontare con quelli nel database invece che dar per scontato che sia la prima.
    Queste erano le prime considerazioni veloci. Ma torniamo ai range. Per fare una cosa simile specificando però il range di celle che ti interessano, come mi chiedevi già nel primo commento, puoi fare qualcosa del genere:

    Set Cella = appExcel.Cells  'appExcel sarà il tuo oggetto Excel.Application

    poi ti servirà comunque un ciclo che avrà questa struttura:

    For Each Cella In foglioExcel.Range("A2", "A45")
    	.	.	.
    	.	.	.
    Next Cella

    all’interno del ciclo poi il controlo sarà come quello che già usi, con forse qualche problemino in più sul come dirgli che la descrizione te la deve mettere di fianco. Io al range ho dato dei valori a caso (gli stessi che avevi postato tu nel commento sopra) ma , ovviamente anche qui la cosa diventa interessante se i valori di inizio e fine del range vengono presi come parametri dalla funzione in modo da renderla il più generale possibile.

    Purtroppo non ho avuto moltissimo tempo, ma spero che questo primo tentativo di aiuto sia indirizzato sulla via giusta.

  6. Quindi tu consiglieresti di impostare actrow come parametro e nn come integer?
    Pensi sia + sbrigativo?Calcola che ogni modifica che faccio ci impiego molto tempo,e se mi dici che faccio + alla svelta..:D
    Grazie x l’interessamento eh!

  7. No aspetta. La frase “impostare actrow come parametro e nn come integer” non ha granché senso. I 2 concetti son ben distinti e non sono in mutua esclusione. Actrow é un integer e tale rimane anche se viene passato come parametro. Integer é il “tipo” di ActRow. Quello che dicevo io é di passarlo come parametro di input alla funzione, invece che assegnargli un valore fisso all’interno di essa. Questo proprio per la questione della flessibilità, nel senso che se la dovessi usare con più valori di actirow, magari a seconda del foglio in cui ti trovi, ti basta chiamare la funzione dandogli il giusto valore della cella da cui partire come parametro, mentre definendo actirow al suo interno dovresti fare 2 funzioni uguali (con nomi diversi) con i valori di actirow inizializzati a 2 valori diversi. Se invece hai la perfetta certezza che ogni volta che userai tale funzione actirow sarà sempre e comunque 6 allora questo discorso diventa anche superfluo. Però in questo caso non vedo perché il tuo codice peccherebbe di poca flessibilità. Lo stesso discorso vale nel caso decidessi di usare i range, le celle che lo delimitano andrebbero passate come parametri, in modo da definire una funzione generale che vada bene per ogni range.

    Spero di essere riuscito a spiegare cosa intendo.

  8. grazie x le risp,adesso proverò a mettere quanto detto in pratica..ma nn pensare di liberarti di me…:D
    Grazie mille!

  9. sono sempre io, ho visto che il blog non ?® molto usato.. caso mai se rispondi o se hai un altro blog dove postare.. mi manderesti una email per favore?

  10. Ciao Dede, complimenti.
    Vorrei esporti una mia esigenza quasi quotidiana per vedere se hai un qualcosa che fa per me oppure per suggerirti di farla, se hai voglia e tempo.
    Obiettivo: inviare tante emails (sempre le stesse) anziché ad un gruppo/lista di distribuzione, ad ogni indirizzo singolo (ho notato che se metto degli indirizzi in CCN poi molti antispam mi fermano l’email, mentre se l’email è “personale” in A: anziché CC: o ccn: allora non me la spammano). Molto spesso ho dei file excel o word dove un po qua un po la ci sono tanti indirizzi email. Ci vorrebbe (se non c’è già) un programmino che “legga” uno ad uno tutti gli indirizzi contenuti in varie parti in un dato file e poi spedisca ad uno per volta la stessa email precedentemente scritta.
    E tu, come la vedi?
    grazie e complimenti
    nicola

  11. Ciao.
    Il programma che ho fatto fa esattamente quello che dici. Non so se hai scaricato il sorgente e dato un’occhiata al codice, comunque, il programma manda una mail singolarmente ad ogni indirizzo trovato. Non fa l’invio di una sola mail a più destinatari, ne tantomeno usa cc o ccn.
    Funziona con normali file di testo o pagine internet. Quindi se gli indirizzi a cui devi mandare le mail son sempre gli stessi ti puoi creare diversi file in cui dividi in destinatari in sorte di gruppi (che ne so amici.txt, lavoro.txt, ecc) e passi quello che ti serve in quel momento al mio programma.
    Per quanto riguarda Excel la cosa è realizzabile purché si possa sapere più o meno dove si trovano gli indirizzi; se ad esempio occupano sempre le stesse celle si può fare abbastanza facilmente (anche se sarebbe comunque un’applicazione ad-hoc). Se invece sono messi completamente a caso, la ricerca può complicarsi..

  12. ho visto il programmino fastmail che reputo molto interessante ma ad ogni smtp che mette mi segnala l’errore smtp non trovato o non valido…
    E’ corretto… out.alice.it come in tutti gli account che ho presenti in microsoftoutlook…..
    mi chiedo…. ma da quale indirizzo email partirà non serve indicare “chi” è il mittente?
    NB ho provato anche con altri smtp con il medesimo risultato. Ho disabilitato per ogni eventualità antivirus (nod32) e firewall (sygate)… boh… se hai qualche idea…

    Grazie ciao

  13. ho una richiesta…..
    ho intenzione di reperire dati in lettura da un documento excel in visual studio: bisogna semplicemente aprire e leggere da excel.
    mi puoi aiutare??

    grazie mille.
    ciao! :)

  14. nolvia80, temo che anche tu abbia commentato il post sbagliato, ma vabbè..
    Comunque, mi spiace ma in questo periodo non ho assolutamente tempo.
    La cosa che devi fare non è per niente difficile e sono convinto che seguendo il post dove spiego come esportare su Excel (operazione inversa a quella che ti serve) ci si arriva facilmente; basta che invece di andare a scrivere le celle ne fai la lettura e poi dipende da dove devi mettere questi valori.

  15. Ciao, grazie per i complimenti. Sono felice che finalmente qualcuno abbia trovato davvero utile il mio programmino e al quale esso abbia semplificato l’esecuzione di normali attivit?†.
    Anche se “di solito ci mettevo 3 ore di fatica ora mando 499 mail in 4 ore senza fare altro che impostare le liste target!!!”. Ci metti un’ora in pi??!?! Forse c’?® qualcosa che non va :D
    Se selezioni il formato HTML e inserisci i tag html che ti servono nel testo, la mail verr?† inviata (e ricevuta) con la formattazione specificata. Mi ricordo che ai tempi avevo fatto delle prove e funzionava tutto.
    Per quanto riguarda la prosecuzione del progetto ci avevo lavorato, stavo terminando una barra di pulsanti per l’inserimento proprio dei tag html, ma poi per mancanza di tempo/voglia avevo abbandonato. Magari ci torner?? sopra, perch?® anche a me ?® sempre sembrata una cosa dai possibili interessanti sviluppi. Peccato che ora, tra universit?† e lavoro, ho meno tempo di allora.

  16. Ciao, intanto complimenti per il programma…SEI GRANDE! E’ veramente funzionale e risolve i problemi di quanti come me inviano mail one-to-one su richiesta dell’azienda…mica glielo dico come ho fatto…di solito ci mettevo 3 ore di fatica ora mando 499 mail in 4 ore senza fare altro che impostare le liste target!!!
    Mi chiedo…come si fa a mandare mail con contenuti grafici? Magari fatte in pubblisher e salvate in html…c’è l’opzione html ma nonostante numerose prove non sono riuscito a inviare nulla…
    A proposito..secondo me dovresti lavorarci su e raffinarlo…con un editor di testo completo dei normali comandi (grassetto, corsivo, ecc.) sarebbe già OTTIMO!!!

  17. Complimenti per il sito e per tutto il lavoro fatto.
    A fronte di un mare di tempo risparmiato a noi dobbiamo contrapporre tutto il tempo che hai impiegato tu nel farlo. E per questo non basterebbero mille mail-grazie.
    Nel frattempo vorrei chiederti se per caso hai già sviluppato, o possibilità di farlo, o voglia di perdere tempo con una cernia come me, una funzione che permetta di inviare allegati diversi per ogni contatto mail.
    Cerco di spiegarmi meglio.
    Ho un elenco di contatti e ad ognuno devo mandare una mail con un allegato personalizzato.
    Grazie mille

  18. Ciao, non mi piace ripetere sempre l’inizio di ogni commento, ma non posso fare a meno di ringraziare per le belle parole.
    Alla funzione che hai illustrato sinceramente non avevo mai pensato, e, come dicevo già nei commenti precedenti, ora non ho proprio tempo di mettermici, ma devo dire che potrebbe essere interessante.
    Certo che se continuate con commenti di questo genere temo che riuscirete a breve a convincermi a riprendere seriamente in mano la cosa, nonostante abbia già un sacco di cose da fare (e di esami da dare). :-)
    Per adesso, mi limito a ringraziare per l’ennesima volta.

Leave a Reply to Nicola Cancel reply

Your email address will not be published. Required fields are marked *