Report Server - Mailversand eines Reports

Hallo,
und noch eine Frage zum Report Server.

Dieser kann ja auch EMails versenden. So wie ich das verstanden habe, allerdings nur die automatischen, zeitgesteuerten Reports.

Oder gibt es dafür auch eine API-Funktion über die ich manuell einen Report erstellen kann, der dann automatisch an eine per Parameter übergebene Mail-Adresse versendet wird oder alternativ an eine Mail-Adresse, die sich in den Daten, die dem Report übergeben wurden, befinden.

Gerade habe ich gedacht, das ginge ggf. über die API indem man einen geplanten Bericht startet, allerdings kann man bei einem geplanten Bericht keine dynamischen Mail-Adresse vorgeben, die müssen bei der Planung des Berichtes fest vorgegeben werden. Sehe ich das richtig?

Vorab vielen Dank für die Rückmeldung.

Viele Grüße
Dominik Moersch

Hallo!
Ja genau, Mailversand ist im Report Server nur eine Verteilmöglichkeit (Aktion) bei den geplaten Berichten. Mit der API kannst du aber eine PDF erzeugen.
Allerings bist du für die weitere Verarbeitung dann selbst verantwortlich.

Grüße
HP

Guten Morgen Dominik, du wirst hier und da nicht an einer kleinen Funktion (selber programmieren) nicht vorbei kommen, Hans Peter hat dir ja hierzu schon geantwortet.
Eine kleine Idee, exportiere einen geplanten Bericht in einen Ordner und führe ein selbstgeschriebenes Script aus (Trigger das den Ordner beobachtet oder alle x Minuten rein schaut), wenn da was drin ist, Datei öffne, eMail extrahieren und versenden, irgendwie sowas :slight_smile:

Viel Erfolg.

Hallo,
danke für die Rückmeldung.

Schade, dass das nicht geht. Dann muss ich mal schauen, wie ich das umgesetzt bekomme mit einem zusätzlichen Skript, Programm oder was auch immer.

Viele Grüße
Dominik Moersch

HI Dominik, check mal dein Postfach, hab dir mal einen Ansatz geschickt, vielleicht hilft es ja.
Viel Erfolg

Hallo,
hierzu dann jetzt auch mal noch ein Lösungsansatz. Inwiefern der für andere brauchbar ist und mit anderen Mailprogrammen funktioniert weiß ich nicht, aber für mich ist die Lösung so erst einmal einsetzbar.

Statt direkt eine Mail zu versenden bastel ich mir eine EML-Datei zusammen, die dann über den Browser heruntergeladen wird. Die heruntergeladene EML-Datei öffnet der Browser dann automatisch (in Chrome) oder teilautomatisch (in Firefox, hier muss man noch einmal auf “Öffnen” klicken) in Thunderbird. Dort wird dann eine EMail angezeigt mit fertigem Betreff, Mailempfänger und dem Report als PDF im Anhang.

Die Mail kann man dann über die “Weiterleiten”-Funktion an den eigentlichen Empfänger versenden.

Nachteil an der Sache ist, das man noch ein paar Klicks machen muss um die Mail am Ende final zu versenden.

Allerdings ist mir der manuelle Zwischenschritt über das Mailprogramm des Absenders gar nicht so unrecht, weil man dann ggf. noch den Text individuell anpassen kann und die Mail am Ende auch im Postausgang des Absenders zu finden ist.

Hier der Code in Javascript für diese Lösung:

let reportID = "CD9E5E22-2F3D-4AD0-8562-72C27198C7BF"; //Fernwartungsprotokoll
let ClientID = "Client ID";
let ClientToken = "Client Token";
let ReportServerURL = "http://combitReportServerName/combitReportServer/api/v1/report/";

const myHeaders = new Headers();
myHeaders.append("X-ReportServer-ClientID", ClientID);
myHeaders.append("X-ReportServer-ClientToken", ClientToken);

const response = await fetch(ReportServerURL + reportID + "/export?$ReportPara=40", {
  method: "GET",
  headers: myHeaders,
});

const blob = await response.blob();
const reader = new FileReader;

await reader.readAsDataURL(blob);

reader.onload = async function () {
	
	let emlString;
	let actTime = new Date(Date.now());
	
	emlString = 'Content-Type: multipart/mixed; boundary="------------JD9kJOe3TmqT3tn5Zps2WnF8" ' + '\n' +
				'Date: ' + actTime.toString() + '\n' +
				'To: ' + Mailempfänger + '\n' +
				'Subject: Betreff '+ '\n' +
				'\n' +
				'This is a multi-part message in MIME format.' + '\n' +
				'--------------JD9kJOe3TmqT3tn5Zps2WnF8' + '\n' +
				'Content-Type: text/plain; charset=UTF-8; format=flowed' + '\n' +
				'Content-Transfer-Encoding: 7bit' + '\n' +
				'\n' +
				'Mailbody' + '\n' +
				'\n' +
				'--------------JD9kJOe3TmqT3tn5Zps2WnF8' + '\n' +
				'Content-Type: application/pdf; name="Report"' + '\n' +
				'Content-Disposition: attachment; filename="Report.pdf"' + '\n' +
				'Content-Transfer-Encoding: base64' + '\n' +
				'\n' +
				reader.result.replace("data:application/pdf;base64,", "")+ '\n' +
				'\n' +
				'--------------JD9kJOe3TmqT3tn5Zps2WnF8--' + '\n';
	
	let newBlob = new Blob([emlString], {
		type: "application/octet-stream"
	});
	let element = document.createElement('a');
	element.href = await URL.createObjectURL(newBlob);
	element.setAttribute('download', "EMail.eml");

	element.style.display = 'none';
	document.body.appendChild(element);
	element.click();
	document.body.removeChild(element);

	URL.revokeObjectURL(blob);
	
};

Da kann man sicherlich auch noch an einigen Stellen das ganze optimieren, wenn man Ahnung von Javascript hat, aber so funktioniert es auf jeden Fall auch schon mal.

VG
Dominik