Great article. I got my Database Mail up in running!
I have a question on how to approach re-sending of Failed Mails.
I'm in the process of developing an app (VB.net, ASPX, and SQL2005). The users updated some tables and I want to send out emails. I have some triggers that fire on the Update of a table.
In testing I noticed 2 emails have failed : "The mail could not be sent to the recipients because of the mail server failure. (Sending Mail using Account 1 (2007-12-20T11:48:28). Exception Message: Cannot send mails to mail server. (The specified string is not in the form required for an e-mail address.). )"
Can someone give me ideas on how resend?
I've been told that the SMTP server can go down and up like a yo-yo. My company is supported by 'HP' :P, so we have no infrastructure support
If the server is down then the Trigger is fired, I would expect the email to fail. If this is a the case, is there an error code I can trap for?
If I put the sp_send_DBMail in a Try...Catch and if there is an Error I can write an entry to an exception table, on that I can run a daily job against trying to resend the Mail. I think that would be a good idea, assuming I can trap for an error? Come to think, I would need to know a success code so I can delete the entry from the exception table is the email is sent successfully.
I'm very new to SQL Programming. My experiences are simple selects/updates and deletes with ADO.NET, so my SQL Programming experience is a Newbie.
Here is a snip-it of code from my trigger that is working.
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
Alter TRIGGER [dbo].[tr_Request_UPDATE]
ON [dbo].[tblRequest]
AFTER UPDATE
AS
--Check for Request_Status Change
--Possible Changes: Pending B3 Approval --> Approved or Denied
--Possible Changes: Pending B4 Approval --> Approved or Denied
IF NOT UPDATE(Request_Status)
RETURN
--Determine if Request_Status was changed
IF EXISTS (SELECT a.Request_StatusFROM inserted a Where a.Request_Status IN('Approved', 'Denied'))
BEGIN
--Check for Approval or Denied Status
--IF Denied, Send out Email of Denial
--IF Approval, Update tblRegistrations, Insert a new Row with the Appropiate Field.
DECLARE @Request_IDINT
DECLARE @Requester_Namenvarchar(50)
DECLARE @Request_App_IDINT
DECLARE @Request_Statusvarchar(10)
DECLARE @Bodynvarchar(255)
DECLARE @App_Ownernvarchar(50)
DECLARE @Recipientsnvarchar(50)
Select
@Request_ID=a.Request_ID
,@Requester_Name=a.Requester_Name
,@Request_App_ID=a.Request_App_ID
,@Request_Status=a.Request_Status
FROM inserted a Where a.Request_Status IN('Approved', 'Denied')
If @Request_Status='Approved'
BEGIN
--Request Approved
--Send out emails to the Requester and the Application Owner.
Select @App_Owner = App_Owner from dbo.tblApplications where App_ID = @Request_App_ID
Select @Body= 'Your Request for access to the Tool/Application has been approved by'
Select @Recipients= @Requester_Name + '; ' + @App_Owner
--Send the Mail
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'bdc-665_mail',
@recipients = 'rwiethorn@XXXX.XXXX',
--@query = 'Select * From [PSRA].[dbo].[tblRequest] Where Request_ID=12',
@subject = 'Request',
-- @attach_query_result_as_file = 1,
@Body = @Body ,
@body_format='HTML'
END
END;
Any ideas on where to look/read is appreciated,
Thanks,
rwiethorn 'AT' g Mail