MS SQL sendmail mit mehreren Empfängern

Hallo zusammen,
ich stehe vor einem kleinen Problem. Wenn ich unter MS SQL 2016 die Funktion msdb.dbo.sp_send_dbmail aufrufe, dann möchte ich mal nur einen und mal zwei Email Empfänger übergeben. Diese stammen aus unterschiedlichen gejointed Tabellen und unterschiedlichen Feldern. Die Werte habe ich vorher ermittelt und werfe das Ganze in eine nvarchar(max) Variable @recipients und baue sie mir entsprechend zusammen:
set @recipients =
(select CASE
when @AnnouncerMail is null then ‚‘’’+@EmpfaengerMail+’’’’
when @EmpfaengerMail is null then ‚‘’’+@AnnouncerMail+’’’’
when @EmpfaengerMail is not null AND @AnnouncerMail is not null then ‚‘’’+@AnnouncerMail+@Mailseperator+@EmpfaengerMail+’’’’
ELSE
CONVERT(nvarchar(max), ‚‘’’+@defaultMail+’’’’)
END
)
Je nachdem, ob AnnouncerMail oder EmpfaengerMail gefüll ist, versuche ich den String für die Übergabe in das sp_send_dbmail zu bauen, also die Hochkommatas vorne bzw hinten zu setzen. Eine Print-Ausgabe liefert mir vorher auch den korrekten Wert aus, aber wenn ich den dann als @recipients = @recipients rein werfe, dann meckert er über falsche Syntax (Syntax error in parameters or arguments. The server response was: 5.1.3 Invalid address). Das kommt vom von Mail-Deamon zurück. Gemäß der Printausgabe kommt da dann entweder ‚[email protected];[email protected]‘ raus oder halt nur die einzelne Adresse. Wenn ich ‚[email protected];[email protected]‘ als harten Wert in sp_send_dbmail @recipients eintrage, dann geht die Mail wunderbar raus.
Was passiert mit dem Wert aus @recipients denn, dass es anders ankommt im sp_send_dbmail als in der Printausgabe. OK, da mache ich noch einen convert vorher, aber auch das mag er als Empfänger(liste) nicht haben.

Ich bin für Ideen dankbar :slight_smile:

Grüße
Olli

Hallo,

ein Semikolon hat auch in einer Email-Adresse nichts zu suchen.

Das verwendet, soweit ich weiß, Outlook um zwei Adressen optisch von einander zu trennen, wird aber im darunter liegenden Protokoll (SMTP) nicht verwendet.

Ohne MS-SQL zu kennen würde ich erwarten, dass du da ein „echtes“ Array übergeben musst, keinen String mit Semikolon.

Gruß,
Steve

Du solltest dringen überdenken, das mit einem Mailaufruf zu erledigen. Dann bekommt nämlich jeder gleich alle Empfängeradressen mitgeschickt. Sowas ist mehr als unhöflich, es ist ein Verstoß gegen den Datenschutz.

Warum nicht mit jeder Adresse einzeln die Mail versenden?

Hi, das Thema Datenschutz ist geklärt, beide Adressaten sind an einem gemeinsamen Prozess beteiligt und der Kontext rechtfertigt alle Mittel.