Differenze tra le versioni di "Invio della posta elettronica"

Da Gambas-it.org - Wikipedia.
 
(36 versioni intermedie di uno stesso utente non sono mostrate)
Riga 1: Riga 1:
Per inviare la posta elettronica con Gambas possiamo utilizzare ''almeno'' quattro modalità.
+
Per inviare la posta elettronica con Gambas possiamo utilizzare varie modalità.
  
  
==Uso del metodo "''.SendMail''" della classe ''Desktop''==
+
==Uso del Metodo ".SendMail()" della classe ''Desktop''==
Per poter utilizzare il metodo "''.SendMail''" della classe ''Desktop'', si dovrà impostare nel progetto anche il componente <FONT color=#B22222>''gb.desktop''</font>:
+
Per poter utilizzare il Metodo ".SendMail()" della classe ''Desktop'', si dovrà impostare nel progetto anche il componente <FONT color=#B22222>''gb.desktop''</font>:
  '''Public''' Sub Button1_Click()
+
  Public Sub Button1_Click()
 
   
 
   
   Desktop.SendMail(["lista_degli_indirizzi_email_dei_destinatari"], ["lista_dei_destinatari_CC"], ["lista_dei_destinatari_BCC"], "oggetto_dell'email", "corpo_dell'email", "percorso_del_file_che_sarà_allegato")
+
   Desktop.SendMail(["<FONT Color=gray>''lista_degli_indirizzi_email_dei_destinatari''</font>"], ["<FONT Color=gray>''lista_dei_destinatari_CC''</font>"], ["<FONT Color=gray>''lista_dei_destinatari_BCC''</font>"], "<FONT Color=gray>''oggetto_dell'email''</font>", "<FONT Color=gray>''corpo_dell'email''</font>", "<FONT Color=gray>''percorso_del_file_che_sarà_allegato''</font>")
 
   
 
   
  '''End'''
+
  End
 
Se la lista ''CC'' e/o la lista ''BCC'' non è presente, allora si porrà uno spazio vuoto: [" "],... .
 
Se la lista ''CC'' e/o la lista ''BCC'' non è presente, allora si porrà uno spazio vuoto: [" "],... .
 +
 +
Se non deve essere allegato alcun file, allora si ometterà il corrispondente parametro di riferimento.
 +
 +
Il Metodo "Desktop.SendMail()" è solo un'interfaccia per il portale desktop o gli script XDG: il corpo del messaggio deve essere un testo semplice e l'argomento dell'allegato non funziona con il portale desktop al momento.
  
 
In questo caso il browser avvierà il programma per la gestione della posta elettronica.
 
In questo caso il browser avvierà il programma per la gestione della posta elettronica.
  
 +
 +
==Uso della Classe "''SmtpClient'' "==
 +
Per utilizzare la classe "''SmtpClient'' ", si dovrà impostare nel progetto anche il Componente <FONT color=#B22222>''gb.net.smtp''</font>:
 +
Public Sub Button1_Click()
 +
 +
  Dim SMTP As New SmtpClient
 +
  Dim file_allegato AS String
 +
   
 +
  file_allegato = File.Load("<FONT Color=gray>''/percorso/dell'eventuale/file/da/allegare''</font>")
 +
 +
  With SMTP
 +
    .Host = "<FONT Color=darkorange>''nome_Host''</font>"
 +
    .Port = <FONT Color=darkorange>''Porta_Host''</font>
 +
    .User = "<FONT Color=darkorange>''nome_utente''</font>"
 +
    .Password = "<FONT Color=darkorange>''password''</font>"
 +
    .Debug = True
 +
    .From = "<FONT Color=darkorange>''indirizzo_email_di_chi_invia_la posta''</font>"
 +
    .To.Add("<FONT Color=darkorange>''indirizzo_email_del_destinatario''</font>")
 +
    .Subject = "<FONT Color=darkorange>''testo_dell'Oggetto_della_email''</font>"
 +
    .Encrypt = Net.SSL
 +
    .Add("<FONT Color=darkorange>''testo_del_corpo_dell'email - ossia_il_messaggio''</font>")
 +
    If IsNull(file_allegato) = False Then .Add(file_allegato)
 +
    .Send()
 +
  End With
 +
 +
End
 +
Laddove in particolare:
 +
<BR>- la Proprietà ''.Host'' si riferisce al ''Server'' di posta elettronica presso il quale il mittente possiede la registrazione di casella postale elettronica. Solitamente inizia con smtp.server.xx
 +
<BR>- la Proprietà ''.Port'' si riferisce alla porta in ''uscita'' del predetto ''Server'';
 +
<BR>- la Proprietà ''.User'' si riferisce all'indirizzo della casella di posta elettronica di chi ''invia'' il messaggio di posta elettronica;
 +
<BR>- la Proprietà ''.Password'' si riferisce alla parola d'ordine utilizzata dall'utente per accedere al servizio di posta elettronica presso il proprio ''Server''.
  
  
==Uso della Classe "''SmtpClient''"==
+
Mostriamo di seguito un semplice esempio più pratico.
Per utilizzare la classe "''SmtpClient''" |[[#Note|1]]| , si dovrà impostare nel progetto anche il componente <FONT color=#B22222>''gb.net.smtp''</font>:
+
<BR>Poniamo dunque il caso di avere un account presso ''server'' di posta elettronica ''tiscali.it'' . In tal caso sappiamo che il parametro ''in uscita'' relativo al ''Server host'' principale di ''Tiscali'' è:  ''smtp.tiscali.it'' .
'''Public''' Sub Button1_Click()
+
<BR>Sappiamo anche che il numero della porta per la posta ''in uscita'' è attualmente: 465.
 +
<BR>Poniamo il caso che il nome scelto dall'utente mittente, identificativo della propria casella di posta elettronica, sia: ''nome_utente@tiscali.it'', e che la sua password per accedere a tale casella postale sia: ''miapassword''.
 +
<BR>Poniamo infine il caso che la casella di posta elettronica del destinatario del messaggio sia: ''esempio_destinatario@yahoo.it'' .
 +
 
 +
Il codice Gambas sarà dunque il seguente:
 +
Public Sub Button1_Click()
 
   
 
   
  Dim SMPT As New SmtpClient  
+
  Dim SMTP As New SmtpClient  
  Dim $fl AS String
+
  Dim file_allegato AS String
 
      
 
      
    $fl = File.Load("percorso_del_file_da_allegare")
+
  file_allegato = File.Load("<FONT Color=gray>''/percorso/dell'eventuale/file/da/allegare''</font>")
 
   
 
   
 
   With SMTP
 
   With SMTP
     .Host = nome_Host
+
     .Host = "<FONT Color=#B22222>smtp.tiscali.it</font>"
     .Port = Porta_Host
+
     .Port = <FONT Color=#B22222>465</font>
     .From = indirizzo_email_di_chi_invia_la posta
+
    .User = "<FONT Color=#B22222>nome_utente</font>"  <FONT Color=gray>' ''ma va bene anche: nome_utente@tiscali.it''</font>
     .To.Add(indirizzo_email_del_destinatario)
+
    .Password = "<FONT Color=#B22222>miapassword</font>"
     .Subject = "testo_dell'Oggetto_della_email"
+
    .Debug = True
     .Add(testo_del_corpo_dell'email - il_messaggio)
+
     .From = "<FONT Color=#B22222>nome_utente@tiscali.it</font>"
     .Add($fl)
+
     .To.Add("<FONT Color=#B22222>esempio_destinatario@yahoo.it</font>")
 +
     .Subject = "''testo_dell'Oggetto_della_email''"
 +
    .Encrypt = Net.SSL
 +
     .Add("''testo_del_corpo_dell'email - ossia_il_messaggio''")
 +
     If IsNull(file_allegato) = False Then .Add(file_allegato)
 
     .Send()
 
     .Send()
 
   End With
 
   End With
 
   
 
   
  '''End'''
+
  End
 +
L'invio di posta elettronica con la Classe ''SmtpClient'' funziona anche in un'applicazione ''a riga di comando''.
  
 +
====Invio a più destinatari contemporaneamente====
 +
Per inviare contemporaneamente la email a più destinatari, scrivendo il loro indirizzo di posta elettronica nel medesimo ''campo'' dei destinatari, si utilizzerà il Metodo ".Insert()" delle Proprietà disponibili: ".To.", ".Cc", ".Bcc".
 +
<BR>L'argomento del predetto Metodo "''.Insert( )''" sarà un vettore di tipo ''Strng[ ]'' contenente gli indirizzi di posta elettronica dei destinatari, ai quali inviare la medesima email.
  
  
 
==Uso del comando specifico html==
 
==Uso del comando specifico html==
 
Con alcuni oggetti che supportano il codice ''html'' si potrà utilizzare lo specifico comando ''A HREF + mailto'':
 
Con alcuni oggetti che supportano il codice ''html'' si potrà utilizzare lo specifico comando ''A HREF + mailto'':
  '''Public''' Sub Button1_Click()
+
  Public Sub Button1_Click()
 
   
 
   
  <FONT color=#006400>' ''qui, come esempio, utilizzeremo l'oggetto "Message":''</font>
+
  <FONT color=#006400>' ''Qui, come esempio, utilizzeremo l'oggetto "Message":''</font>
   Message.Info("<A HREF=\"&#0109;ailto:''indirizzo_email_del_destinatario''\">Un testo qualsiasi</a>")
+
   Message.Info("<A HREF=\"&#0109;ailto:<FONT Color=gray>''indirizzo_email_del_destinatario''</font>\">Un testo qualsiasi</a>")
 
   
 
   
  '''End'''
+
  End
 
 
 
In questo caso il browser avvierà il programma per la gestione della posta elettronica.
 
In questo caso il browser avvierà il programma per la gestione della posta elettronica.
 
  
  
 
==Uso di ''Thunderbird'', ''Evolution'' e ''KMail''==
 
==Uso di ''Thunderbird'', ''Evolution'' e ''KMail''==
Mostreremo ora la modalità per inviare posta elettronica mediante "''Thunderbird''", "''Evolution''" e "''KMail''" con l'uso del comando ''Shell'': |[[#Note|2]]|
+
Mostreremo ora la modalità per inviare posta elettronica mediante "''Thunderbird'' ", "''Evolution'' " e "''KMail'' " con l'uso del comando ''Shell'': <SUP>&#091;[[#Note|Nota 1]]&#093;</sup>
  '''Public''' Sub Button1_Click()
+
  Public Sub Button1_Click()
 
   
 
   
  postaElettronica("indirizzo_destinatario", "Oggetto_dell'email", "Corpo_dell'email", "invio_file_allegato")
+
  postaElettronica("<FONT Color=gray>''client_di_posta''</font>", "<FONT Color=gray>''indirizzo_destinatario''</font>", "<FONT Color=gray>''Oggetto_dell'email''</font>", "<FONT Color=gray>''Corpo_dell'email''</font>", "<FONT Color=gray>''invio_file_allegato''</font>")
 
   
 
   
  '''End'''
+
  End
 
   
 
   
 
   
 
   
  '''Public''' Sub postaElettronica(destinatario As String, oggetto As String, corpo As String, allegato As String)
+
  Public Sub postaElettronica(client As integer, destinatario As String, oggetto As String, corpo As String, allegato As String)
 
   
 
   
 
   Dim comandomail As String   
 
   Dim comandomail As String   
 
   Dim hmail As Process
 
   Dim hmail As Process
 
    
 
    
  <FONT color=#006400>' ''Per "Thunderbird":''</font>
+
  If client = 0 Then
 +
  <FONT color=#006400>' ''****Per "THUNDERBIRD":''</font>
 
   comandomail = "thunderbird -compose to='"   
 
   comandomail = "thunderbird -compose to='"   
 
   comandomail &= destinatario   
 
   comandomail &= destinatario   
Riga 82: Riga 129:
 
   
 
   
 
  <FONT color=#006400>' ''Avvia il programma per la gestione della posta elettronica:''</font>
 
  <FONT color=#006400>' ''Avvia il programma per la gestione della posta elettronica:''</font>
     hmail = Shell (comandomail)      |[[#Note|3]]|
+
     hmail = Shell (comandomail)      |[[#Note|2]]|
 
   
 
   
 
  Else If client = 1 Then
 
  Else If client = 1 Then
  <FONT color=#006400>' ''****PER EVOLUTION:''</font>
+
  <FONT color=#006400>' ''****Per EVOLUTION:''</font>
 
   comandomail = "evolution mailto:"
 
   comandomail = "evolution mailto:"
 
   comandomail &= destinatario
 
   comandomail &= destinatario
Riga 103: Riga 150:
 
    
 
    
 
  Else If client = 2 Then
 
  Else If client = 2 Then
  <FONT color=#006400>' ''****PER KMAIL:''</font>
+
  <FONT color=#006400>' ''****Per KMAIL:''</font>
 
   comandomail = "kmail "
 
   comandomail = "kmail "
 
   If allegato = "no" Then
 
   If allegato = "no" Then
Riga 122: Riga 169:
 
  Endif
 
  Endif
 
   
 
   
  '''End'''
+
  End
 +
In questo caso il browser avvierà il programma per la gestione della posta elettronica.
  
In questo caso il browser avvierà il programma per la gestione della posta elettronica.
 
  
 +
==Uso dello script ''mailbtn.sh'' con il comando ''Shell''==
 +
In "''/etc/acpi/events'' " è possibile trovare tutti gli eventi riconosciuti. Se nella cartella "''/etc/acpi''" è presente lo script "''/etc/acpi/mailbtn.sh'' ", potrà essere utilizzato con il comando ''Shell'' per avviare il programma per la gestione della posta elettronica.:
 +
Public Sub Button1_Click()
 +
 +
  If exist("/etc/acpi/mailbtn.sh") then
 +
    Shell "echo '<FONT Color=gray>MIA_PASSWORD</font>' | sudo -S /etc/acpi/mailbtn.sh"
 +
    Message.Warning("Premere un tasto per avviare il programma di invio della posta elettronica.")
 +
  Else
 +
    Message.Warning("Non è presente nel sistema lo script\"mailbtn.sh\".")
 +
  Endif
 +
 +
End
 +
In questo caso si avvierà il programma per la gestione della posta elettronica.
  
  
  
==Note==
+
=Note=
[1] Sembra, comunque, che ancora sussistano dei problemi nell'uso di questa Classe. Infatti, poiché un server remoto richiede la password, e poiché il componente ''gb.smtp'' non pare ancora essere in grado di gestire le password per l'autenticazione (fatta eccezione per la ''Plain authentication''), vengono spesso rilevati errori nell'invio delle email . Come affermato dallo stesso Minisini: " ''It is a pending problem that does not have a good solution at the moment: the gb.net.smtp component has no support for any authentication. I can't add it, because I don't know how to do it. So I should rewrite the component to use a library that know how to authenticate, like libesmtp. But that library has no MIME attachment support, so I have to do it myself. Not something that can be done in five minutes... Unless someone knows a library that can do SMTP with authentication *with* MIME attachment management!'' "
+
[1] Il codice è tratto da un suggerimento dell'utente "''Golia''" del Forum di Gambas-it.org, al quale va un sentito ringraziamento.
  
[2] Il codice è tratto da un suggerimento dell'utente "''Golia''" del Forum di Gambas-it.org, al quale va un sentito ringraziamento.
+
[2] In sostanza la linea del comando è la seguente (senza file allegato):
  
[3] In sostanza la linea del comando è la seguente (senza file allegato): ''hmail = Shell "thunderbird -compose to='indirizzo_del_destinatario',subject='Oggetto_dell'email',body='testo_del_corpo'"''
+
''hmail = Shell "thunderbird -compose to='indirizzo_del_destinatario',subject='Oggetto_dell'email',body='testo_del_corpo'"''

Versione attuale delle 16:29, 8 giu 2024

Per inviare la posta elettronica con Gambas possiamo utilizzare varie modalità.


Uso del Metodo ".SendMail()" della classe Desktop

Per poter utilizzare il Metodo ".SendMail()" della classe Desktop, si dovrà impostare nel progetto anche il componente gb.desktop:

Public Sub Button1_Click()

 Desktop.SendMail(["lista_degli_indirizzi_email_dei_destinatari"], ["lista_dei_destinatari_CC"], ["lista_dei_destinatari_BCC"], "oggetto_dell'email", "corpo_dell'email", "percorso_del_file_che_sarà_allegato")

End

Se la lista CC e/o la lista BCC non è presente, allora si porrà uno spazio vuoto: [" "],... .

Se non deve essere allegato alcun file, allora si ometterà il corrispondente parametro di riferimento.

Il Metodo "Desktop.SendMail()" è solo un'interfaccia per il portale desktop o gli script XDG: il corpo del messaggio deve essere un testo semplice e l'argomento dell'allegato non funziona con il portale desktop al momento.

In questo caso il browser avvierà il programma per la gestione della posta elettronica.


Uso della Classe "SmtpClient "

Per utilizzare la classe "SmtpClient ", si dovrà impostare nel progetto anche il Componente gb.net.smtp:

Public Sub Button1_Click()

  Dim SMTP As New SmtpClient 
  Dim file_allegato AS String
   
  file_allegato = File.Load("/percorso/dell'eventuale/file/da/allegare")

  With SMTP
    .Host = "nome_Host"
    .Port = Porta_Host
    .User = "nome_utente"
    .Password = "password"
    .Debug = True
    .From = "indirizzo_email_di_chi_invia_la posta"
    .To.Add("indirizzo_email_del_destinatario")
    .Subject = "testo_dell'Oggetto_della_email"
    .Encrypt = Net.SSL
    .Add("testo_del_corpo_dell'email - ossia_il_messaggio")
    If IsNull(file_allegato) = False Then .Add(file_allegato)
    .Send()
  End With

End

Laddove in particolare:
- la Proprietà .Host si riferisce al Server di posta elettronica presso il quale il mittente possiede la registrazione di casella postale elettronica. Solitamente inizia con smtp.server.xx
- la Proprietà .Port si riferisce alla porta in uscita del predetto Server;
- la Proprietà .User si riferisce all'indirizzo della casella di posta elettronica di chi invia il messaggio di posta elettronica;
- la Proprietà .Password si riferisce alla parola d'ordine utilizzata dall'utente per accedere al servizio di posta elettronica presso il proprio Server.


Mostriamo di seguito un semplice esempio più pratico.
Poniamo dunque il caso di avere un account presso server di posta elettronica tiscali.it . In tal caso sappiamo che il parametro in uscita relativo al Server host principale di Tiscali è: smtp.tiscali.it .
Sappiamo anche che il numero della porta per la posta in uscita è attualmente: 465.
Poniamo il caso che il nome scelto dall'utente mittente, identificativo della propria casella di posta elettronica, sia: nome_utente@tiscali.it, e che la sua password per accedere a tale casella postale sia: miapassword.
Poniamo infine il caso che la casella di posta elettronica del destinatario del messaggio sia: esempio_destinatario@yahoo.it .

Il codice Gambas sarà dunque il seguente:

Public Sub Button1_Click()

  Dim SMTP As New SmtpClient 
  Dim file_allegato AS String
   
  file_allegato = File.Load("/percorso/dell'eventuale/file/da/allegare")

  With SMTP
    .Host = "smtp.tiscali.it"
    .Port = 465
    .User = "nome_utente"   ' ma va bene anche: nome_utente@tiscali.it
    .Password = "miapassword"
    .Debug = True
    .From = "nome_utente@tiscali.it"
    .To.Add("esempio_destinatario@yahoo.it")
    .Subject = "testo_dell'Oggetto_della_email"
    .Encrypt = Net.SSL
    .Add("testo_del_corpo_dell'email - ossia_il_messaggio")
    If IsNull(file_allegato) = False Then .Add(file_allegato)
    .Send()
  End With

End

L'invio di posta elettronica con la Classe SmtpClient funziona anche in un'applicazione a riga di comando.

Invio a più destinatari contemporaneamente

Per inviare contemporaneamente la email a più destinatari, scrivendo il loro indirizzo di posta elettronica nel medesimo campo dei destinatari, si utilizzerà il Metodo ".Insert()" delle Proprietà disponibili: ".To.", ".Cc", ".Bcc".
L'argomento del predetto Metodo ".Insert( )" sarà un vettore di tipo Strng[ ] contenente gli indirizzi di posta elettronica dei destinatari, ai quali inviare la medesima email.


Uso del comando specifico html

Con alcuni oggetti che supportano il codice html si potrà utilizzare lo specifico comando A HREF + mailto:

Public Sub Button1_Click()

' Qui, come esempio, utilizzeremo l'oggetto "Message":
  Message.Info("<A HREF=\"mailto:indirizzo_email_del_destinatario\">Un testo qualsiasi</a>")

End

In questo caso il browser avvierà il programma per la gestione della posta elettronica.


Uso di Thunderbird, Evolution e KMail

Mostreremo ora la modalità per inviare posta elettronica mediante "Thunderbird ", "Evolution " e "KMail " con l'uso del comando Shell: [Nota 1]

Public Sub Button1_Click()

 postaElettronica("client_di_posta", "indirizzo_destinatario", "Oggetto_dell'email", "Corpo_dell'email", "invio_file_allegato")

End


Public Sub postaElettronica(client As integer, destinatario As String, oggetto As String, corpo As String, allegato As String)

 Dim comandomail As String  
 Dim hmail As Process
 
 If client = 0 Then
' ****Per "THUNDERBIRD":
  comandomail = "thunderbird -compose to='"  
  comandomail &= destinatario  
  comandomail &= "',subject='"  
  comandomail &= oggetto  
  comandomail &= "',body='"  
  comandomail &= corpo

  If allegato = "no" Then  
      comandomail &= "'"  
    Else    
      comandomail &= "',attachment='"  
      comandomail &= allegato & "'"  
  Endif

' Avvia il programma per la gestione della posta elettronica:
   hmail = Shell (comandomail)       |2|

Else If client = 1 Then
' ****Per EVOLUTION:
 comandomail = "evolution mailto:"
 comandomail &= destinatario
 comandomail &= "?subject='"
 comandomail &= oggetto
 If allegato = "no" Then
 comandomail &= "'"
 Else
 comandomail &= "'\\&attach="
 comandomail &= allegato
 Endif
 comandomail &= "\\&body='"
 comandomail &= corpo
 comandomail &= "'"
' Avvia il programma per la gestione della posta elettronica:
 hmail = Shell (comandomail)
  
Else If client = 2 Then
' ****Per KMAIL:
 comandomail = "kmail "
 If allegato = "no" Then
 Else
 comandomail &= " --attach "
 comandomail &= allegato
 Endif
 comandomail &= " mailto:"
 comandomail &= destinatario
 comandomail &= "?subject='"
 comandomail &= oggetto
 comandomail &= "'"
 comandomail &= "\\&body='"
 comandomail &= corpo
 comandomail &= "'"
' Avvia il programma per la gestione della posta elettronica:
 hmail = Shell (comandomail)   
Endif

End

In questo caso il browser avvierà il programma per la gestione della posta elettronica.


Uso dello script mailbtn.sh con il comando Shell

In "/etc/acpi/events " è possibile trovare tutti gli eventi riconosciuti. Se nella cartella "/etc/acpi" è presente lo script "/etc/acpi/mailbtn.sh ", potrà essere utilizzato con il comando Shell per avviare il programma per la gestione della posta elettronica.:

Public Sub Button1_Click()

 If exist("/etc/acpi/mailbtn.sh") then
    Shell "echo 'MIA_PASSWORD' | sudo -S /etc/acpi/mailbtn.sh"
    Message.Warning("Premere un tasto per avviare il programma di invio della posta elettronica.")
 Else
    Message.Warning("Non è presente nel sistema lo script\"mailbtn.sh\".")
 Endif

End

In questo caso si avvierà il programma per la gestione della posta elettronica.


Note

[1] Il codice è tratto da un suggerimento dell'utente "Golia" del Forum di Gambas-it.org, al quale va un sentito ringraziamento.

[2] In sostanza la linea del comando è la seguente (senza file allegato):

hmail = Shell "thunderbird -compose to='indirizzo_del_destinatario',subject='Oggetto_dell'email',body='testo_del_corpo'"