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

// 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);
			}
		}
	}
}

Last updated