USP_TRANSACTIONALEMAIL_CHECKINVALIDACCOUNTS
Verifies transactional email recipients are not flagged as invalid
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@INVALIDJOBS | xml | INOUT |
Definition
Copy
create procedure dbo.USP_TRANSACTIONALEMAIL_CHECKINVALIDACCOUNTS
(
@INVALIDJOBS xml output
)
as
begin
declare @EMAILADDRESSFIELD nvarchar(255);
declare @INVALIDEMAILS table
(
ID nvarchar(36), -- we use this as a string because we have to do an string xquery later which is case sensitive and we need to be sure what is returned
ADDRESS nvarchar(255)
);
-- using a cursor here due to the way we retrieve the data with xquery. should never be that many loops anyway.
declare EMAILADDRESSCURSOR cursor local fast_forward for
select distinct S.EMAILADDRESSFIELDNAME from dbo.EMAILSTATUSTRANSACTIONAL S
inner join dbo.EMAILQUEUETRANSACTIONAL Q on Q.ID = S.EMAILQUEUETRANSACTIONALID;
open EMAILADDRESSCURSOR;
fetch next from EMAILADDRESSCURSOR into @EMAILADDRESSFIELD;
while (@@FETCH_STATUS = 0)
begin
insert into @INVALIDEMAILS (ID, ADDRESS)
select upper(cast(Q.ID as nvarchar(36))), recipientdata.value('(//*[local-name()=sql:variable("@EMAILADDRESSFIELD")])[1]','nvarchar(255)') [RECIPIENT] from EMAILQUEUETRANSACTIONAL Q
inner join dbo.EMAILSTATUSTRANSACTIONAL S on Q.ID = S.EMAILQUEUETRANSACTIONALID
where S.EMAILADDRESSFIELDNAME = @EMAILADDRESSFIELD;
fetch next from EMAILADDRESSCURSOR into @EMAILADDRESSFIELD;
end
close EMAILADDRESSCURSOR;
deallocate EMAILADDRESSCURSOR;
set @INVALIDJOBS = (select I.ID, I.ADDRESS from @INVALIDEMAILS I inner join dbo.EMAILINVALIDRECIPIENT R on I.ADDRESS = R.ADDRESS and R.ISBLACKLISTED = 1
for xml raw('JOB'),type,elements,root('EMAIL'),binary base64);
end