Chilkat HOME .NET Core C# Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi ActiveX Delphi DLL Go Java Lianja Mono C# Node.js Objective-C PHP ActiveX PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift 2 Swift 3,4,5... Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(SQL Server) Bounced Email HandlingDemonstrates how to examine emails and detect which are bounced (automated) replies. Classifies each email according to the type of bounce.
-- 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) -- This example requires the Chilkat API to have been previously unlocked. -- See Global Unlock Sample for sample code. DECLARE @bounce int -- Use "Chilkat_9_5_0.Bounce" for versions of Chilkat < 10.0.0 EXEC @hr = sp_OACreate 'Chilkat.Bounce', @bounce OUT IF @hr <> 0 BEGIN PRINT 'Failed to create ActiveX component' RETURN END -- The mailman object is used for receiving (POP3) -- and sending (SMTP) email. DECLARE @mailman int -- Use "Chilkat_9_5_0.MailMan" for versions of Chilkat < 10.0.0 EXEC @hr = sp_OACreate 'Chilkat.MailMan', @mailman OUT -- Set the POP3 server's hostname EXEC sp_OASetProperty @mailman, 'MailHost', 'mail.chilkatsoft.com' -- Set the POP3 login/password. EXEC sp_OASetProperty @mailman, 'PopUsername', 'myLogin' EXEC sp_OASetProperty @mailman, 'PopPassword', 'myPassword' -- Copy the all email from the user's POP3 mailbox -- into a bundle object. The email remains on the server. -- (There are other methods for deleting email from a POP3 server.) DECLARE @bundle int EXEC sp_OAMethod @mailman, 'CopyMail', @bundle OUT EXEC sp_OAGetProperty @mailman, 'LastMethodSuccess', @iTmp0 OUT IF @iTmp0 = 0 BEGIN EXEC sp_OAGetProperty @mailman, 'LastErrorText', @sTmp0 OUT PRINT @sTmp0 EXEC @hr = sp_OADestroy @bounce EXEC @hr = sp_OADestroy @mailman RETURN END DECLARE @i int SELECT @i = 0 DECLARE @email int EXEC sp_OAGetProperty @bundle, 'MessageCount', @iTmp0 OUT WHILE @i < @iTmp0 BEGIN EXEC sp_OAMethod @bundle, 'GetEmail', @email OUT, @i DECLARE @success int EXEC sp_OAMethod @bounce, 'ExamineEmail', @success OUT, @email IF @success = 0 BEGIN EXEC sp_OAGetProperty @bounce, 'LastErrorText', @sTmp0 OUT PRINT @sTmp0 EXEC @hr = sp_OADestroy @bundle EXEC @hr = sp_OADestroy @bounce EXEC @hr = sp_OADestroy @mailman RETURN END EXEC sp_OAGetProperty @bounce, 'BounceType', @iTmp0 OUT IF @iTmp0 = 1 BEGIN -- Hard bounce, log the email address EXEC sp_OAGetProperty @bounce, 'BounceAddress', @sTmp0 OUT PRINT 'Hard Bounce: ' + @sTmp0 END EXEC sp_OAGetProperty @bounce, 'BounceType', @iTmp0 OUT IF @iTmp0 = 2 BEGIN -- Soft bounce, log the email address EXEC sp_OAGetProperty @bounce, 'BounceAddress', @sTmp0 OUT PRINT 'Soft Bounce: ' + @sTmp0 END EXEC sp_OAGetProperty @bounce, 'BounceType', @iTmp0 OUT IF @iTmp0 = 3 BEGIN -- General bounce, no email address available. PRINT 'General Bounce: No email address' END EXEC sp_OAGetProperty @bounce, 'BounceType', @iTmp0 OUT IF @iTmp0 = 4 BEGIN -- General bounce, log the email address EXEC sp_OAGetProperty @bounce, 'BounceAddress', @sTmp0 OUT PRINT 'General Bounce: ' + @sTmp0 END EXEC sp_OAGetProperty @bounce, 'BounceType', @iTmp0 OUT IF @iTmp0 = 5 BEGIN -- Mail blocked, log the email address -- A bounce occured because the sender was blocked. EXEC sp_OAGetProperty @bounce, 'BounceAddress', @sTmp0 OUT PRINT 'Mail Blocked: ' + @sTmp0 END EXEC sp_OAGetProperty @bounce, 'BounceType', @iTmp0 OUT IF @iTmp0 = 6 BEGIN -- Auto-reply, log the email address EXEC sp_OAGetProperty @bounce, 'BounceAddress', @sTmp0 OUT PRINT 'Auto-Reply: ' + @sTmp0 END EXEC sp_OAGetProperty @bounce, 'BounceType', @iTmp0 OUT IF @iTmp0 = 7 BEGIN -- Transient (recoverable) Failure, log the email address EXEC sp_OAGetProperty @bounce, 'BounceAddress', @sTmp0 OUT PRINT 'Transient Failure: ' + @sTmp0 END EXEC sp_OAGetProperty @bounce, 'BounceType', @iTmp0 OUT IF @iTmp0 = 8 BEGIN -- Subscribe request, log the email address EXEC sp_OAGetProperty @bounce, 'BounceAddress', @sTmp0 OUT PRINT 'Subscribe Request: ' + @sTmp0 END EXEC sp_OAGetProperty @bounce, 'BounceType', @iTmp0 OUT IF @iTmp0 = 9 BEGIN -- Unsubscribe Request, log the email address EXEC sp_OAGetProperty @bounce, 'BounceAddress', @sTmp0 OUT PRINT 'Unsubscribe Request: ' + @sTmp0 END EXEC sp_OAGetProperty @bounce, 'BounceType', @iTmp0 OUT IF @iTmp0 = 10 BEGIN -- Virus Notification, log the email address EXEC sp_OAGetProperty @bounce, 'BounceAddress', @sTmp0 OUT PRINT 'Virus Notification: ' + @sTmp0 END EXEC sp_OAGetProperty @bounce, 'BounceType', @iTmp0 OUT IF @iTmp0 = 11 BEGIN -- Suspected bounce. -- This should be rare. It indicates that the Bounce -- component found strong evidence that this is a bounced -- email, but couldn't quite recognize everything it -- needed to be 100% sure. Feel free to notify -- support@chilkatsoft.com regarding emails having this -- bounce type. PRINT 'Suspected Bounce!' END EXEC sp_OAGetProperty @bounce, 'BounceType', @iTmp0 OUT IF @iTmp0 = 12 BEGIN -- Challenge/Response - Auto-reply message sent by SPAM software -- where only verified email addresses are accepted. EXEC sp_OAGetProperty @bounce, 'BounceAddress', @sTmp0 OUT PRINT 'Challenge: ' + @sTmp0 END EXEC sp_OAGetProperty @bounce, 'BounceType', @iTmp0 OUT IF @iTmp0 = 13 BEGIN -- Address Change Notification Message. EXEC sp_OAGetProperty @bounce, 'BounceAddress', @sTmp0 OUT PRINT 'Address Change: ' + @sTmp0 END EXEC sp_OAGetProperty @bounce, 'BounceType', @iTmp0 OUT IF @iTmp0 = 14 BEGIN -- Success DSN indicating that the message was successfully relayed. PRINT 'DSN Successful Relay: ' END EXEC @hr = sp_OADestroy @email SELECT @i = @i + 1 END EXEC @hr = sp_OADestroy @bundle EXEC sp_OAMethod @mailman, 'Pop3EndSession', @success OUT EXEC @hr = sp_OADestroy @bounce EXEC @hr = sp_OADestroy @mailman END GO |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.