473,394 Members | 1,693 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,394 software developers and data experts.

sp_send_cdosysmail - Parameter Inside Body of Email

I currently have a web form posting back to a SQL table using a Stored
Procedure. Part of this SP is that it pulls data from another table
and inserts a new row into the registration table.

I want to have a trigger on the registration table that will fire when
the row is inserted which will use the sp_send_cdosysmail sproc to send
an e-mail to the user.

However, I want to be able to include the value of one of the fields
within the BODY of the message. I can't find a way to include
parameters/variables within the Body of a message using
sp_send_cdosysmail and it's driving me nuts.

Here's what I have in a sproc (not a trigger) that executes
sp_send_cdosysmail...I currently pass a parameter for the "To" e-mail
address and that works fine.

_________________________________________________
EXEC sp_send_cdosysmail
'f***************@testcompany.com',
@stremail, <--This is the Parameter passed for the "To" e-mail addy
-->

'Test Subject',
'Test Body,
Additional Text
Additional Text
<--THIS IS WHERE I WANT TO PUT THE PARAMETER-->
Additional Text
Additional Text'

__________________________________________________ _
Is there any way to do this?

The sp_send_cdosysmail I used is the standard MS one..Here it is for
reference:
Thanks for any help offered!

Elliot

CREATE PROCEDURE [dbo].[sp_send_cdosysmail]
@From varchar(100) ,
@To varchar(100) ,
@Subject varchar(100)=" ",
@Body varchar(4000)

/************************************************** *******************

This stored procedure takes the parameters and sends an e-mail.
All the mail configurations are hard-coded in the stored procedure.
Comments are added to the stored procedure where necessary.
References to the CDOSYS objects are at the following MSDN Web site:
http://msdn.microsoft.com/library/de..._messaging.asp

************************************************** *********************/
AS
Declare @iMsg int
Declare @hr int
Declare @source varchar(255)
Declare @description varchar(500)
Declare @output varchar(1000)

--************* Create the CDO.Message Object ************************
EXEC @hr = sp_OACreate 'CDO.Message', @iMsg OUT

--***************Configuring the Message Object ******************
-- This is to configure a remote SMTP server.
--
http://msdn.microsoft.com/library/de..._sendusing.asp
EXEC @hr = sp_OASetProperty @iMsg,
'Configuration.fields("http://schemas.microsoft.com/cdo/configuration/sendusing").Value','1'
-- This is to configure the Server Name or IP address.
-- Replace MailServerName by the name or IP of your SMTP Server.
EXEC @hr = sp_OASetProperty @iMsg,
'Configuration.fields("http://schemas.microsoft.com/cdo/configuration/smtpserver").Value',
'SMTPServer'

-- Save the configurations to the message object.
EXEC @hr = sp_OAMethod @iMsg, 'Configuration.Fields.Update', null

-- Set the e-mail parameters.
EXEC @hr = sp_OASetProperty @iMsg, 'To', @To
EXEC @hr = sp_OASetProperty @iMsg, 'From', @From
EXEC @hr = sp_OASetProperty @iMsg, 'Subject', @Subject

-- If you are using HTML e-mail, use 'HTMLBody' instead of 'TextBody'.
EXEC @hr = sp_OASetProperty @iMsg, 'TextBody', @Body
EXEC @hr = sp_OAMethod @iMsg, 'Send', NULL

-- Sample error handling.
IF @hr <>0
select @hr
BEGIN
EXEC @hr = sp_OAGetErrorInfo NULL, @source OUT, @description OUT
IF @hr = 0
BEGIN
SELECT @output = ' Source: ' + @source
PRINT @output
SELECT @output = ' Description: ' + @description
PRINT @output
END
ELSE
BEGIN
PRINT ' sp_OAGetErrorInfo failed.'
RETURN
END
END

-- Do some error handling after each step if you have to.
-- Clean up the objects created.
EXEC @hr = sp_OADestroy @iMsg
GO

Jul 23 '05 #1
2 8944
I'm not sure I understand you completely, but here's one possibility:

declare @Body varchar(4000)
declare @IncludeThis varchar(100)

set @Body = 'This is the body of my email, and I want my value to go
<<HERE>>'
set @IncludeThis = 'at the end of this line.'
set @Body = replace(@Body, '<<HERE>>', @IncludeThis)

exec sp_send_cdosysmail ...

By the way, sending emails from triggers is usually considered a rather
risky approach - since triggers operate in a transaction, if the email
process takes a long time or hangs, then the trigger may block other
users.

An alternative solution is to add a flag column to your registrations
table which indicates if an email has been sent, then schedule a job to
run every half hour (or whatever) and send out the emails based on the
flag.

Simon

Jul 23 '05 #2
Thanks for this. While that wouldn't work as you described (through no
fault of yours...I realize my question was a little convoluted) you
pointed me in the right direction.

I just needed to declare and set the @Body in the SProc that called the
sp_send_csosysmail procedure and then pass it on as the body of the
message. Then it's just standard T-SQL to combine a string with the
variable. It seems so simple now.

Also, thanks for the pointer about triggers as I hadn't thought of
that. I do have a trigger, but it executes a SP on the same database
that does all the actual work.

Thanks for the help!

Elliot

Simon Hayes wrote:
I'm not sure I understand you completely, but here's one possibility:

declare @Body varchar(4000)
declare @IncludeThis varchar(100)

set @Body = 'This is the body of my email, and I want my value to go
<<HERE>>'
set @IncludeThis = 'at the end of this line.'
set @Body = replace(@Body, '<<HERE>>', @IncludeThis)

exec sp_send_cdosysmail ...

By the way, sending emails from triggers is usually considered a rather risky approach - since triggers operate in a transaction, if the email process takes a long time or hangs, then the trigger may block other
users.

An alternative solution is to add a flag column to your registrations
table which indicates if an email has been sent, then schedule a job to run every half hour (or whatever) and send out the emails based on the flag.

Simon


Jul 23 '05 #3

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

0
by: Dev | last post by:
Hi Fellows, I am trying to write a User Defined Function in SQL 2000 to accept a Parameter of type Text Field and then Do a replace function to manipulate the some strings inside that text data....
1
by: Thomas Schoen | last post by:
Hi, is it possible to use a parameter of a plpgsql-function to order a selection inside the function? What i would like to do is pass a column-name/alias-name to a plpgsql function and use...
10
by: Sean Dockery | last post by:
I have the following HTML file that I've been using for testing... <html> <head> <script type="text/javascript"> <!-- function handleWindowLoad() { var items = ; for (var i = 0; i < 11; i++)...
11
by: Simon Wigzell | last post by:
My website sends automatic emails from many (25) different places. I want to send a second email by reading the parameters of the first one. I don't want to have to repeat and maintain the...
8
by: fernandezr | last post by:
I would like to use a user control as a template inside a repeater. Some of the fields in the control should be hidden depending on whether or not there is data. I'm still a ASP .Net newbie so the...
15
by: main() | last post by:
Hi all, When i compile following piece of code, # include <stdio.h> void fun(int val) { int val; /*problem is here*/ printf("%d\n",val);
16
by: hzmonte | last post by:
Correct me if I am wrong, declaring formal parameters of functions as const, if they should not be/is not changed, has 2 benefits; 1. It tells the program that calls this function that the...
1
by: jadeite100 | last post by:
Hi: I am having problem passing an xsl param variable as a parameter to a javascript function inside an xsl styelsheet. Here is my xsl stylesheet. I am trying to pass a variable called...
35
by: Rick Giuly | last post by:
Hello All, Why is python designed so that b and c (according to code below) actually share the same list object? It seems more natural to me that each object would be created with a new list...
0
by: Charles Arthur | last post by:
How do i turn on java script on a villaon, callus and itel keypad mobile phone
0
by: emmanuelkatto | last post by:
Hi All, I am Emmanuel katto from Uganda. I want to ask what challenges you've faced while migrating a website to cloud. Please let me know. Thanks! Emmanuel
0
BarryA
by: BarryA | last post by:
What are the essential steps and strategies outlined in the Data Structures and Algorithms (DSA) roadmap for aspiring data scientists? How can individuals effectively utilize this roadmap to progress...
1
by: Sonnysonu | last post by:
This is the data of csv file 1 2 3 1 2 3 1 2 3 1 2 3 2 3 2 3 3 the lengths should be different i have to store the data by column-wise with in the specific length. suppose the i have to...
0
by: Hystou | last post by:
There are some requirements for setting up RAID: 1. The motherboard and BIOS support RAID configuration. 2. The motherboard has 2 or more available SATA protocol SSD/HDD slots (including MSATA, M.2...
0
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However,...
0
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers,...
0
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows...
0
tracyyun
by: tracyyun | last post by:
Dear forum friends, With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.