Codeunit 8999 Email Rate Limit Impl., source in 25
Source242526272829metadata in 25
src/System Application/App/Email/src/RateLimit/EmailRateLimitImpl.Codeunit.al80 lines, Copyright (c) Microsoft Corporation. MIT
// ------------------------------------------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
// ------------------------------------------------------------------------------------------------
namespace System.Email;
codeunit 8999 "Email Rate Limit Impl."
{
Access = Internal;
InherentPermissions = X;
InherentEntitlements = X;
Permissions = tabledata "Email Rate Limit" = rimd,
tabledata "Email Account" = r,
tabledata "Email Outbox" = r,
tabledata "Sent Email" = r;
procedure RegisterRateLimit(var EmailRateLimit: Record "Email Rate Limit"; RegisteredAccount: Record "Email Account"; RateLimit: Integer)
var
NewRateLimit: Record "Email Rate Limit";
begin
if NewRateLimit.Get(RegisteredAccount."Account Id", RegisteredAccount.Connector) then begin
NewRateLimit."Rate Limit" := RateLimit;
NewRateLimit.Modify();
end else begin
NewRateLimit."Account Id" := RegisteredAccount."Account Id";
NewRateLimit.Connector := RegisteredAccount.Connector;
NewRateLimit."Email Address" := RegisteredAccount."Email Address";
NewRateLimit."Rate Limit" := RateLimit;
NewRateLimit.Insert();
end;
EmailRateLimit."Account Id" := NewRateLimit."Account Id";
EmailRateLimit.Connector := NewRateLimit.Connector;
EmailRateLimit."Email Address" := NewRateLimit."Email Address";
EmailRateLimit."Rate Limit" := NewRateLimit."Rate Limit";
end;
procedure UpdateRateLimit(RegisteredAccount: Record "Email Account")
var
EmailRateLimit: Record "Email Rate Limit";
EmailRateLimitWizard: Page "Email Rate Limit Wizard";
begin
EmailRateLimit.Get(RegisteredAccount."Account Id", RegisteredAccount.Connector);
EmailRateLimitWizard.SetRecord(EmailRateLimit);
EmailRateLimitWizard.SetEmailAccountName(RegisteredAccount.Name);
EmailRateLimitWizard.RunModal();
end;
procedure IsRateLimitExceeded(AccountId: Guid; Connector: Enum "Email Connector"; EmailAddress: Text[250]; var RateLimitDuration: Duration): Boolean
var
SentEmail: Record "Sent Email";
EmailOutboxCurrent: Record "Email Outbox";
EmailImpl: Codeunit "Email Impl";
RateLimit: Integer;
begin
RateLimit := GetRateLimit(AccountId, Connector, EmailAddress);
if RateLimit = 0 then
exit(false);
RateLimitDuration := EmailImpl.GetEmailOutboxSentEmailWithinRateLimit(SentEmail, EmailOutboxCurrent, AccountId);
exit((EmailOutboxCurrent.Count() + SentEmail.Count()) >= RateLimit);
end;
[InherentPermissions(PermissionObjectType::TableData, Database::"Email Rate Limit", 'ri')]
procedure GetRateLimit(AccountId: Guid; Connector: Enum "Email Connector"; EmailAddress: Text[250]): Integer
var
EmailRateLimit: Record "Email Rate Limit";
begin
if EmailRateLimit.Get(AccountId, Connector) then
exit(EmailRateLimit."Rate Limit");
EmailRateLimit."Account Id" := AccountId;
EmailRateLimit.Connector := Connector;
EmailRateLimit."Email Address" := EmailAddress;
EmailRateLimit."Rate Limit" := 0;
EmailRateLimit.Insert();
exit(EmailRateLimit."Rate Limit");
end;
}