Quindi, come non esimersi da creare delle procedure per l'invio di posta certificata.
In questo post ci soffermiamo sull'uso della posta certificata offerta da Aruba, ma i metodi qui descritti sono validi anche per altri provider di posta elettronica.
Prima di iniziare lo sviluppo controlliamo quello che ci viene detto da aruba per la configurazione di un client (alla fine ci serviranno proprio quei parametri per configurare il nostro client): http://assistenzaold.aruba.it/kb/idx/51/981/article/Parametri-per-la-configurazione-delle-caselle-PEC-sul-Client-di-Posta.html
Dato che vogliamo inviare la posta, i parametri che ci interessano sono quelli della posta in uscita, e quindi smtp. Andando a leggere la guida già ci accorgiamo di due cose, l'uso di una connessione autenticata SSL (Secure Socket Layer) impostata in maniera implicita (e cioè la connessione deve essere già in modalità SSL e quindi non impostata da un comando AUTH TLS). E qui cominciano già i primi problemi, infatti la classe System.Net.Mail supporta solo l'SSL impostato in modo esplicito. Di conseguenza una sequenza di comandi del genere:
Connect port 25 -> Start TLS -> Send
non viene recepita da un server che si attende già una connessione autenticata.
Ma attenzione, non disperate, in quanto il framework nasconde un segreto o più precisamente ha introdotto un segreto, infatti il vecchio namespace System.Web.Mail che dal complatore viene marcato come deprecato con messaggi di sfida ad usarlo, può operare in maniera SSL implicita. Tutto questo, ovviamente, non senza qualche difficoltà...
System.Web.Mail.MailMessage newMail = new System.Web.Mail.MailMessage();
newMail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpserver", "smtps.pec.aruba.it");
newMail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpserverport", "465");
newMail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusing", "2");
newMail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", "1");
newMail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername", "miamail@pec.it");
newMail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", "password");
newMail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpusessl", "true");
newMail.From = "miamail@pec.it";
newMail.To = "[dest]";
newMail.Subject = "[object]";
newMail.BodyFormat = System.Web.Mail.MailFormat.Text;
newMail.Body = "[body]";
newMail.Priority = System.Web.Mail.MailPriority.High;
System.Web.Mail.SmtpMail.SmtpServer = "smtps.pec.aruba.it:465";
System.Web.Mail.SmtpMail.Send(newMail);
il parametro sendusing permette di impostare il meccanismo di invio (in questo caso utilizzando la rete (SMTP over the network)).