Click here to Skip to main content
15,892,697 members
Articles / Programming Languages / C#
Article

Digitally Signing Emails

Rate me:
Please Sign up or sign in to vote.
1.00/5 (1 vote)
29 Mar 2008CPOL1 min read 29K   427   15   2
Digitally signing Emails using CAPICOM and CDO

Introduction

As this is my first time using C#, I thought that migrating something to C# would be the best for me to learn. Well, I happen to pick something that although portions are on the Internet, the full monte was not unless you want to pay money for it (and the code): grr. So putting it all together became the next task.

Background

I searched The Code Project first and found a useful CAPICOM class wrapper. Now I just needed to see some C# examples on sending Emails via CDO. Well there was a whole lot of that out there, so I sat down and began putting this all together.

Using the Code

I tried to make it as simple as possible (mainly because I was learning as I did it), but to use it, simply reference the DigSigs.dll in your project and do what I did below (maybe add some tags to the HTMLBody if you use it), compile it and execute it. You could do a lot more with this from a console or GUI and make it much better than it is at this point, so I will leave it to you ... enjoy!

C#
using System;
using System.Collections.Generic;
using System.Text;

namespace DSEMails
{
    class Program
    {
        static void Main(string[] args)
        {
            DigSigs.CDOEmailer email = new DigSigs.CDOEmailer();
            //
            email.To = "email address";
            email.From = "email address";
            email.CC = "email address";
            email.Signature = "name of signature";
            email.Subject = "Digital Signing Test";
            email.TheStore = "My";
            email.SMTPServer = "SMTP Server or IP Address";
            email.Body = "This is the BODY of the message!!";
            email.HTMLBody = "This is the BODY of the message!!";
            //
            email.SMTPPort = 25;           // Default Value
            email.Important = 2;           // Default Value
            email.PlainText = false;       // Default Value
            email.TimeOut = 120;           // Default Value
            email.UseMachineStore = false; // Default Value
            email.Debug = true;            // Default Value
            //
            if (email.SendTo())
            { Console.WriteLine("\nSigned and sent...\n"); }
            else
            { Console.WriteLine("\nError: Failed to send email?\n"); }
        }
    }
}

There are two classes:

  • DigSigs.CAPIWrap() which does all the signing
  • DigSigs.CDOEmailer() that is used to send the Emails

Other CodeProject Sources

As I mentioned earlier, I had help from a member of CodeProject because he had written an article about CAPICOM called CAPICOM class wrapper. Although I made a few modifications, this saved me a whole lot of time and I thank him for that!

History

  • 3/28/2008 - Initial post

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Product Manager
Germany Germany
I have been programming (as a hobby) for 20+ years (Unix C, Scripting, VB, C/C++, C#). I am getting too old to talk about it and been in the Security line of work (both Military/Civilian) for 25+ years.

Comments and Discussions

 
QuestionAttachments Pin
fishmong3r30-Sep-14 22:46
fishmong3r30-Sep-14 22:46 
GeneralError Pin
Azeem Yaseen9-Apr-09 20:43
Azeem Yaseen9-Apr-09 20:43 
It doesnt have a provistion of Authentication from SMTP in case ur SMTP requires authentication the code would not work.

I added three properties in it

/// <summary>
/// Added by azeem
/// </summary>
private bool _isAuthRequired;

public bool AuthRequired
{
get { return _isAuthRequired; }
set { _isAuthRequired = value; }
}

/// <summary>
/// Username added by azeem
/// </summary>
private string _Username;

public string Username
{
get { return _Username; }
set { _Username = value; }
}


private string _Password;

public string Password
{
get { return _Password; }
set { _Password = value; }
}

and then before after

a.Configuration.Fields["http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout"].Value = TimeOut;

add


if (AuthRequired)
{
a.Configuration.Fields["http://schemas.microsoft.com/cdo/configuration/smtpauthenticate"].Value = "1";
a.Configuration.Fields["http://schemas.microsoft.com/cdo/configuration/sendusername"].Value = Username;
a.Configuration.Fields["http://schemas.microsoft.com/cdo/configuration/sendpassword"].Value = Password;

}


and then in the main program
email.AuthRequired = true;
email.Username = "your smtp username";
email.Password = "your smtp password";


and it should work

Anyways thanks for the wrapper

Best Regards
Azeem.
azimyasin.wordpress.com

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.