This set of stored procedures will 1) send e-mail to a comma delimited list of e-mails (7000 character maximum), 2) optionally carbon copy a comma delimited list of e-mails (7000 character maximum), and 3) provide support for a 7000 character body and 255 character subject using any SMTP server. It requires an external COM object, ASPEMail avaiable from
Requires Free Membership to View
I keep this in the model database, so each new database I create contains these procedures and the abilty to send e-mail.
There are three stored procedures in this set: sp_hexadecimal, sp_displayoaerrorinfo, and sp_sendmail. Usage:
EXEC sp_SendMail @SMTPServer, -- smtp server address @From, -- From e-mail address @FromName, -- From friendly name (uses e-mail address if null) @AddAddress, -- Comma delimited Address list @CCAddress, -- Comma delimited CC list @Subject, -- EMail subject @Body, -- EMail body @Err -- Output Contains '0' if successful, -- Actual error text if failure DROP PROCEDURE sp_hexadecimal GO CREATE PROCEDURE sp_hexadecimal @binvalue varbinary(255),@hexvalue varchar(255) OUTPUT AS BEGIN SET NOCOUNT ON DECLARE @charvalue varchar(255), @i int, @length int, @hexstring char(16) SET @charvalue = '0x' SET @i = 1 SET @length = DATALENGTH(@binvalue) SET @hexstring = '0123456789abcdef' WHILE (@i <= @length) BEGIN DECLARE @tempint int, @firstint int, @secondint int SET @tempint = CONVERT(int, SUBSTRING(@binvalue,@i,1)) SET @firstint = FLOOR(@tempint/16) SET @secondint = @tempint - (@firstint*16) SET @charvalue = @charvalue + SUBSTRING(@hexstring, @firstint+1, 1) + SUBSTRING(@hexstring, @secondint+1, 1) SET @i = @i + 1 END SET @hexvalue = @charvalue END GO DROP PROCEDURE sp_displayoaerrorinfo GO CREATE PROCEDURE sp_displayoaerrorinfo @object int,@hresult int, @Err varchar(7000) OUTPUT AS BEGIN DECLARE @hrhex char(10), @hr int, @source varchar(255), @description varchar(255) EXECUTE sp_hexadecimal @hresult, @hrhex OUT SET @Err = ' HRESULT: ' + @hrhex EXECUTE @hr = sp_OAGetErrorInfo @object, @source OUT, @description OUT IF @hr = 0 BEGIN SET @Err = @Err + CHAR(13) + ' Source: ' + @source SET @Err = @Err + CHAR(13) + ' Description: ' + @description END ELSE BEGIN SET @Err = 'Unable to get error information' RETURN END END GO DROP PROC sp_SendMail go CREATE PROC sp_SendMail @SMTPServer varchar(50), @From varchar(100), @AddAddress varchar(7000), @FromName varchar(100) = NULL, @CCAddress varchar(7000)= NULL, @Subject varchar(256) = NULL, @Body varchar(7000) = NULL, @Err varchar(7000) OUTPUT AS /**************************************************************************/ /* Name : sp_SendMail */ /* Purpose : This stored procedure will send e-mail to any smtp server */ /* Dependant */ /* Database : sp_hexadecimal */ /* : sp_displayoaerrorinfo */ /* External : ASPEmail Com Object http://www.aspemail.com/download.html */ /* */ /* Usage: : EXECUTE sp_SendMail, */ /* , */ /* , */ /* , */ /* , */ /* , */ /*
*/ /**************************************************************************/ BEGIN DECLARE
@object int, @hr int, @ErrInfo varchar(7000), @tmpAddr varchar(100) SELECT @AddAddress =
RTRIM(@AddAddress) SELECT @CCAddress = RTRIM(@CCAddress) SELECT @Subject = RTRIM(@Subject) SELECT
@SMTPServer = RTRIM(@SMTPServer) SELECT @From = RTRIM(@From) SELECT @FromName = RTRIM(@FromName) IF
LEN(@AddAddress) > 0 OR LEN(@SMTPServer) > 0 OR LEN(@From) > 0 BEGIN /* Only do this if
AddAddress, SMTPServer or From > 0 */ EXECUTE @hr = sp_OACreate 'Persits.MailSender', @object
OUT IF @hr <> 0 BEGIN EXECUTE sp_displayoaerrorinfo @object, @hr, @ErrInfo OUT SELECT @Err
= @ErrInfo RETURN END EXECUTE @hr = sp_OASetProperty @object, 'host', @SMTPServer IF @hr <>
0 BEGIN EXECUTE sp_displayoaerrorinfo @object, @hr, @ErrInfo OUT SELECT @Err = @ErrInfo RETURN END
EXECUTE @hr = sp_OASetProperty @object, 'From',@From IF @hr <> 0 BEGIN EXECUTE
sp_displayoaerrorinfo @object, @hr, @ErrInfo OUT SELECT @Err = @ErrInfo RETURN END IF @FromName IS
NULL BEGIN /* If FromName is NULL, set it to From Address */ EXECUTE @hr = sp_OASetProperty
@object, 'FromName',@From IF @hr <> 0 BEGIN EXECUTE sp_displayoaerrorinfo @object, @hr,
@ErrInfo OUT SELECT @Err = @ErrInfo RETURN END END /* If FromName is NULL, set it to From Address
*/ ELSE BEGIN EXECUTE @hr = sp_OASetProperty @object, 'FromName',@FromName IF @hr <> 0
BEGIN EXECUTE sp_displayoaerrorinfo @object, @hr, @ErrInfo OUT SELECT @Err = @ErrInfo RETURN END
END -- Add TO Address WHILE LEN(@AddAddress) > 0 BEGIN SELECT @tmpAddr =
SUBSTRING(@AddAddress,1,CHARINDEX(',',@AddAddress)) IF LEN(@tmpAddr) = 0 BEGIN SELECT @tmpAddr =
@AddAddress SELECT @AddAddress = '' END ELSE BEGIN SELECT @AddAddress =
REPLACE(@tmpAddr,@AddAddress,'') END EXECUTE @hr = sp_OAMethod @object,'AddAddress',NULL, @tmpAddr
IF @hr <> 0 BEGIN EXECUTE sp_displayoaerrorinfo @object, @hr, @ErrInfo OUT SELECT @Err =
@ErrInfo RETURN END END -- Add CC Address if any WHILE LEN(@AddAddress) > 0 BEGIN SELECT
@tmpAddr = SUBSTRING(@CCAddress,1,CHARINDEX(',',@CCAddress)) IF LEN(@tmpAddr) = 0 BEGIN SELECT
@tmpAddr = @CCAddress SELECT @CCAddress = '' END ELSE BEGIN SELECT @CCAddress =
REPLACE(@tmpAddr,@CCAddress,'') END EXECUTE @hr = sp_OAMethod @object,'AddCC',NULL, @tmpAddr IF @hr
<> 0 BEGIN EXECUTE sp_displayoaerrorinfo @object, @hr, @ErrInfo OUT SELECT @Err = @ErrInfo
RETURN END END EXECUTE @hr = sp_OASetProperty @object, 'Subject',@Subject IF @hr <> 0 BEGIN
EXECUTE sp_displayoaerrorinfo @object, @hr, @ErrInfo OUT SELECT @Err = @ErrInfo END EXECUTE @hr =
sp_OASetProperty @object, 'Body',@Body IF @hr <> 0 BEGIN EXECUTE sp_displayoaerrorinfo
@object, @hr, @ErrInfo OUT SELECT @Err = @ErrInfo RETURN END EXECUTE @hr = sp_OAMethod @object,
'Send' IF @hr <> 0 BEGIN EXECUTE sp_displayoaerrorinfo @object, @hr, @ErrInfo OUT SELECT
@Err = @ErrInfo RETURN END -- Destroy the object. EXECUTE @hr = sp_OADestroy @object IF @hr
<> 0 BEGIN EXECUTE sp_displayoaerrorinfo @object, @hr, @ErrInfo OUT SELECT @Err = @ErrInfo
RETURN END END /* Only do this if AddAddress, SMTPServer or From > 0 */ ELSE BEGIN /* If
AddAddress, SMTPServer or From = 0 */ SELECT @Err = 'To Address, SMTP Server and From Address are
required.' END /* If AddAddress, SMTPServer or From = 0 */ IF @Err IS NULL BEGIN SELECT @Err = '0'
END END GO
This was first published in June 2002

Join the conversationComment
Share
Comments
Results
Contribute to the conversation