Invio fatture tramite PEC Aruba e .NET C#

ciao, qualcuno è riuscito ad allegare e inviare le fatt. XNML ad un messaggio pec in automatico da C#? io ho usato System.Net.Mail e pareva andare usando questa riga

SmtpClient smtpClient = new SmtpClient(“smtp”);

senza neppure specificare il server SMTP, ma nel momento che ho cambiato macchina e ho messo l’eseguibile su altra, non va…
credo che faccia riferimento alla schema Network Settings però non sono riuscito a trovarlo .
mi aiutate ?
ho provato anche ad utilizzare System.Web.Mail senza successo

Beh, teoricamente cambiando macchina ma restando sempre con lo stesso server smtp, non dovrebbe cambiare nulla (alla fine smtpClient non fa altro che inviare la mail tramite il server di posta in uscita).
Hai l’errore più specifico? (eventualmente fallo generare su un log e posta il log)

Le informazioni su come richiamare il debug JIT (Just-In-Time) anziché questa finestra
sono riportate in fondo al messaggio.

************** Testo dell’eccezione **************
System.Net.Mail.SmtpException: Errore durante l’invio della posta. —> System.Net.WebException: Impossibile risolvere il nome remoto.: ‘smtp’
in System.Net.ServicePoint.GetConnection(PooledStream PooledStream, Object owner, Boolean async, IPAddress& address, Socket& abortSocket, Socket& abortSocket6)
in System.Net.PooledStream.Activate(Object owningObject, Boolean async, GeneralAsyncDelegate asyncCallback)
in System.Net.PooledStream.Activate(Object owningObject, GeneralAsyncDelegate asyncCallback)
in System.Net.ConnectionPool.GetConnection(Object owningObject, GeneralAsyncDelegate asyncCallback, Int32 creationTimeout)
in System.Net.Mail.SmtpConnection.GetConnection(ServicePoint servicePoint)
in System.Net.Mail.SmtpTransport.GetConnection(ServicePoint servicePoint)
in System.Net.Mail.SmtpClient.GetConnection()
in System.Net.Mail.SmtpClient.Send(MailMessage message)
— Fine della traccia dello stack dell’eccezione interna —
in System.Net.Mail.SmtpClient.Send(MailMessage message)
in Fatturaelettronica.Form1.SendEmail(String oggetto, String mittente, String password, String ricevente)
in Fatturaelettronica.Form1.button6_Click(Object sender, EventArgs e)
in System.Windows.Forms.Control.OnClick(EventArgs e)
in System.Windows.Forms.Button.OnClick(EventArgs e)
in System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
in System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
in System.Windows.Forms.Control.WndProc(Message& m)
in System.Windows.Forms.ButtonBase.WndProc(Message& m)
in System.Windows.Forms.Button.WndProc(Message& m)
in System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
in System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
in System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

************** Assembly caricati **************
mscorlib
Versione assembly: 4.0.0.0
Versione Win32: 4.7.2563.0 built by: NET471REL1
Base di codice: file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll

Fatturaelettronica
Versione assembly: 1.0.0.0
Versione Win32: 1.0.0.0
Base di codice: file:///C:/FatturaElettronica/Fatturaelettronica.exe

System.Windows.Forms
Versione assembly: 4.0.0.0
Versione Win32: 4.7.2558.0 built by: NET471REL1
Base di codice: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll

System
Versione assembly: 4.0.0.0
Versione Win32: 4.7.2558.0 built by: NET471REL1
Base di codice: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll

System.Drawing
Versione assembly: 4.0.0.0
Versione Win32: 4.7.2558.0 built by: NET471REL1
Base di codice: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll

System.Configuration
Versione assembly: 4.0.0.0
Versione Win32: 4.7.2558.0 built by: NET471REL1
Base di codice: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll

System.Core
Versione assembly: 4.0.0.0
Versione Win32: 4.7.2563.0 built by: NET471REL1
Base di codice: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_4.0.0.0__b77a5c561934e089/System.Core.dll

System.Xml
Versione assembly: 4.0.0.0
Versione Win32: 4.7.2558.0 built by: NET471REL1
Base di codice: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll

System.resources
Versione assembly: 4.0.0.0
Versione Win32: 4.6.1055.0 built by: NETFXREL2
Base di codice: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.resources/v4.0_4.0.0.0_it_b77a5c561934e089/System.resources.dll

System.Windows.Forms.resources
Versione assembly: 4.0.0.0
Versione Win32: 4.6.1055.0 built by: NETFXREL2
Base di codice: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms.resources/v4.0_4.0.0.0_it_b77a5c561934e089/System.Windows.Forms.resources.dll

mscorlib.resources
Versione assembly: 4.0.0.0
Versione Win32: 4.6.1055.0 built by: NETFXREL2
Base di codice: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/mscorlib.resources/v4.0_4.0.0.0_it_b77a5c561934e089/mscorlib.resources.dll

************** Debug JIT **************
Per abilitare il debug JIT, è necessario impostare il valore
jitDebugging nella sezione system.windows.forms del file di configurazione
dell’applicazione o del computer (machine.config).
L’applicazione inoltre deve essere compilata con il debug
abilitato.

Ad esempio:

Quando il debug JIT è abilitato, tutte le eccezioni non gestite
vengono inviate al debugger JIT registrato nel computer,
anziché essere gestite da questa finestra di dialogo.

Direi che è chiaro
“Impossibile risolvere il nome remoto.: ‘smtp’”.
Dato che, mi pare di capire, nel codice non specifichi nulla, lui prende le impostazioni di default della macchina (che probabilmente su quella macchina non sono specificate).
Ti suggerisco vivamente di definire tutto quello che serve a livello di codice (magari estrai i dati da un db oppure da un banale file di testo con i dati su ciascuna riga) in questo modo (es.)+

                SmtpClient client = new SmtpClient();
                client.Port = port;
                client.Host = host;
                client.EnableSsl = false; \\o true se abiliti ssl
                client.Timeout = 7000;
                client.DeliveryMethod = SmtpDeliveryMethod.Network;
                client.UseDefaultCredentials = false;
                client.Credentials = new System.Net.NetworkCredential(user, pwd); 

//user e pwd saranno l’utente abilitato all’invio della mail

Ultima cosa: l’API che stai usando è deprecata, andrebbe usato qualcosa di più moderno

mi dà errore : The operation has timed out. secondo me è una questione di smtp server… dove posso vedere dove sono archiaviate queste credenziali ?

Non hai i dati del server mail?
Potresti provare a prenderli da un qualunque client di posta (es. Outlook) utilizzando poi un utente specifico già esistente (o meglio uno creato ad hoc) per inviare la mail

dal sito aruba pec dicono che il server SMTP è smtps.pec.aruba.it porta 465 SSL
provato ma nulla.
perchè però se non metto niente
e sulla chiamata a SmtpClient smtpClient = new SmtpClient(“smtp”); metto appunto smtp la mail va correttamente (come porta ho indicato 25 e SSL=false).
secondo me legge il tutto da questo file
https://docs.microsoft.com/en-us/dotnet/framework/configure-apps/file-schema/network/
io vorrei capire che caspita c’è scritto ma non capisco dove stia sto file !!!
infatti fa riferimento all’elemento chiamato smtp dentro al file di configurazione network schema

intanto da com’è indicato, è un smtp"s" quindi devi usare l’ssl. La porta te la dice sopra, devi usare la 465 e ssl true
Il network schema è sicuramente un xml di configurazione presente nel framework (devo cercare, sinceramente al volo non saprei dove trovarlo), ritengo, però, che non ha senso usare quel metodo perchè, come ben hai potuto vedere, se cambia qualcosa non ne hai il controllo e non funziona.
Fidati, trova i dati corretti per configurare il server smtp ed usalo nel modo suggerito, ne avrai sempre il controllo

System.Net.Mail non funziona con la porta 465, anzi credo che funzioni solo con la porta 25. Quindi non impazzire oltre, che già ci ho perso un po’ di tempo anch’io qualche mese fa. Per mandare correttamente un messaggio PEC, con allegati, puoi usare System.Web.Mail (anche se Visual Studio ti segnala che è obsoleto) che funziona perfettamente anche con .NET Framework 4.0 (Windows XP). Oppure puoi usare il pacchetto gratuito Aegis Mail, che puoi installare direttamente come pacchetto NuGet all’interno di Visual Studio 2017, ma funziona con .NET Framework >=4.5 (quindi niente Windows XP). Io uso System.Web.Mail autenticandomi su register, oppure su Aruba: non perde un colpo. Trasferisco ogni giorno un allegato .zip con circa 80 fatture xml. Mai avuto nessun problema: solitamente il giorno successivo, le vedo online sul sito dell’AdE.

No dai, non gli suggerite roba deprecata. Quando in futuro andrà a fare manutenzione se ne pentirà. Ci sono tante soluzioni gratuite e ben integrate. La stessa pagina di MS differisce roba su github molto valida.

Lo spazio dei nomi che Microsoft continua a proporre per le e-mail è System.Net.Mail, ma non funziona con l’autenticazione SSL necessaria per la Pec. Se con pochissime righe di C# (che se vuoi posto qua), si può usare System.Web.Mail che invece funziona al100% con qualunque .NET Framework, non c’e niente di male ad utilizzarlo… poi se uno vuole perderci del tempo… allora cerca qualcos’altro, che comunque, bene che vada, restituirà lo stesso risultato.

A proposito di roba deprecata.
Se usi NET CORE/ Net Standard non puoi chiamare un SOAP MTOM.
Deprechiamo le tecnologie di AdE o Net Core in questo caso?

1 Mi Piace

SmtpClient Smtp.Net.Mail funziona con aruba utilizzando la porta TLS 587.
Piccolo frammento di codice:
var smtp = new SmtpClient
{
Host = “smtps.aruba.it”,
Port = 587,
EnableSsl = true,
DeliveryMethod = SmtpDeliveryMethod.Network,
UseDefaultCredentials = true,
Credentials = new NetworkCredential(“my from address”, “my pwd”),
Timeout = 20000
};