Sample code for 30+ languages & platforms
SQL Server

Send DKIM Signed Email

See more DKIM / DomainKey Examples

Demonstrates how to send DKIM signed email.

Chilkat SQL Server Downloads

SQL Server
-- Important: See this note about string length limitations for strings returned by sp_OAMethod calls.
--
CREATE PROCEDURE ChilkatSample
AS
BEGIN
    DECLARE @hr int
    -- Important: Do not use nvarchar(max).  See the warning about using nvarchar(max).
    DECLARE @sTmp0 nvarchar(4000)
    DECLARE @success int
    SELECT @success = 0

    -- This example requires the Chilkat API to have been previously unlocked.
    -- See Global Unlock Sample for sample code.

    DECLARE @mailman int
    EXEC @hr = sp_OACreate 'Chilkat.MailMan', @mailman OUT
    IF @hr <> 0
    BEGIN
        PRINT 'Failed to create ActiveX component'
        RETURN
    END

    DECLARE @dkim int
    EXEC @hr = sp_OACreate 'Chilkat.Dkim', @dkim OUT

    -- SMTP server settings...
    EXEC sp_OASetProperty @mailman, 'SmtpHost', 'SMTP_DOMAIN'
    EXEC sp_OASetProperty @mailman, 'SmtpUsername', 'SMTP_LOGIN'
    EXEC sp_OASetProperty @mailman, 'SmtpPassword', 'SMTP_PASSWORD'
    EXEC sp_OASetProperty @mailman, 'SmtpPort', 465
    EXEC sp_OASetProperty @mailman, 'SmtpSsl', 1

    DECLARE @email int
    EXEC @hr = sp_OACreate 'Chilkat.Email', @email OUT

    EXEC sp_OASetProperty @email, 'Subject', 'This is a test'
    EXEC sp_OASetProperty @email, 'Body', 'This is a test'
    EXEC sp_OASetProperty @email, 'From', 'Chilkat Support <support@chilkatsoft.com>'

    -- Add some recipients (BCC recipients are added below)
    EXEC sp_OAMethod @email, 'AddTo', @success OUT, 'Chilkat Software', 'chilkat_software@yahoo.com'
    EXEC sp_OAMethod @email, 'AddTo', @success OUT, 'Chilkat Admin', 'admin@chilkatsoft.com'
    EXEC sp_OAMethod @email, 'AddCC', @success OUT, 'Chilkat Admin', 'admin@chilkat.io'

    -- When sending an email with a DKIM signature, the MIME
    -- of the email must not be modified prior to
    -- or during the sending process.  Therefore, the MIME of the
    -- email is assembled, the DKIM signature is added, and then
    -- SendMimeBd is called to send the email.

    -- First get the MIME of the email.  Calling RenderToMimeBd 
    -- causes the email to be signed and/or encrypted if those options
    -- have been selected.  The MIME returned by RenderToMimeBd
    -- is the exact MIME that would've been sent if SendEmail was
    -- called.  We'll add a DKIM signature header to this MIME and then send...
    DECLARE @bdMime int
    EXEC @hr = sp_OACreate 'Chilkat.BinData', @bdMime OUT

    EXEC sp_OAMethod @mailman, 'RenderToMimeBd', @success OUT, @email, @bdMime
    IF @success = 0
      BEGIN
        EXEC sp_OAGetProperty @mailman, 'LastErrorText', @sTmp0 OUT
        PRINT @sTmp0
        EXEC @hr = sp_OADestroy @mailman
        EXEC @hr = sp_OADestroy @dkim
        EXEC @hr = sp_OADestroy @email
        EXEC @hr = sp_OADestroy @bdMime
        RETURN
      END

    -- To create a DKIM signature,
    -- you'll need to provide the following:
    -- (1) An RSA private key in any common file format.
    -- (2) The domain name (typically the same domain
    -- as the sender of an email).
    -- (3) A selector for the domain name -- an arbitrary string
    -- to identify the matching public key in DNS.

    -- To allow an email recipient to verify the DKIM signature via an
    -- external email client supporting DKIM or using other software,
    -- you will need to create a DNS record with the selector
    -- and matching public key.  This example does not provide
    -- information about DKIM DNS record creation.  
    -- (Chilkat does not provide an API for creating DNS records.  
    -- Creating the DKIM DNS record is something you would do
    -- manually.)

    -- Set the domain and selector:
    -- You'll need to provide your own values here..
    EXEC sp_OASetProperty @dkim, 'DkimDomain', 'chilkatsoft.com'
    EXEC sp_OASetProperty @dkim, 'DkimSelector', 'brisbane'

    -- Load a private key from any common RSA private key
    -- format, such as DER, PKCS8, PEM, XML, etc.
    -- The LoadDkimPkFile method automatically detects
    -- the file format and reads it appropriately.
    -- If a password is not required, you'll still need to provide
    -- an empty password string argument, but it is ignored.
    DECLARE @password nvarchar(4000)
    SELECT @password = 'passwd'
    DECLARE @privKey int
    EXEC @hr = sp_OACreate 'Chilkat.PrivateKey', @privKey OUT

    EXEC sp_OAMethod @privKey, 'LoadAnyFormatFile', @success OUT, 'qa_data/pem/rsa_passwd.pem', @password
    IF @success = 0
      BEGIN
        EXEC sp_OAGetProperty @privKey, 'LastErrorText', @sTmp0 OUT
        PRINT @sTmp0
        EXEC @hr = sp_OADestroy @mailman
        EXEC @hr = sp_OADestroy @dkim
        EXEC @hr = sp_OADestroy @email
        EXEC @hr = sp_OADestroy @bdMime
        EXEC @hr = sp_OADestroy @privKey
        RETURN
      END

    EXEC sp_OAMethod @dkim, 'SetDkimPrivateKey', @success OUT, @privKey
    IF @success = 0
      BEGIN
        EXEC sp_OAGetProperty @dkim, 'LastErrorText', @sTmp0 OUT
        PRINT @sTmp0
        EXEC @hr = sp_OADestroy @mailman
        EXEC @hr = sp_OADestroy @dkim
        EXEC @hr = sp_OADestroy @email
        EXEC @hr = sp_OADestroy @bdMime
        EXEC @hr = sp_OADestroy @privKey
        RETURN
      END

    -- Add the DKIM-Signature header to the MIME in bdMime
    EXEC sp_OAMethod @dkim, 'DkimSign', @success OUT, @bdMime
    IF @success = 0
      BEGIN
        EXEC sp_OAGetProperty @dkim, 'LastErrorText', @sTmp0 OUT
        PRINT @sTmp0
        EXEC @hr = sp_OADestroy @mailman
        EXEC @hr = sp_OADestroy @dkim
        EXEC @hr = sp_OADestroy @email
        EXEC @hr = sp_OADestroy @bdMime
        EXEC @hr = sp_OADestroy @privKey
        RETURN
      END

    -- If desired, examine the MIME of the email being sent.
    EXEC sp_OAMethod @bdMime, 'WriteFile', @success OUT, 'qa_output/dkimSigned.eml'

    -- ---- Prepare to send the email contained in bdMime ---

    -- To send to multiple email addresses, the strRecipients should be set to a comma-separated
    -- list of email addresses.

    -- Note: This is where we can add additional BCC addreses.
    -- Here we are adding "chilkat.support@gmail.com" as an additional BCC address.
    -- Notice that the 1st three email addresses are NOT BCC because these email addresses
    -- appear in the MIME header of the email (in the "To" and "CC" header fields).
    -- A BCC email address does not appear in the MIME, and thus the non-BCC recipients cannot see
    -- that the email was also sent to the BCC address.  (BCC means "blind carbon copy")
    DECLARE @strRecipients nvarchar(4000)
    SELECT @strRecipients = 'chilkat_software@yahoo.com, admin@chilkatsoft.com, admin@chilkat.io, chilkat.support@gmail.com'
    DECLARE @strFrom nvarchar(4000)
    SELECT @strFrom = 'support@chilkatsoft.com'

    EXEC sp_OAMethod @mailman, 'SendMimeBd', @success OUT, @strFrom, @strRecipients, @bdMime
    IF @success = 0
      BEGIN
        EXEC sp_OAGetProperty @mailman, 'LastErrorText', @sTmp0 OUT
        PRINT @sTmp0
        EXEC @hr = sp_OADestroy @mailman
        EXEC @hr = sp_OADestroy @dkim
        EXEC @hr = sp_OADestroy @email
        EXEC @hr = sp_OADestroy @bdMime
        EXEC @hr = sp_OADestroy @privKey
        RETURN
      END

    EXEC sp_OAMethod @mailman, 'CloseSmtpConnection', @success OUT
    IF @success <> 1
      BEGIN

        PRINT 'Connection to SMTP server not closed cleanly.'
      END


    PRINT 'DKIM Signed Mail Sent!'

    EXEC @hr = sp_OADestroy @mailman
    EXEC @hr = sp_OADestroy @dkim
    EXEC @hr = sp_OADestroy @email
    EXEC @hr = sp_OADestroy @bdMime
    EXEC @hr = sp_OADestroy @privKey


END
GO