A Mail server may request a certificate from the client, forcing the client to prove it's identity to the server. This process is called client authentication. If the server does request a certificate from the mail client, the CertificateRequested event will be raised, notifying the user.
These examples demonstrate the Smtp component. The Pop and Imap components work similarly.
Handling Client Authentication Interactively
When writing an interactive application in which a server requests client authentication it is often useful to notify the user of the client application and allow them to select the certificate they would like to use for client authentication. The CertificateListForm object is ideal for displaying available certificates to the user. If the scenario is such that you cannot provide a dialog box to the user (for example, if you are writing some sort of automated scripting application) you have to use a different technique. This is addressed later in this topic.
Be sure to add a reference to Dart.PowerTCP.Mail to have access to the CertificateListForm.
| C# | Copy Code |
|---|---|
private void SecureTest() { // Use explicit SSL smtp1.Security = Dart.PowerTCP.Mail.Security.Explicit; // Send a message, it will initiate an SSL connection smtp1.Server = "MyMailServer"; smtp1.Send("you@dart.com", "me@dart.com", "SSL Test", "Hello"); MessageBox.Show("Message Sent") } private void smtp1_CertificateRequested(object sender, System.EventArgs e) { // Create a new instance of CertificateListForm CertificateListForm certForm = new CertificateListForm(true, true); certForm.Text = "The Server Requested A Client Certificate"; // Show the CertificateListForm to the user and let them choose a certificate if(certForm.ShowDialog() == DialogResult.OK) { // Set the Certificate property to the certificate the user selected. smtp1.Certificate = certForm.SelectedCertificate; } else { MessageBox.Show("You must select a cert. SSL communication will fail."); } } | |
| Visual Basic | Copy Code |
|---|---|
Private Sub SecureTest() ' Use explicit SSL Smtp1.Security = Dart.PowerTCP.Mail.Security.Explicit ' Send a message, it will initiate an SSL connection Smtp1.Server = "MyMailServer" Smtp1.Send("you@dart.com", "me@dart.com", "SSL Test", "Hello") MessageBox.Show("Message Sent") End Sub Private Sub Smtp1_CertificateRequested(ByVal sender As Object, e As EventArgs) Handles Smtp1.CertificateRequested ' Create a new instance of CertificateListForm Dim certForm as new CertificateListForm(True, True) certForm.Text = "The Server Requested A Client Certificate" ' Show the CertificateListForm to the user and let them choose a certificate If certForm.ShowDialog() = DialogResult.OK Then ' Set the Certificate property to the certificate the user selected. Smtp1.Certificate = certForm.SelectedCertificate Else MessageBox.Show("You must select a cert. SSL communication will fail.") End If End Sub | |
Handling Client Authentication When Writing A Scripting Application
If you are writing a scripting application which needs to execute without interactive user input it is often useful to set the Certificate property to a valid certificate before communication with the mail server. For this purpose the CertificateStore object is ideal. NOTE, in this example the CertificateRequested event will still be raised (if an event handler is present) but it is NOT necessary to take action in this event because the Smtp.Certificate property will already be properly set.
| C# | Copy Code |
|---|---|
private void SecureTest() { // Create a new certificate store object CertificateStore store = new CertificateStore(); // Set the Certificate property to the first certificate found. smtp1.Certificate = store[0]; // Use explicit SSL smtp1.Security = Dart.PowerTCP.Mail.Security.Explicit; // Send a message, it will initiate an SSL connection smtp1.Server = "MyMailServer"; smtp1.Send("you@dart.com", "me@dart.com", "SSL Test", "Hello"); MessageBox.Show("Message Sent") } | |
| Visual Basic | Copy Code |
|---|---|
Private Sub SecureTest() ' Create a new certificate store object Dim store as new CertificateStore() ' Set the Certificate property to the first certificate found. Smtp1.Certificate = store(0) ' Use explicit SSL Smtp1.Security = Dart.PowerTCP.Mail.Security.Explicit ' Send a message, it will initiate an SSL connection Smtp1.Server = "MyMailServer" Smtp1.Send("you@dart.com", "me@dart.com", "SSL Test", "Hello") MessageBox.Show("Message Sent") End Sub | |