In Dynamics AX 2012 gibt es - wie auch schon in früheren Versionen - mehrere Möglichkeiten E-Mails zu versenden.
Eine recht komfortable und bekannte Möglichkeit bietet die Tabelle SysOutgoingEmailTable und die dazugehörige Klasse SysEmailDistributor. Diese Tabelle ist über den Client unter Systemverwaltung > Periodisch > E-Mail-Verarbeitung > E-Mail-Sendestatus einsehbar.
Die Verarbeitung dieser Datensätze wird unter Systemverwaltung > Periodisch > E-Mail-Verarbeitung > Stapel initiert und setzt voraus, daß die E-Mail-Parameter unter Systemverwaltung > Einstellungen > System entsprechend gepflegt sind.
Weniger bekannt ist, daß es über dieses Framework auch möglich ist, Mails mit Attachements zu verschicken. Dazu muss eine weitere Tabelle namens SysOutgoingEmailData entsprechend befüllt werden.
Im folgenden nun ein kurzer Job, der demonstriert, wie diese Tabellen per Code befüllt werden.
Dieses Framework hat allerdings auch ein paar Nachteile. Beispielsweise kann immer nur ein Empfänger, d.h. eine Mail-Adresse angegeben werden und die Möglichkeit CCs oder BCCs anzugeben fehlt komplett.
Allerdings bietet die im Hintergrund verwendete Klasse SysMailer einige dieser Funktionen wie CCs und mehrere Mail-Empfänger. Man müsste lediglich die Tabelle SysOutgoingEmailTable um entsprechende Felder erweitern und die Methode processEmails() der Klasse SysEmailDistributor entsprechend anpassen.
Lediglich BCCs können auch durch einen solchen Eingriff in die Logik nicht ermöglicht werden.
Dieser Beitrag bezieht sich auf die Version: Dynamics AX 2012
Diese Webseite verwendet Cookies, um Benutzern einen besseren Service anzubieten. Wenn Sie weiterhin auf der Seite bleiben, stimmen Sie der Verwendung von Cookies zu.
Mehr dazu
In Dynamics AX 2012 gibt es - wie auch schon in früheren Versionen - mehrere Möglichkeiten E-Mails zu versenden.
Eine recht komfortable und bekannte Möglichkeit bietet die Tabelle SysOutgoingEmailTable und die dazugehörige Klasse SysEmailDistributor. Diese Tabelle ist über den Client unter Systemverwaltung > Periodisch > E-Mail-Verarbeitung > E-Mail-Sendestatus einsehbar.
Die Verarbeitung dieser Datensätze wird unter Systemverwaltung > Periodisch > E-Mail-Verarbeitung > Stapel initiert und setzt voraus, daß die E-Mail-Parameter unter Systemverwaltung > Einstellungen > System entsprechend gepflegt sind.
Weniger bekannt ist, daß es über dieses Framework auch möglich ist, Mails mit Attachements zu verschicken. Dazu muss eine weitere Tabelle namens SysOutgoingEmailData entsprechend befüllt werden.
Im folgenden nun ein kurzer Job, der demonstriert, wie diese Tabellen per Code befüllt werden.
{
SysOutgoingEmailTable SysOutgoingEmailTable;
SysOutgoingEmailData SysOutgoingEmailData;
SysEmailItemId nextEmailItemId;
Map map;
str SenderName;
str SenderEmail;
str ToEmail;
str Subject;
str Body;
fileName attachmentFilename;
filePath filePath;
filename filename;
filename fileExtension;
binData binData;
container embeddedBinaryData;
int i = 1;
SenderName = "Firstname Lastname";
SenderEmail = "sender@domain.net";
ToEmail = "recipient@domain.net";
Subject = "Subject";
Body = "<B>Hello World</B>";
attachmentFilename = @"\\servername\c$\file.txt";
nextEmailItemId = EventInbox::nextEventId();
SysOutgoingEmailTable.EmailItemId = nextEmailItemId;
SysOutgoingEmailTable.IsSystemEmail = NoYes::No;
SysOutgoingEmailTable.Sender = SenderEmail;
SysOutgoingEmailTable.SenderName = SenderName;
SysOutgoingEmailTable.Recipient = ToEmail;
SysOutgoingEmailTable.Subject = SysEmailMessage::stringExpand(Subject, map);
SysOutgoingEmailTable.Priority = eMailPriority::Normal;
SysOutgoingEmailTable.WithRetries = false;
SysOutgoingEmailTable.RetryNum = 0;
SysOutgoingEmailTable.UserId = curUserId();
SysOutgoingEmailTable.Status = SysEmailStatus::Unsent;
SysOutgoingEmailTable.Message = Body;
SysOutgoingEmailTable.LatestStatusChangeDateTime = DateTimeUtil::getSystemDateTime();
SysOutgoingEmailTable.insert();
// Attachement
if (attachmentFilename && WinAPI::fileExists(attachmentFilename))
{
if (WinAPI::fileSize(attachmentFilename) < (SysEmailParameters::find().maxEmailAttachmentSize * 1000000))
{
binData = new BinData();
binData.loadFile(attachmentFilename);
embeddedBinaryData = binData.getData();
SysOutgoingEmailData.clear();
SysOutgoingEmailData.EmailItemId = SysOutgoingEmailTable.EmailItemId;
SysOutgoingEmailData.DataId = i; // Counter for file(s)
SysOutgoingEmailData.EmailDataType = SysEmailDataType::Attachment;
SysOutgoingEmailData.Data = embeddedBinaryData;
[filePath, filename, fileExtension] = Global::fileNameSplit(attachmentFilename);
SysOutgoingEmailData.FileName = filename;
SysOutgoingEmailData.FileExtension = fileExtension;
SysOutgoingEmailData.insert();
}
}
}
Dieses Framework hat allerdings auch ein paar Nachteile. Beispielsweise kann immer nur ein Empfänger, d.h. eine Mail-Adresse angegeben werden und die Möglichkeit CCs oder BCCs anzugeben fehlt komplett.
Allerdings bietet die im Hintergrund verwendete Klasse SysMailer einige dieser Funktionen wie CCs und mehrere Mail-Empfänger. Man müsste lediglich die Tabelle SysOutgoingEmailTable um entsprechende Felder erweitern und die Methode processEmails() der Klasse SysEmailDistributor entsprechend anpassen.
Lediglich BCCs können auch durch einen solchen Eingriff in die Logik nicht ermöglicht werden.