PRINT+PLUS
  • Einleitung
  • Einrichtung
    • Installation
  • Aktualisierung
    • Aktualisierungseinführung
  • Lizenzierung
    • Lizenzierungseinführung
  • Funktionsweise von PRINT+PLUS
    • Einführung Funktionsweise
  • Gestalten von Vorlagen
    • Intro Vorlagen
    • Beispiel mit Rechnung
    • Formatierung
    • Spezielle Platzhalter für Datum, Ja/Nein-Felder, Bilder und HTML
    • Platzhalter für die Benutzerattribute von cobra CRM
    • Eigene Platzhalter
  • Einrichtung von Ausgabeformaten
    • Intro
    • Alle Einstellungen eines Ausgabeformats im Detail
    • Register "Allgemeine Konfiguration"
    • Register "Ausgangstabelle (Current)"
    • Register "Ausgangs-Vorlage"
    • Register "Übergeordnete Tabellen (Parent)"
    • Register "Untergeordnete Tabellen (Children)"
    • Register "Dokumente speichern"
    • Register "Filter-Dialog"
    • Register "Ergebnis-Verhalten"
    • Register "Skripte"
  • Ausgabe ausführen
    • Intro Ausgabe ausführen
  • AUSGABEN PER TASK AUSFÜHREN
    • Aufgaben dem Task zuweisen
    • Windows Aufgabenplanung für den Task einrichten
    • Besonderheiten in Skripten
  • Eingabemasken Steuerelement
  • Intro Eingabemasken Steuerelement
    • Steuerelement hinzufügen
  • Einbindung von Print+Plus in cobra Kampagnen
  • Intro Einbindung von Print+Plus in cobra Kampagnen
  • Grundlagen Skripting
    • C#
    • Skript-Events
    • Kontexte
    • Geladene Daten verwenden
    • Geladene Daten verändern
    • Datensätze anlegen
    • Eingabemaske öffnen
    • Eigene Werte ergänzen (Custom Values)
  • Beispielskripte
    • Nummer vergeben
    • PDF-Formulare füllen
    • PDF-Dokumente zusammenfügen
    • Generiertes Dokument via SMTP versenden
    • Weitere Ausgabe starten
    • Vorlage aus DMS-Feld holen
    • Felder für CRYPTO+PLUS verschlüsseln
    • Benutzerabhängige Drucker verwenden
    • Bilder in E-Mails einbinden
    • Zahlen in Worten ausschreiben
    • Datensatz-Bilder aus cobra einbetten
    • Ergebnisdokumente kopieren
    • Regionsspezifische Ausgabeformate
    • Andere Datenquelle-Objekte nutzen
    • DocuSign Integration
  • FAQs
    • Fehlermeldung Template konnte nicht geöffnet werden
    • DevExpress-Word-Exporter
      • Bilder in Vorlage
      • Bekannte Einschränkungen
      • Hinweise für Entwickler
  • Zusätzliches Tool im Zusammenhang mit PRINT+PLUS
    • Intro Zusätzliches Tool
Powered by GitBook
On this page
  • Konfiguration
  • Ideen
  • Skript mit Standard-Authentifizierung mit Username und Passwort
  • Skript mit moderner Authentifizierung mit OAuth2
  1. Beispielskripte

Generiertes Dokument via SMTP versenden

Dieses Skript zeigt, wie ein generiertes Dokument über einen SMTP-Server versendet werden kann.

Konfiguration

  • Es handelt sich um einen Exporter der ein Dokument generiert (Word, Excel, Text).

  • Das Skript wird als AfterClosingDocument ausgeführt.

Ideen

  • Im AfterClosingDocument-Event ist das Dokument fertig generiert und abgespeichert und geschlossen. Es kann daher einfach via SMTP versendet werden.

  • In diesem Beispiel wird eine feste Text-Vorlage verwendet.

  • Grundsätzlich kann dies durch einen Text-Exporter erweitert werden, dann müsste zuerst das Dokument generiert werden und in einem Dokumentfeld hinterlegt werden. Im Anschluss daran könnte via Text-Exporter eine personifizierte Mail generiert werden.

Skript mit Standard-Authentifizierung mit Username und Passwort

// Version 5
namespace Ruthardt.PrintPlus.Skripting
{
	using System;
	using System.Net;
	using System.Net.Mail;
	using Ruthardt.CobraBase.Functions.Access.Ado;
	using Ruthardt.PrintPlus.Model.Interfaces;

	/// <summary>
	/// Versendet das aktuelle Dokument im Anhang einer Mail via SMTP.
	/// "ActionType": "AfterClosingDocument"
	/// </summary>
	public class DokumentPerSMTP : IScriptAction
	{
		public void Execute(IPrintContext printContext, ICurrentContext currentContext, IChildContext childContext)
		{
			try
			{
				// AdoView ist hier Adresse
				var adresse = currentContext.Data;
				
				// Empfänger aus der Adresse auslesen
				var receiver = adresse.GetStringValue("TODO Emailfeld");
			
				// Mailversand
				using (var message = new MailMessage
				{
					Subject = "TODO Betreff",
					Body = "TODO HTML Mailtext",
					From = new MailAddress("TODO Absender"),
					IsBodyHtml = true
				})
				{
					message.To.Add(receiver);
					message.Attachments.Add(new Attachment(currentContext.DocumentFileName.FullName));
					
					var smtpServer = "TODO SMTP Server";
					var smtpPort = 25; //"TODO SMTP Port";
					var smtpUser = "TODO SMTP User";
					var password = "TODO SMTP Password";

					using (var smtpClient = new SmtpClient(smtpServer)
					{
						EnableSsl = true,
						Port = smtpPort,
						Credentials = new NetworkCredential(smtpUser, password)
					})
					{
						var securityProtocol = (int)System.Net.ServicePointManager.SecurityProtocol;

						// 0 = SystemDefault in .NET 4.7+
						if (securityProtocol != 0)
						{
							// Auch in älteren .NET Versionen nur noch TLS 1.2 verwenden; ältere TLS-Versionen machen Probleme
    						System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12;
						}
						smtpClient.Send(message);
					}
				}
			}
			catch (Exception ex)
			{
				// Fehler anzeigen
				printContext.WaitFormManager.ShowMessageBox("Es ist ein Fehler aufgetreten: " + ex.Message);
			}
		}
	}
}

Skript mit moderner Authentifizierung mit OAuth2

// Version 6
namespace Ruthardt.PrintPlus.Skripting
{
	using System;
	using System.IO;
	using Ruthardt.PrintPlus.Model.Interfaces;
	using Ruthardt.CobraBase.Functions.Access.Ado;
	using MailKit.Net.Smtp;
	using MailKit.Security;
	using Microsoft.Identity.Client;
	using MimeKit;

	public class ExampleScript : IScriptAction
	{
		public void Execute(IPrintContext printContext, ICurrentContext currentContext, IChildContext childContext)
		{
			// Zugriff auf den aktuellen Datensatz
			var adresse = currentContext.Data;
			
			// Empfänger aus der Adresse auslesen
			InternetAddress receiverMail = InternetAddress.Parse(adresse.GetStringValue("TODO Emailfeld"));
			
			// Settings für die Authentifikation egänzen:
			var accountEmailAddress = "TODO Account E-Mailadresse (Absender)"
			InternetAddress senderMail = InternetAddress.Parse(accountEmailAddress);
						
			var clientId = "TODO ClientID/ApplicationID";
			var tenantId = "TODO TenantID";
			var clientSecret = "TODO ClientSecret";
			var host = "smtp.office365.com"; //"TODO host";
			var port = 587; //"TODO port";
			var secureSocketOption = SecureSocketOptions.StartTls; //"TODO SecureSocketOption";
								
			// Nachricht zusammenbauen mit Anhang
			var builder = new BodyBuilder();
			builder.TextBody = "TODO Plaintext-Nachricht";
			builder.HtmlBody = "TODO HTML-Nachricht";
			
			// Anhang erstellen
			var attachment = new MimePart()
			{
			    Content = new MimeContent(File.OpenRead(currentContext.DocumentFileName.FullName)),
			    ContentDisposition = new ContentDisposition(ContentDisposition.Attachment),
			    ContentTransferEncoding = ContentEncoding.Base64,
			    FileName = Path.GetFileName(currentContext.DocumentFileName.FullName)
			};
			
			// Anhang zum BodyBuilder hinzufügen
			builder.Attachments.Add(attachment);
			
			//Nachricht erstellen
			MimeMessage message = new MimeMessage();
			message.To.Add(receiverMail);
			message.From.Add(senderMail);
			message.Subject = "TODO Betreff";
			message.Body = builder.ToMessageBody();
			
			//Authentifizierung, Verbindung und Nachricht versenden
			var confidentialClientApplication = ConfidentialClientApplicationBuilder.Create(clientId)
																					.WithAuthority($"https://login.microsoftonline.com/{tenantId}/v2.0")
																					.WithClientSecret(clientSecret)
																					.Build();
			
			var scopes = new[] {
			"https://outlook.office365.com/.default"
			};
			
			var task = confidentialClientApplication.AcquireTokenForClient(scopes).ExecuteAsync();
			task.Wait();
			var authToken = task.Result;
			
			var oauth2 = new SaslMechanismOAuth2(accountEmailAddress, authToken.AccessToken);
			
			using (var client = new SmtpClient())
			{
							client.Connect(host, port, secureSocketOption);
							client.Authenticate(oauth2);
							client.Send(message);
							client.Disconnect(true);
			}
		}
	}
}
PreviousPDF-Dokumente zusammenfügenNextWeitere Ausgabe starten

Last updated 1 month ago

Im Skript müssen folgende Referenzen hinzugefügt werden:

https://download.ruthardt.eu/plustools/printplus80/Mailversand_OAuth2_dlls.zip