Versenden von E-Mails mit mehreren Anhängen aus der Codeunit 397

Dieser Beitrag behandelt die Codeunit 397 Mail.

Die Standard Codeunit 397 ist so konzipiert, dass nur ein Anhang versendet werden kann. Es gibt Situationen da möchte man mehr als einen Anhang über diese Codeunit versenden.

Das kann relativ einfach durch Erweiterungen des bestehenden Codes erreicht werden.

In diesem Beispiel habe ich die benötigten Funktionen aus der Codeunit 397 heraus kopiert um diese Funktion in einer neuen Codeunit zu testen.

Ich habe mir für diese Zwecke eine neue Codeunit erstellt mit den folgenden kopierten globalen Variablen aus den Codeunit 397:

OApplication Automation 'NS Outlook Synchronization Handler'.OApplication
OAttachment Automation 'NS Outlook Synchronization Handler'.OAttachment
OAttachments Automation 'NS Outlook Synchronization Handler'.OAttachments
OSendMail Automation 'NS Outlook Synchronization Handler'.OSendMail BSTRConverterBody Automation 'Navision Attain Hash 1.0'.BSTRConverter
BSTRConverterAttachFileName Automation 'Navision Attain Hash 1.0'.BSTRConverter
HideDialog Boolean
ErrorNo Integer
     

Zusätzliche habe ich eine wie in Codeunit 397 eine neue Funktion Namens NewMessage hinzugefügt mit den folgenden lokalen Parametern:

Var Name DataType Subtype Length
Nein ToName Text 80
Nein CCName Text 80
Nein Subject Text 260
Nein Body Text 260
Nein AttachFileName Text 260
Nein OpenDialog Boolean
Nein AttachFileName2 Text 260

Die Erweiterungen habe ich an dieser Stelle Rot markiert.

OnRun() // Der Aufruf der NewMessage Funktion beinhlatet die folgenden Parameter ToName, CCName, Subject, Body, Attachment1, Open Dialog und Attachment2. Die Attachments habe ich zur verreinfachung von der Festplatte geladen.
NewMessage('Info@contoso.info','','Test-Email','Hallo Welt','d:Attachment1.txt',FALSE,'d:Attachment2.txt');

Trigger NewMessage:
IF ISCLEAR(OApplication) THEN
CREATE(OApplication);

IF (NOT OApplication.Logon(TRUE,'','',FALSE,FALSE)) THEN BEGIN
OApplication.Logoff;
EXIT
END;

IF ISCLEAR(OSendMail) THEN
CREATE(OSendMail);

ErrorNo := 0;

OSendMail."To" := ToName;
OSendMail.CC := CCName;
OSendMail.Subject := Subject;

IF ISCLEAR(BSTRConverterBody) THEN
CREATE(BSTRConverterBody);

IF Body <> '' THEN BEGIN
BSTRConverterBody.ResetBSTR;
BSTRConverterBody.AppendNextStringPortion(Body);
END;
OSendMail.Body := BSTRConverterBody;

IF ISCLEAR(BSTRConverterAttachFileName) THEN
CREATE(BSTRConverterAttachFileName);

IF AttachFileName <> '' THEN BEGIN
BSTRConverterAttachFileName.ResetBSTR;
BSTRConverterAttachFileName.AppendNextStringPortion(AttachFileName);
OAttachments := OSendMail.Attachments;
OAttachment := OAttachments.Add(BSTRConverterAttachFileName);
END;

//Das ist der weitere Anhang.
IF AttachFileName2 <> '' THEN BEGIN
BSTRConverterAttachFileName.ResetBSTR;
BSTRConverterAttachFileName.AppendNextStringPortion(AttachFileName2);
OAttachments := OSendMail.Attachments;
OAttachment := OAttachments.Add(BSTRConverterAttachFileName);
END;

OSendMail.OpenDialog := OpenDialog;

MailSent := OSendMail.Send;
ErrorNo := OSendMail.ErrorStatus;
OApplication.Logoff;

Die Codeunit ist nun so aufgebaut, das die Funktion NewMessage aus dem OnRun Trigger mit den angegebenen Parametern aufgerufen wird.

Sie können so viele Anhänge-Parameter dieser Funktion hinzufügen wie Sie benötigen,

These postings are provided "AS IS" with no warranties and confer no rights. You assume all risk for your use.

Mit freundlichen Grüßen

Sebastian Röttel

Microsoft Dynamics Germany

Microsoft Customer Service and Support (CSS) EMEA