Skip to content

Commit d9d219a

Browse files
committed
fixes in EmailServiceEntity after merge
1 parent adb455f commit d9d219a

15 files changed

+197
-196
lines changed

Signum.Engine.Extensions/Mailing/EmailLogic.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ public static EmailConfigurationEmbedded Configuration
2727

2828
static Func<EmailTemplateEntity?, Lite<Entity>?, EmailMessageEntity?, EmailSenderConfigurationEntity> getEmailSenderConfiguration = null!;
2929

30-
public static Polymorphic<Func<EmailSenderServiceConfigurationEntity, EmailSenderConfigurationEntity, BaseEmailSender>> EmailSenders = new ();
30+
public static Polymorphic<Func<EmailServiceEntity, EmailSenderConfigurationEntity, BaseEmailSender>> EmailSenders = new ();
3131
public static BaseEmailSender GetEmailSender(EmailMessageEntity email)
3232
{
3333
var template = email.Template?.Try(t => EmailTemplateLogic.EmailTemplatesLazy.Value.GetOrThrow(t));
@@ -77,9 +77,9 @@ public static void Start(
7777

7878
EmailLogic.getEmailSenderConfiguration = getEmailSenderConfiguration;
7979

80-
EmailSenders.Register((SmtpEntity s, EmailSenderConfigurationEntity c) => new SmtpSender(c, s));
81-
EmailSenders.Register((MicrosoftGraphEntity s, EmailSenderConfigurationEntity c) => new MicrosoftGraphSender(c, s));
82-
EmailSenders.Register((ExchangeWebServiceEntity s, EmailSenderConfigurationEntity c) => new ExchangeWebServiceSender(c, s));
80+
EmailSenders.Register((SmtpEmailServiceEntity s, EmailSenderConfigurationEntity c) => new SmtpSender(c, s));
81+
EmailSenders.Register((MicrosoftGraphEmailServiceEntity s, EmailSenderConfigurationEntity c) => new MicrosoftGraphSender(c, s));
82+
EmailSenders.Register((ExchangeWebServiceEmailServiceEntity s, EmailSenderConfigurationEntity c) => new ExchangeWebServiceSender(c, s));
8383

8484
EmailGraph.Register();
8585

Signum.Engine.Extensions/Mailing/EmailSenderConfigurationLogic.cs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@ public static class EmailSenderConfigurationLogic
1414

1515
public static void Start(SchemaBuilder sb, Func<string, string>? encryptPassword = null, Func<string, string>? decryptPassword = null)
1616
{
17-
sb.Settings.AssertImplementedBy((EmailSenderConfigurationEntity o) => o.Service, typeof(SmtpEntity));
18-
sb.Settings.AssertImplementedBy((EmailSenderConfigurationEntity o) => o.Service, typeof(ExchangeWebServiceEntity));
19-
sb.Settings.AssertImplementedBy((EmailSenderConfigurationEntity o) => o.Service, typeof(MicrosoftGraphEntity));
17+
sb.Settings.AssertImplementedBy((EmailSenderConfigurationEntity o) => o.Service, typeof(SmtpEmailServiceEntity));
18+
sb.Settings.AssertImplementedBy((EmailSenderConfigurationEntity o) => o.Service, typeof(ExchangeWebServiceEmailServiceEntity));
19+
sb.Settings.AssertImplementedBy((EmailSenderConfigurationEntity o) => o.Service, typeof(MicrosoftGraphEmailServiceEntity));
2020

2121
if (sb.NotDefined(MethodInfo.GetCurrentMethod()))
2222
{
@@ -27,6 +27,7 @@ public static void Start(SchemaBuilder sb, Func<string, string>? encryptPassword
2727
DecryptPassword = decryptPassword;
2828

2929
sb.Include<EmailSenderConfigurationEntity>()
30+
.WithDeletePart(a => a.Service, handleOnSaving: esc => true)
3031
.WithQuery(() => s => new
3132
{
3233
Entity = s,
@@ -56,15 +57,15 @@ public static void Start(SchemaBuilder sb, Func<string, string>? encryptPassword
5657

5758
public static SmtpClient GenerateSmtpClient(this Lite<EmailSenderConfigurationEntity> config)
5859
{
59-
return (config.RetrieveFromCache().Service as SmtpEntity).ThrowIfNull("No SMTP config").GenerateSmtpClient();
60+
return (config.RetrieveFromCache().Service as SmtpEmailServiceEntity).ThrowIfNull("No SMTP config").GenerateSmtpClient();
6061
}
6162

6263
public static EmailSenderConfigurationEntity RetrieveFromCache(this Lite<EmailSenderConfigurationEntity> config)
6364
{
6465
return SmtpConfigCache.Value.GetOrThrow(config);
6566
}
6667

67-
public static SmtpClient GenerateSmtpClient(this SmtpEntity config)
68+
public static SmtpClient GenerateSmtpClient(this SmtpEmailServiceEntity config)
6869
{
6970
if (config.DeliveryMethod != SmtpDeliveryMethod.Network)
7071
{
Lines changed: 69 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -1,76 +1,76 @@
1-
using Signum.Entities.Mailing;
2-
using Signum.Engine.Authorization;
3-
using Signum.Engine.Files;
4-
using Microsoft.Exchange.WebServices.Data;
1+
using Signum.Entities.Mailing;
2+
using Signum.Engine.Authorization;
3+
using Signum.Engine.Files;
4+
using Microsoft.Exchange.WebServices.Data;
55

6-
namespace Signum.Engine.Mailing.Senders;
7-
8-
public class ExchangeWebServiceSender : BaseEmailSender
9-
{
10-
ExchangeWebServiceEntity exchange;
6+
namespace Signum.Engine.Mailing.Senders;
117

12-
public ExchangeWebServiceSender(EmailSenderConfigurationEntity senderConfig, ExchangeWebServiceEntity service) : base(senderConfig)
8+
public class ExchangeWebServiceSender : BaseEmailSender
9+
{
10+
ExchangeWebServiceEmailServiceEntity exchange;
11+
12+
public ExchangeWebServiceSender(EmailSenderConfigurationEntity senderConfig, ExchangeWebServiceEmailServiceEntity service) : base(senderConfig)
1313
{
1414
exchange = service;
1515
}
1616

1717
protected override void SendInternal(EmailMessageEntity email)
18-
{
19-
ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2007_SP1);
20-
service.UseDefaultCredentials = exchange.UseDefaultCredentials;
21-
service.Credentials = exchange.Username.HasText() ? new WebCredentials(exchange.Username, exchange.Password) : null;
22-
//service.TraceEnabled = true;
23-
//service.TraceFlags = TraceFlags.All;
24-
25-
if (exchange.Url.HasText())
26-
service.Url = new Uri(exchange.Url);
27-
else
28-
service.AutodiscoverUrl(email.From.EmailAddress, RedirectionUrlValidationCallback);
29-
30-
EmailMessage message = new EmailMessage(service);
31-
32-
foreach (var a in email.Attachments.Where(a => a.Type == EmailAttachmentType.Attachment))
33-
{
34-
var fa = message.Attachments.AddFileAttachment(a.File.FileName, a.File.GetByteArray());
35-
fa.ContentId = a.ContentId;
36-
}
37-
message.ToRecipients.AddRange(email.Recipients.Where(r => r.Kind == EmailRecipientKind.To).Select(r => r.ToEmailAddress()).ToList());
38-
message.CcRecipients.AddRange(email.Recipients.Where(r => r.Kind == EmailRecipientKind.Cc).Select(r => r.ToEmailAddress()).ToList());
39-
message.BccRecipients.AddRange(email.Recipients.Where(r => r.Kind == EmailRecipientKind.Bcc).Select(r => r.ToEmailAddress()).ToList());
40-
message.Subject = email.Subject;
41-
message.Body = new MessageBody(email.IsBodyHtml ? BodyType.HTML : BodyType.Text, email.Body.Text);
42-
message.Send();
43-
}
44-
45-
protected virtual bool RedirectionUrlValidationCallback(string redirectionUrl)
46-
{
47-
// The default for the validation callback is to reject the URL.
48-
Uri redirectionUri = new Uri(redirectionUrl);
49-
// Validate the contents of the redirection URL. In this simple validation
50-
// callback, the redirection URL is considered valid if it is using HTTPS
51-
// to encrypt the authentication credentials.
52-
return redirectionUri.Scheme == "https";
53-
}
54-
}
55-
56-
public static class ExchangeExtensions
57-
{
58-
public static EmailAddress ToEmailAddress(this EmailAddressEmbedded address)
59-
{
60-
if (address.DisplayName.HasText())
61-
return new EmailAddress(address.DisplayName, address.EmailAddress);
62-
63-
return new EmailAddress(address.EmailAddress);
64-
}
65-
66-
public static EmailAddress ToEmailAddress(this EmailRecipientEmbedded recipient)
67-
{
68-
if (!EmailLogic.Configuration.SendEmails)
69-
throw new InvalidOperationException("EmailConfigurationEmbedded.SendEmails is set to false");
70-
71-
if (recipient.DisplayName.HasText())
72-
return new EmailAddress(recipient.DisplayName, EmailLogic.Configuration.OverrideEmailAddress.DefaultText(recipient.EmailAddress));
73-
74-
return new EmailAddress(EmailLogic.Configuration.OverrideEmailAddress.DefaultText(recipient.EmailAddress));
75-
}
76-
}
18+
{
19+
ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2007_SP1);
20+
service.UseDefaultCredentials = exchange.UseDefaultCredentials;
21+
service.Credentials = exchange.Username.HasText() ? new WebCredentials(exchange.Username, exchange.Password) : null;
22+
//service.TraceEnabled = true;
23+
//service.TraceFlags = TraceFlags.All;
24+
25+
if (exchange.Url.HasText())
26+
service.Url = new Uri(exchange.Url);
27+
else
28+
service.AutodiscoverUrl(email.From.EmailAddress, RedirectionUrlValidationCallback);
29+
30+
EmailMessage message = new EmailMessage(service);
31+
32+
foreach (var a in email.Attachments.Where(a => a.Type == EmailAttachmentType.Attachment))
33+
{
34+
var fa = message.Attachments.AddFileAttachment(a.File.FileName, a.File.GetByteArray());
35+
fa.ContentId = a.ContentId;
36+
}
37+
message.ToRecipients.AddRange(email.Recipients.Where(r => r.Kind == EmailRecipientKind.To).Select(r => r.ToEmailAddress()).ToList());
38+
message.CcRecipients.AddRange(email.Recipients.Where(r => r.Kind == EmailRecipientKind.Cc).Select(r => r.ToEmailAddress()).ToList());
39+
message.BccRecipients.AddRange(email.Recipients.Where(r => r.Kind == EmailRecipientKind.Bcc).Select(r => r.ToEmailAddress()).ToList());
40+
message.Subject = email.Subject;
41+
message.Body = new MessageBody(email.IsBodyHtml ? BodyType.HTML : BodyType.Text, email.Body.Text);
42+
message.Send();
43+
}
44+
45+
protected virtual bool RedirectionUrlValidationCallback(string redirectionUrl)
46+
{
47+
// The default for the validation callback is to reject the URL.
48+
Uri redirectionUri = new Uri(redirectionUrl);
49+
// Validate the contents of the redirection URL. In this simple validation
50+
// callback, the redirection URL is considered valid if it is using HTTPS
51+
// to encrypt the authentication credentials.
52+
return redirectionUri.Scheme == "https";
53+
}
54+
}
55+
56+
public static class ExchangeExtensions
57+
{
58+
public static EmailAddress ToEmailAddress(this EmailAddressEmbedded address)
59+
{
60+
if (address.DisplayName.HasText())
61+
return new EmailAddress(address.DisplayName, address.EmailAddress);
62+
63+
return new EmailAddress(address.EmailAddress);
64+
}
65+
66+
public static EmailAddress ToEmailAddress(this EmailRecipientEmbedded recipient)
67+
{
68+
if (!EmailLogic.Configuration.SendEmails)
69+
throw new InvalidOperationException("EmailConfigurationEmbedded.SendEmails is set to false");
70+
71+
if (recipient.DisplayName.HasText())
72+
return new EmailAddress(recipient.DisplayName, EmailLogic.Configuration.OverrideEmailAddress.DefaultText(recipient.EmailAddress));
73+
74+
return new EmailAddress(EmailLogic.Configuration.OverrideEmailAddress.DefaultText(recipient.EmailAddress));
75+
}
76+
}

Signum.Engine.Extensions/Mailing/Senders/MicrosoftGraphSender.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,9 @@ namespace Signum.Engine.Mailing.Senders;
1717
public class MicrosoftGraphSender : BaseEmailSender
1818
{
1919
public static long MicrosoftGraphFileSizeLimit = 3 * 1024 * 1024;
20-
MicrosoftGraphEntity microsoftGraph;
20+
MicrosoftGraphEmailServiceEntity microsoftGraph;
2121

22-
public MicrosoftGraphSender(EmailSenderConfigurationEntity senderConfig, MicrosoftGraphEntity service) : base(senderConfig)
22+
public MicrosoftGraphSender(EmailSenderConfigurationEntity senderConfig, MicrosoftGraphEmailServiceEntity service) : base(senderConfig)
2323
{
2424
microsoftGraph = service;
2525
}
@@ -170,7 +170,7 @@ public static IDisposable OverrideAuthenticationProvider(IAuthenticationProvider
170170
return new Disposable(() => AuthenticationProvider.Value = old);
171171
}
172172

173-
public static IAuthenticationProvider GetAuthProvider(this MicrosoftGraphEntity microsoftGraph, string[]? scopes = null)
173+
public static IAuthenticationProvider GetAuthProvider(this MicrosoftGraphEmailServiceEntity microsoftGraph, string[]? scopes = null)
174174
{
175175
if (AuthenticationProvider.Value is var ap && ap != null)
176176
return ap;

Signum.Engine.Extensions/Mailing/Senders/SmtpSender.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@ namespace Signum.Engine.Mailing.Senders;
88
public class SmtpSender: BaseEmailSender
99
{
1010

11-
SmtpEntity smtp;
11+
SmtpEmailServiceEntity smtp;
1212

13-
public SmtpSender(EmailSenderConfigurationEntity senderConfig, SmtpEntity service) : base(senderConfig)
13+
public SmtpSender(EmailSenderConfigurationEntity senderConfig, SmtpEmailServiceEntity service) : base(senderConfig)
1414
{
1515
smtp = service;
1616
}

Signum.Entities.Extensions/Mailing/EmailSenderConfiguration.cs

Lines changed: 22 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ static EmailSenderConfigurationEntity()
1212
DescriptionManager.ExternalEnums.Add(typeof(SmtpDeliveryFormat), m => m.Name);
1313
DescriptionManager.ExternalEnums.Add(typeof(SmtpDeliveryMethod), m => m.Name);
1414
DescriptionManager.ExternalEnums.Add(typeof(ExchangeVersion), m => m.Name);
15+
1516
}
1617

1718
[UniqueIndex]
@@ -24,29 +25,23 @@ static EmailSenderConfigurationEntity()
2425
[NoRepeatValidator]
2526
public MList<EmailRecipientEmbedded> AdditionalRecipients { get; set; } = new MList<EmailRecipientEmbedded>();
2627

27-
[ImplementedBy(typeof(SmtpEntity), typeof(ExchangeWebServiceEntity), typeof(MicrosoftGraphEntity))]
28-
public EmailSenderServiceConfigurationEntity Service { get; set; }
28+
[ImplementedBy(typeof(SmtpEmailServiceEntity), typeof(ExchangeWebServiceEmailServiceEntity), typeof(MicrosoftGraphEmailServiceEntity))]
29+
public EmailServiceEntity Service { get; set; }
2930

30-
public override string ToString() => $"{Name} - {Service}";
31+
[AutoExpressionField]
32+
public override string ToString() => As.Expression(() => Name);
3133

3234
protected override string? ChildPropertyValidation(ModifiableEntity sender, PropertyInfo pi)
3335
{
3436
if (sender == DefaultFrom && pi.Name == nameof(DefaultFrom.AzureUserId))
3537
{
36-
if (DefaultFrom.AzureUserId == null && Service is MicrosoftGraphEntity microsoftGraph)
38+
if (DefaultFrom.AzureUserId == null && Service is MicrosoftGraphEmailServiceEntity microsoftGraph)
3739
return ValidationMessage._0IsMandatoryWhen1IsSet.NiceToString(pi.NiceName(), NicePropertyName(() => microsoftGraph));
3840
}
3941

4042
return base.ChildPropertyValidation(sender, pi);
4143
}
4244

43-
protected override bool IsPropertyReadonly(PropertyInfo pi)
44-
{
45-
if (!IsNew && pi.Name == nameof(Service))
46-
return true;
47-
48-
return base.IsPropertyReadonly(pi);
49-
}
5045
public EmailSenderConfigurationEntity Clone()
5146
{
5247
return new EmailSenderConfigurationEntity
@@ -66,14 +61,16 @@ public static class EmailSenderConfigurationOperation
6661
public static readonly ConstructSymbol<EmailSenderConfigurationEntity>.From<EmailSenderConfigurationEntity> Clone;
6762
}
6863

69-
public abstract class EmailSenderServiceConfigurationEntity : Entity
64+
public abstract class EmailServiceEntity : Entity
7065
{
71-
public abstract EmailSenderServiceConfigurationEntity Clone();
66+
public abstract EmailServiceEntity Clone();
7267
}
7368

7469
[EntityKind(EntityKind.Part, EntityData.Master)]
75-
public class SmtpEntity : EmailSenderServiceConfigurationEntity
70+
public class SmtpEmailServiceEntity : EmailServiceEntity
7671
{
72+
73+
7774
public SmtpDeliveryFormat DeliveryFormat { get; set; }
7875

7976
public SmtpDeliveryMethod DeliveryMethod { get; set; }
@@ -83,7 +80,7 @@ public class SmtpEntity : EmailSenderServiceConfigurationEntity
8380
[StringLengthValidator(Min = 3, Max = 300), FileNameValidator]
8481
public string? PickupDirectoryLocation { get; set; }
8582

86-
static StateValidator<SmtpEntity, SmtpDeliveryMethod> stateValidator = new StateValidator<SmtpEntity, SmtpDeliveryMethod>(
83+
static StateValidator<SmtpEmailServiceEntity, SmtpDeliveryMethod> stateValidator = new StateValidator<SmtpEmailServiceEntity, SmtpDeliveryMethod>(
8784
a => a.DeliveryMethod, a => a.Network, a => a.PickupDirectoryLocation)
8885
{
8986
{SmtpDeliveryMethod.Network, true, null },
@@ -96,15 +93,14 @@ public class SmtpEntity : EmailSenderServiceConfigurationEntity
9693
return stateValidator.Validate(this, pi) ?? base.PropertyValidation(pi);
9794
}
9895

99-
public override SmtpEntity Clone()
96+
public override SmtpEmailServiceEntity Clone()
10097
{
101-
return new SmtpEntity
98+
return new SmtpEmailServiceEntity
10299
{
103100
DeliveryFormat = DeliveryFormat,
104101
DeliveryMethod = DeliveryMethod,
105102
Network = Network?.Clone(),
106103
PickupDirectoryLocation = PickupDirectoryLocation
107-
108104
};
109105
}
110106
}
@@ -162,8 +158,10 @@ public enum CertFileType
162158
}
163159

164160
[EntityKind(EntityKind.Part, EntityData.Master)]
165-
public class ExchangeWebServiceEntity : EmailSenderServiceConfigurationEntity
161+
public class ExchangeWebServiceEmailServiceEntity : EmailServiceEntity
166162
{
163+
164+
167165
public ExchangeVersion ExchangeVersion { get; set; }
168166

169167
[StringLengthValidator(Max = 300)]
@@ -177,9 +175,9 @@ public class ExchangeWebServiceEntity : EmailSenderServiceConfigurationEntity
177175

178176
public bool UseDefaultCredentials { get; set; } = true;
179177

180-
public override ExchangeWebServiceEntity Clone()
178+
public override ExchangeWebServiceEmailServiceEntity Clone()
181179
{
182-
return new ExchangeWebServiceEntity
180+
return new ExchangeWebServiceEmailServiceEntity
183181
{
184182
ExchangeVersion = ExchangeVersion,
185183
Url = Url,
@@ -192,7 +190,7 @@ public override ExchangeWebServiceEntity Clone()
192190
}
193191

194192
[EntityKind(EntityKind.Part, EntityData.Master)]
195-
public class MicrosoftGraphEntity : EmailSenderServiceConfigurationEntity
193+
public class MicrosoftGraphEmailServiceEntity : EmailServiceEntity
196194
{
197195
public bool UseActiveDirectoryConfiguration { get; set; }
198196

@@ -221,9 +219,9 @@ public class MicrosoftGraphEntity : EmailSenderServiceConfigurationEntity
221219

222220
return base.PropertyValidation(pi);
223221
}
224-
public override MicrosoftGraphEntity Clone()
222+
public override MicrosoftGraphEmailServiceEntity Clone()
225223
{
226-
return new MicrosoftGraphEntity
224+
return new MicrosoftGraphEmailServiceEntity
227225
{
228226
UseActiveDirectoryConfiguration = UseActiveDirectoryConfiguration,
229227
Azure_ApplicationID = Azure_ApplicationID,

0 commit comments

Comments
 (0)