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