2016-08-10 3 views
0

Ich sende eine E-Mail mit sp_send_dbmail auf MSSQL Server 2012 im HTML-Format.Ist es möglich, SQL-Variablen in HTML-E-Mails zu verwenden, wenn sp_send_dbmail verwendet wird?

Dies funktioniert perfekt, aber ich möchte eine SQL-Variable in den HTML-E-Mail-Body-Inhalt einfügen können. Zum Beispiel würde ich erwarten, dass der Code wie unten aussieht, aber aus einem unbekannten Grund scheint das Einfügen der Variablen den HTML-Code zu unterbrechen. Ich vermute, dass dies passiert, weil beim Einfügen der Variablen alle verbleibenden HTML-Tags automatisch geschlossen werden.

DECLARE @email_body1 NVARCHAR(max); 
DECLARE @email_body2 NVARCHAR(max); 
DECLARE @fundraising_link NVARCHAR(max); 
DECLARE @firstname NVARCHAR(max); 
DECLARE @email_leadid INT; 
DECLARE @send_email CHAR(5); 
DECLARE @email_address NVARCHAR(max); 
DECLARE @segment NVARCHAR(max); 
DECLARE @variable VARCHAR(max); 
SET @variable = '''Paul'''; 
SET @email_body1 = 

' 

<!DOCTYPE html><html><head> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> 
<meta name="viewport" content="width=device-width"> 
</head> 
<body> 
Hello ' + @variable + ' ....... REST OF BODY CONTENT. 
</body></html> 

'; 

SET @email_body2 = @email_body1 

EXEC msdb.dbo.sp_send_dbmail 
@recipients = '[email protected]', 
@blind_copy_recipients = '[email protected]', 
@subject = 'email subject' 
@body = @email_body2, 
@body_format = 'HTML', 
@profile_name = 'HTML EMAIL'; 

Mache ich etwas falsch? Oder gibt es einen leichteren Weg, um das zu erreichen, was ich brauche?

+0

Sie verketten nicht korrekt. Du solltest folgendes machen: ''Hallo' + @variable + '.....''. Außerdem müssen Sie das Angebot für Ihren @ @ subject-Wert schließen. – Nicarus

+0

Ups ... Ich habe das behoben, das Problem besteht jedoch weiterhin. – mrgunston

+0

Erhalten Sie einen Fehler? Wenn ja, was ist die Nachricht? - Oder sendet es, aber der HTML-Code ist in der gelieferten E-Mail nicht richtig strukturiert? – Nicarus

Antwort

-1
SET @email_body1 = "Hello <Customer>, Rest of body" 

Dann

SET @email_body1 = REPLACE(@email_body1, '<Customer>', @CustomerName) 

wo @CustomerName ist NVARCHAR Variable mit Kundennamen

sollten beachten, dass Tag eindeutig sein, z.B.

Alternative Lösung (wie in einer anderen Antwort erwähnt) - verwenden Sie einfach "+"

+0

Die Textnachricht kann von Content-Team erstellt werden, nicht von Entwicklern. Wenn Sie Tags + REPLACE verwenden, weiß dev, was Sie anstelle der einzelnen Variablen eingeben müssen. Wenn die Vorlage wie folgt aussieht: "Hallo% s, Willkommen bei% s und% s, wir möchten% s auf% s hochstufen", kann es schwierig sein, sie zu lesen. Wie auch immer ... viele Probleme können durch verschiedene Methoden mit gleicher oder ähnlicher Effizienz gelöst werden. Nur eine alternative Lösung. Aus meiner Erfahrung funktioniert "Tags + ersetzen" gut. – Anton

+0

Sie liegen falsch. REPLACE - Ersetzt alle Vorkommen eines angegebenen Zeichenfolgenwerts durch einen anderen Zeichenfolgenwert. https://msdn.microsoft.com/en-au/library/ms186862.aspx – Anton

+0

Nicarus, warum hast du Nachrichten entfernt und bearbeitet, nachdem ich meine Kommentare hinzugefügt habe? Das ist nicht cool. – Anton

0

Ich glaube, Sie + fehlen, sollte so etwas wie dieses

Hallo '+ @variable +' ....... REST DER KÖRPERGEHALT sein.

+0

Ups ... Ich habe das behoben, das Problem besteht jedoch weiterhin. – mrgunston

Verwandte Themen