2010-01-13 22 views
41

Per rispettare le normative HIPAA, è necessario inviare e-mail da un sito esterno (esterno al firewall) a un server di Exchange interno (all'interno del firewall). I nostri amministratori di Exchange ci dicono che è necessario utilizzare la crittografia TLS per inviare posta dal server Web al server di posta elettronica.C# ASP.NET Invia e-mail tramite TLS

Non ho mai usato TLS prima e non ho molta familiarità con esso. La ricerca su Google ha generato numerose librerie a pagamento. C'è qualcosa di nativo in .NET che realizzerà questo? Se sì, come posso configurarlo? In caso contrario, c'è qualcosa di gratuito o open source?

configurazione attuale:

  • ASP.NET C# Web Application
  • 2.0 Framework
  • Utilizzando System.Net.Mail per inviare e-mail e gli allegati tramite SMTP
  • IIS 6.0
+4

'SmtpClient.EnableSsl = true;'? –

risposta

52

TLS (Transport Level Security) è il termine leggermente più ampio che ha sostituito SSL (Secure Sockets Layer) nella protezione delle comunicazioni HTTP. Quindi ciò che ti viene chiesto di fare è abilitare SSL.

+5

Grazie! E 'stato stupido facile! – Joshua

+1

Qualcuno ha avuto lo stesso problema qui: http://bytes.com/topic/net/answers/671675-smtpclient-enablessl-using-tls –

+3

Non tutti i server SMTP supportano sia TSL che SSL. – cgalvao1993

22

Su SmtpClient esiste una proprietà EnableSsl che si desidera impostare.

cioè

SmtpClient client = new SmtpClient(exchangeServer); 
client.EnableSsl = true; 
client.Send(msg); 
+1

Mi piace questo post poiché penso che sia una buona risposta, ma sono ancora un po 'preoccupato. Se si imposta EnableSSL su true, * garantirà * che * tutti * i server di posta elettronica * tra * il server di posta elettronica di origine e il server di ricezione ricevano SSL o TLS? Dalla mia comprensione, l'e-mail può talvolta rimbalzare su * molti * server prima che raggiunga la sua destinazione finale. –

+3

@ShawnEary No, non è così. Significa semplicemente che la connessione tra il tuo client SMTP .NET e il server SMTP iniziale è sicuro - il gioco è fatto. Niente di più. Non c'è alcuna disposizione in SMTP per proteggere l'intero percorso seguito da un messaggio di posta elettronica, ecco perché abbiamo S/MIME per la crittografia dei messaggi. – Dai

17

ero quasi Utilizzando la stessa tecnologia come avete fatto, però stavo usando la mia applicazione per la connessione di un server Exchange tramite Office 365 piattaforma su WinForms. Anch'io ho avuto lo stesso problema di te, ma sono riuscito a ottenere usando codice che ha una leggera modifica di ciò che altri hanno dato sopra.

SmtpClient client = new SmtpClient(exchangeServer, 587); 
client.Credentials = new System.Net.NetworkCredential(username, password); 
client.EnableSsl = true; 
client.Send(msg); 

Ho dovuto usare la porta 587, che è ovviamente la porta predefinita su TSL e l'autenticazione.

+0

@hiFl signore, che dire della porta predefinita per SSL, se voglio che il client smtp scelga SSL non il TLS? –

+1

465 come [documento dice] (https://msdn.microsoft.com/en-us/library/system.net.mail.smtpclient.enablessl(v=vs.110).aspx) – hiFI