SQL Server
SQL Server
Forward an Email using CreateForward
See more Email Object Examples
Reads an email from an IMAP server, creates a forward version of the email using the CreateForward method, and sends the email to another recipient.Chilkat SQL Server Downloads
-- Important: See this note about string length limitations for strings returned by sp_OAMethod calls.
--
CREATE PROCEDURE ChilkatSample
AS
BEGIN
DECLARE @hr int
DECLARE @iTmp0 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.
-- Read the 1st (most recent) email in an Inbox.
DECLARE @imap int
EXEC @hr = sp_OACreate 'Chilkat.Imap', @imap OUT
IF @hr <> 0
BEGIN
PRINT 'Failed to create ActiveX component'
RETURN
END
-- Connect to an IMAP server.
EXEC sp_OASetProperty @imap, 'Ssl', 1
EXEC sp_OASetProperty @imap, 'Port', 993
EXEC sp_OAMethod @imap, 'Connect', @success OUT, 'imap.example.com'
IF @success = 0
BEGIN
EXEC sp_OAGetProperty @imap, 'LastErrorText', @sTmp0 OUT
PRINT @sTmp0
EXEC @hr = sp_OADestroy @imap
RETURN
END
-- Login
EXEC sp_OAMethod @imap, 'Login', @success OUT, 'myLogin', 'myPassword'
IF @success = 0
BEGIN
EXEC sp_OAGetProperty @imap, 'LastErrorText', @sTmp0 OUT
PRINT @sTmp0
EXEC @hr = sp_OADestroy @imap
RETURN
END
-- Select an IMAP mailbox
EXEC sp_OAMethod @imap, 'SelectMailbox', @success OUT, 'Inbox'
IF @success = 0
BEGIN
EXEC sp_OAGetProperty @imap, 'LastErrorText', @sTmp0 OUT
PRINT @sTmp0
EXEC @hr = sp_OADestroy @imap
RETURN
END
DECLARE @numEmails int
EXEC sp_OAGetProperty @imap, 'NumMessages', @numEmails OUT
-- Fetch the email at the last sequence number.
-- (We are assuming the Inbox has at least 1 email)
DECLARE @email int
EXEC @hr = sp_OACreate 'Chilkat.Email', @email OUT
EXEC sp_OAMethod @imap, 'FetchEmail', @success OUT, 0, @numEmails, 0, @email
IF @success = 0
BEGIN
EXEC sp_OAGetProperty @imap, 'LastErrorText', @sTmp0 OUT
PRINT @sTmp0
EXEC @hr = sp_OADestroy @imap
EXEC @hr = sp_OADestroy @email
RETURN
END
-- Disconnect from the IMAP server.
EXEC sp_OAMethod @imap, 'Disconnect', @success OUT
EXEC sp_OAGetProperty @email, 'Subject', @sTmp0 OUT
PRINT @sTmp0
DECLARE @eForward int
EXEC @hr = sp_OACreate 'Chilkat.Email', @eForward OUT
EXEC sp_OAMethod @email, 'ToForward', @success OUT, @eForward
IF @success = 0
BEGIN
EXEC sp_OAGetProperty @email, 'LastErrorText', @sTmp0 OUT
PRINT @sTmp0
EXEC @hr = sp_OADestroy @imap
EXEC @hr = sp_OADestroy @email
EXEC @hr = sp_OADestroy @eForward
RETURN
END
-- The eForward email has no To or CC recipients yet.
-- Add one or more..
EXEC sp_OAMethod @eForward, 'AddTo', @success OUT, 'Joe', 'joe@example.com'
-- We also need to specify the From name/address.
EXEC sp_OASetProperty @eForward, 'FromAddress', 'matt@someMailServer.com'
EXEC sp_OASetProperty @eForward, 'FromName', 'Matt'
-- If we wish to add text at the start of the email body:
DECLARE @sbHtmlBody int
EXEC @hr = sp_OACreate 'Chilkat.StringBuilder', @sbHtmlBody OUT
EXEC sp_OAMethod @eForward, 'HasHtmlBody', @iTmp0 OUT
IF @iTmp0 = 1
BEGIN
EXEC sp_OAMethod @eForward, 'GetHtmlBody', @sTmp0 OUT
EXEC sp_OAMethod @sbHtmlBody, 'Append', @success OUT, @sTmp0
EXEC sp_OAMethod @sbHtmlBody, 'Prepend', @success OUT, '<p>Hello, this is an email I''m forwarding to you...</p>'
EXEC sp_OAMethod @sbHtmlBody, 'GetAsString', @sTmp0 OUT
EXEC sp_OAMethod @eForward, 'SetHtmlBody', NULL, @sTmp0
END
DECLARE @sbPtBody int
EXEC @hr = sp_OACreate 'Chilkat.StringBuilder', @sbPtBody OUT
EXEC sp_OAMethod @eForward, 'HasPlainTextBody', @iTmp0 OUT
IF @iTmp0 = 1
BEGIN
EXEC sp_OAMethod @eForward, 'GetPlainTextBody', @sTmp0 OUT
EXEC sp_OAMethod @sbPtBody, 'Append', @success OUT, @sTmp0
EXEC sp_OAMethod @sbPtBody, 'Prepend', @success OUT, 'Hello, this is an email I''m forwarding to you...' + CHAR(13) + CHAR(10) + CHAR(13) + CHAR(10)
EXEC sp_OAMethod @sbPtBody, 'GetAsString', @sTmp0 OUT
EXEC sp_OAMethod @eForward, 'SetTextBody', NULL, @sTmp0, 'text/plain'
END
-- We could save the .eml, then double-click on it to view in our mail program, such as Outlook or Thunderbird..
EXEC sp_OAMethod @eForward, 'SaveEml', @success OUT, 'qa_output/forward.eml'
-- We could send (forward) the email..
DECLARE @mailman int
EXEC @hr = sp_OACreate 'Chilkat.MailMan', @mailman OUT
EXEC sp_OASetProperty @mailman, 'SmtpHost', 'smtp.example.com'
EXEC sp_OASetProperty @mailman, 'SmtpUsername', 'myLogin'
EXEC sp_OASetProperty @mailman, 'SmtpPassword', 'myPassword'
EXEC sp_OASetProperty @mailman, 'SmtpPort', 587
EXEC sp_OASetProperty @mailman, 'StartTLS', 1
EXEC sp_OAMethod @mailman, 'SendEmail', @success OUT, @eForward
IF @success = 0
BEGIN
EXEC sp_OAGetProperty @mailman, 'LastErrorText', @sTmp0 OUT
PRINT @sTmp0
EXEC @hr = sp_OADestroy @imap
EXEC @hr = sp_OADestroy @email
EXEC @hr = sp_OADestroy @eForward
EXEC @hr = sp_OADestroy @sbHtmlBody
EXEC @hr = sp_OADestroy @sbPtBody
EXEC @hr = sp_OADestroy @mailman
RETURN
END
EXEC sp_OAMethod @mailman, 'CloseSmtpConnection', @success OUT
IF @success <> 1
BEGIN
PRINT 'Connection to SMTP server not closed cleanly.'
END
PRINT 'Mail Sent!'
EXEC @hr = sp_OADestroy @imap
EXEC @hr = sp_OADestroy @email
EXEC @hr = sp_OADestroy @eForward
EXEC @hr = sp_OADestroy @sbHtmlBody
EXEC @hr = sp_OADestroy @sbPtBody
EXEC @hr = sp_OADestroy @mailman
END
GO