This uses a predefined email message and replaces placeholders in the message with information from the shipment. Either add as an action on Shipments or as an event after shipment finalisation.
Process Event Code
DECLARE @Shipment bigint, @SystemType char(1)
SELECT @Shipment = Shipment, @SystemType = SystemType
FROM Shipments WHERE Shipment = [Identifier]
IF @SystemType <> 'F'
BEGIN
select 'Stop','This shipment has not been finalised'
END
ELSE
BEGIN
DECLARE @EmailAddress nvarchar(400)
SELECT
@EmailAddress = ISNULL(SalesOrders.NotifyShip,Customers.EmailAddress)
FROM
Shipments
INNER JOIN SalesOrders ON SalesOrders.SalesOrder = Shipments.SalesOrder
INNER JOIN Customers ON Customers.Customer = Shipments.Customer
WHERE Shipment = @Shipment
-- Select predefined message
DECLARE @Body nvarchar(max), @Subject nvarchar(1000)
select @Body = Body, @Subject = Subject from emailmessages WHERE EmailMessageId = 'SHIPHTML'
-- create replacements table
DECLARE @X_REPLACEMENTS TABLE (
string NVARCHAR(200),
replacement NVARCHAR(4000));
-- add replacement identifiers
INSERT INTO @X_REPLACEMENTS SELECT '{%CUSTOMERNAME%}',CustomerName FROM Shipments INNER JOIN Customers ON Customers.Customer = Shipments.Customer WHERE Shipment = @Shipment;
INSERT INTO @X_REPLACEMENTS SELECT '{%ORDERNUMBER%}',ISNULL(SalesOrderId,'') FROM Shipments INNER JOIN SalesOrders ON SalesOrders.SalesOrder = Shipments.SalesOrder WHERE Shipment = @Shipment;
INSERT INTO @X_REPLACEMENTS SELECT '{%DESPATCHDATE%}',ISNULL(EffectiveDate,'') FROM Shipments WHERE Shipment = @Shipment;
INSERT INTO @X_REPLACEMENTS SELECT '<<freightmethodname>>',ISNULL(FreightMethodDescription,'our courier') FROM Shipments INNER JOIN FreightMethods ON FreightMethods.FreightMethod = Shipments.FreightMethod WHERE Shipment = @Shipment;
DECLARE @ShippingAddress nvarchar(4000)
SELECT @ShippingAddress =
CASE WHEN LTRIM(ISNULL(DeliveryAddresses.DeliveryName,'')) <> '' THEN ISNULL(DeliveryAddresses.DeliveryName,'') + '<br>' ELSE '' END
+ CASE WHEN LTRIM(ISNULL(DeliveryAddresses.Address,'')) <> '' THEN ISNULL(DeliveryAddresses.Address,'') + '<br>' ELSE '' END
+ CASE WHEN LTRIM(ISNULL(DeliveryAddresses.City,'')) <> '' THEN ISNULL(DeliveryAddresses.City,'') + '<br>' ELSE '' END
+ CASE WHEN LTRIM(ISNULL(DeliveryAddresses.Region,'')) <> '' THEN ISNULL(DeliveryAddresses.Region,'') + '<br>' ELSE '' END
+ CASE WHEN LTRIM(ISNULL(DeliveryAddresses.PostalCode,'')) <> '' THEN ISNULL(DeliveryAddresses.PostalCode,'') + '<br>' ELSE '' END
+ CASE WHEN LTRIM(ISNULL(Countries.CountryId,'')) <> '' THEN ISNULL(Countries.CountryId,'') + '<br>' ELSE '' END
FROM Shipments
INNER JOIN DeliveryAddresses ON DeliveryAddresses.DeliveryAddress = Shipments.DeliveryAddress
LEFT JOIN Countries ON DeliveryAddresses.Country = Countries.Country
WHERE Shipment = @Shipment
INSERT INTO @X_REPLACEMENTS SELECT '{%SHIPPINGADDRESS%}',ISNULL(@ShippingAddress,'')
DECLARE @BillingAddress nvarchar(4000)
SELECT @BillingAddress =
CASE WHEN LTRIM(ISNULL(Customers.CustomerName,'')) <> '' THEN ISNULL(Customers.CustomerName,'') + '<br>' ELSE '' END
+ CASE WHEN LTRIM(ISNULL(Customers.Address,'')) <> '' THEN ISNULL(Customers.Address,'') + '<br>' ELSE '' END
+ CASE WHEN LTRIM(ISNULL(Customers.City,'')) <> '' THEN ISNULL(Customers.City,'') + '<br>' ELSE '' END
+ CASE WHEN LTRIM(ISNULL(Customers.Region,'')) <> '' THEN ISNULL(Customers.Region,'') + '<br>' ELSE '' END
+ CASE WHEN LTRIM(ISNULL(Customers.PostalCode,'')) <> '' THEN ISNULL(Customers.PostalCode,'') + '<br>' ELSE '' END
+ CASE WHEN LTRIM(ISNULL(Countries.CountryId,'')) <> '' THEN ISNULL(Countries.CountryId,'') + '<br>' ELSE '' END
FROM Shipments
INNER JOIN Customers ON Customers.Customer = Shipments.Customer
LEFT JOIN Countries ON Customers.Country = Countries.Country
WHERE Shipment = @Shipment
INSERT INTO @X_REPLACEMENTS SELECT '{%BILLINGADDRESS%}',ISNULL(@BillingAddress,'')
DECLARE @OrderDetail nvarchar(4000)
SELECT @OrderDetail = ISNULL(@OrderDetail,'') + CAST(FLOOR(SalesOrderItems.Quantity) AS varchar(10)) + ' of ' + ISNULL(SalesOrderItems.ItemDescription,'') + '<BR>'
FROM Shipments
INNER JOIN SalesOrders ON SalesOrders.SalesOrder = Shipments.SalesOrder
INNER JOIN SalesOrderItems ON SalesOrderItems.SalesOrder = SalesOrders.SalesOrder
WHERE Shipment = @Shipment AND SalesOrderItems.ItemType = 'P'
INSERT INTO @X_REPLACEMENTS SELECT '{%PRODUCTLIST%}',ISNULL(@OrderDetail,'')
INSERT INTO @X_REPLACEMENTS SELECT '<<trackingurl>>',REPLACE(ISNULL(TrackingURL,''),'{0}',ISNULL(DeliveryReference,'')) FROM Shipments INNER JOIN FreightMethods ON FreightMethods.FreightMethod = Shipments.FreightMethod WHERE Shipment = @Shipment;
INSERT INTO @X_REPLACEMENTS SELECT '{%SHIPPINGNOTE%}','';
-- replace placeholders in the body and subject
SELECT @Body = REPLACE(@Body,string,replacement)
FROM @X_REPLACEMENTS;
SELECT @Subject = REPLACE(@Subject,string,replacement)
FROM @X_REPLACEMENTS;
IF @EmailAddress <> ''
BEGIN
DECLARE @mailitem_id int
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'WINMAN',
@recipients = @EmailAddress,
@copy_recipients = '',
@blind_copy_recipients = '',
@subject = @Subject,
@body = @Body,
@body_format = 'HTML',
@file_attachments = '',
@importance = 'NORMAL',
@mailitem_id = @mailitem_id OUTPUT
IF @mailitem_id > 0
BEGIN
select 'InformationCanHide','ShipEmailCustomerOK','Email Sent Successfully'
END
END
END
HTML Email
<TABLE border=0 cellSpacing=0 cellPadding=5 width=600>
<TBODY>
<TR>
<TD style="BORDER-BOTTOM: black 1px solid; PADDING-BOTTOM: 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; BORDER-TOP: black 1px solid; PADDING-TOP: 10px" vAlign=middle colSpan=2>
<P style="FONT-SIZE: 120%; FONT-WEIGHT: bold">Your Order Has Been Despatched</P></TD></TR>
<TR>
<TD style="TEXT-ALIGN: left"><BR>
<TABLE width="100%">
<TBODY>
<TR>
<TD style="TEXT-ALIGN: left" vAlign=bottom><STRONG>Order number:</STRONG> </TD>
<TD style="TEXT-ALIGN: right; PADDING-RIGHT: 10px">{%ORDERNUMBER%} </TD></TR></TBODY></TABLE><BR></TD>
<TD style="TEXT-ALIGN: left"><BR>
<TABLE width="100%">
<TBODY>
<TR>
<TD style="TEXT-ALIGN: left" vAlign=bottom><STRONG>Despatch date:</STRONG> </TD>
<TD style="TEXT-ALIGN: right; PADDING-RIGHT: 10px">{%DESPATCHDATE%} </TD></TR></TBODY></TABLE><BR></TD></TR>
<TR>
<TD style="BORDER-BOTTOM: black 1px solid; TEXT-ALIGN: left; VERTICAL-ALIGN: top; BORDER-TOP: black 1px solid; PADDING-TOP: 10px" width="50%"><STRONG>Billing Address</STRONG> <BR><BR>
<TABLE>
<TBODY>
<TR>
<TD style="PADDING-LEFT: 10px">{%BILLINGADDRESS%} </TD></TR></TBODY></TABLE><BR></TD>
<TD style="BORDER-BOTTOM: black 1px solid; TEXT-ALIGN: left; VERTICAL-ALIGN: top; BORDER-TOP: black 1px solid; PADDING-TOP: 10px" width="50%"><SPAN style="FONT-WEIGHT: bold">Shipping Address</SPAN> <BR><BR>
<TABLE>
<TBODY>
<TR>
<TD style="PADDING-LEFT: 10px">{%SHIPPINGADDRESS%} </TD></TR></TBODY></TABLE><BR></TD></TR>
<TR>
<TD colSpan=2><BR>The following items were despatched on this shipment<BR></TD></TR>
<TR>
<TD style="BORDER-BOTTOM: black 1px solid; TEXT-ALIGN: left; PADDING-BOTTOM: 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 10px" colSpan=2>{%PRODUCTLIST%} </TD></TR>
<TR>
<TD style="TEXT-ALIGN: left; PADDING-TOP: 10px" colSpan=2>
<DIV style="TEXT-ALIGN: right"> </DIV></TD></TR>
<TR>
<TD colSpan=2>
<TABLE width="100%">
<TBODY>
<TR>
<TD style="TEXT-ALIGN: left">{%SHIPPINGNOTE%} </TD></TR></TBODY></TABLE></TD></TR>
<TR>
<TD style="FONT-SIZE: 80%; PADDING-TOP: 20px" colSpan=2>My Company<BR>Unit 99, This Industrail Park,<BR>High Street,<BR>London<BR>SW1 2AB</TD></TR>
</TBODY>
</TABLE>