Skip to content

Commit 10e37f5

Browse files
committed
Marked MailFolderClient obsolete as all functionality has moved to MailFolderReader.
1 parent d13e4c7 commit 10e37f5

File tree

9 files changed

+74
-29
lines changed

9 files changed

+74
-29
lines changed

samples/WorkerServiceExample/Worker.cs

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,6 @@
66
using MailKitSimplified.Receiver.Services;
77
using MailKitSimplified.Sender.Abstractions;
88
using System.Diagnostics;
9-
using MailKitSimplified.Receiver.Models;
10-
using Microsoft.Extensions.Options;
119

1210
namespace ExampleNamespace;
1311

@@ -50,10 +48,11 @@ async Task OnArrivalAsync(IMessageSummary messageSummary)
5048
{
5149
if (messageSummary.UniqueId.Id > newestEmail?.UniqueId.Id)
5250
{
53-
await messageSummary.AddFlagsAsync(MessageFlags.Seen);
5451
var mimeMessage = await messageSummary.GetMimeMessageAsync();
5552
//var mimeMessage = await _imapReceiver.ReadMail.GetMimeMessageAsync(messageSummary.UniqueId);
56-
_logger.LogInformation($"{_imapReceiver} message #{messageSummary.UniqueId} arrived, {mimeMessage.MessageId}.");
53+
await messageSummary.AddFlagsAsync(MessageFlags.Seen);
54+
_logger.LogDebug($"{_imapReceiver} message #{messageSummary.UniqueId} message downloaded, Seen flag added.");
55+
_logger.LogInformation($"{_imapReceiver} message #{messageSummary.UniqueId} arrival processed, {mimeMessage.MessageId}.");
5756
}
5857
else
5958
_logger.LogInformation($"{_imapReceiver} message #{messageSummary.UniqueId} arrived.");
@@ -71,7 +70,7 @@ private async Task ForwardOnArrivalAsync(IMessageSummary messageSummary)
7170
"<p>FYI.</p>", includeMessageId: true);
7271
mimeForward.From.Add("from@example.com");
7372
mimeForward.To.Add("to@example.com");
74-
_logger.LogInformation($"Reply: \r\n{mimeForward.HtmlBody}");
73+
_logger.LogInformation($"{_imapReceiver} reply: \r\n{mimeForward.HtmlBody}");
7574
await _smtpSender.SendAsync(mimeForward); //cancellationToken
7675
//_smtpSender.Enqueue(mimeForward);
7776
}
@@ -94,7 +93,7 @@ private async Task GetMessageSummaryRepliesAsync(CancellationToken cancellationT
9493
.Skip(0).Take(1).Items(MessageSummaryItems.Envelope)
9594
.GetMessageSummariesAsync(cancellationToken);
9695
stopwatch.Stop();
97-
_logger.LogInformation($"Received {messageSummaries.Count} email(s) in {stopwatch.Elapsed.TotalSeconds:n1}s: {messageSummaries.Select(m => m.UniqueId).ToEnumeratedString()}.");
96+
_logger.LogInformation($"{_imapReceiver} received {messageSummaries.Count} email(s) in {stopwatch.Elapsed.TotalSeconds:n1}s: {messageSummaries.Select(m => m.UniqueId).ToEnumeratedString()}.");
9897
foreach (var messageSummary in messageSummaries)
9998
{
10099
if (cancellationToken.IsCancellationRequested)
@@ -103,7 +102,7 @@ private async Task GetMessageSummaryRepliesAsync(CancellationToken cancellationT
103102
"Reply here.", addRecipients: false, includeMessageId: true, cancellationToken: cancellationToken);
104103
mimeReply.From.Add("from@localhost");
105104
mimeReply.To.Add("to@localhost");
106-
_logger.LogInformation($"Reply: \r\n{mimeReply.HtmlBody}");
105+
_logger.LogInformation($"{_imapReceiver} reply: \r\n{mimeReply.HtmlBody}");
107106
//await _smtpSender.SendAsync(mimeReply, cancellationToken);
108107
}
109108
}
@@ -115,11 +114,11 @@ private async Task GetMimeMessageRepliesAsync(CancellationToken cancellationToke
115114
.Take(1).Query(SearchQuery.NotSeen)
116115
.GetMimeMessagesAsync(cancellationToken);
117116
stopwatch.Stop();
118-
_logger.LogInformation($"Received {mimeMessages.Count} email(s) in {stopwatch.Elapsed.TotalSeconds:n1}s.");
117+
_logger.LogInformation($"{_imapReceiver} received {mimeMessages.Count} email(s) in {stopwatch.Elapsed.TotalSeconds:n1}s.");
119118
var mimeReply = mimeMessages.Single()
120119
.GetReplyMessage("Reply here.", addRecipients: false, includeMessageId: true, cancellationToken: cancellationToken)
121120
.From("from@localhost").To("to@localhost");
122-
_logger.LogInformation($"Reply: \r\n{mimeReply.HtmlBody}");
121+
_logger.LogInformation($"{_imapReceiver} reply: \r\n{mimeReply.HtmlBody}");
123122
}
124123

125124
private async Task ReceiveAsync(CancellationToken cancellationToken = default)
@@ -130,7 +129,7 @@ private async Task ReceiveAsync(CancellationToken cancellationToken = default)
130129
var messageSummaries = await _imapReceiver.ReadMail.Skip(0).Take(250, continuous: true)
131130
.GetMessageSummariesAsync(MessageSummaryItems.UniqueId, cancellationToken);
132131
stopwatch.Stop();
133-
_logger.LogInformation($"Received {messageSummaries.Count} email(s) in {stopwatch.Elapsed.TotalSeconds:n3}s: {messageSummaries.Select(m => m.UniqueId).ToEnumeratedString()}.");
132+
_logger.LogInformation($"{_imapReceiver} received {messageSummaries.Count} email(s) in {stopwatch.Elapsed.TotalSeconds:n3}s: {messageSummaries.Select(m => m.UniqueId).ToEnumeratedString()}.");
134133
}
135134

136135
private async Task QueryAsync(CancellationToken cancellationToken = default)
@@ -139,7 +138,7 @@ private async Task QueryAsync(CancellationToken cancellationToken = default)
139138
var messageSummaries = await _imapReceiver.ReadMail.Query(MailFolderReader.QueryMessageId(""))
140139
.GetMessageSummariesAsync(MailFolderReader.CoreMessageItems, cancellationToken);
141140
stopwatch.Stop();
142-
_logger.LogInformation($"Received {messageSummaries.Count} email(s) in {stopwatch.Elapsed.TotalSeconds:n1}s: {messageSummaries.Select(m => m.UniqueId).ToEnumeratedString()}.");
141+
_logger.LogInformation($"{_imapReceiver} received {messageSummaries.Count} email(s) in {stopwatch.Elapsed.TotalSeconds:n1}s: {messageSummaries.Select(m => m.UniqueId).ToEnumeratedString()}.");
143142
}
144143

145144
private async Task DelayedSendAsync(int secondsDelay, CancellationToken cancellationToken = default)

source/MailKitSimplified.Email/Services/SmtpSender.cs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ public SmtpSender(IOptions<EmailOptions> senderOptions, ISmtpClient smtpClient =
3535
_logger = logger ?? NullLogger<SmtpSender>.Instance;
3636
}
3737

38-
public ISmtpClient GetSmtpClient() => _smtpClient;
38+
public ISmtpClient SmtpClient => _smtpClient;
3939

4040
public static bool ValidateEmailAddresses(IEnumerable<string> sourceEmailAddresses, IEnumerable<string> destinationEmailAddresses, ILogger logger)
4141
{
@@ -49,14 +49,14 @@ public static bool ValidateEmailAddresses(IEnumerable<string> sourceEmailAddress
4949
int sourceEmailAddressCount = 0, destinationEmailAddressCount = 0;
5050
foreach (var from in sourceEmailAddresses)
5151
{
52-
if (!from.Contains("@"))
52+
if (!from.Contains('@'))
5353
{
5454
logger.LogWarning($"From address is invalid ({from})");
5555
isValid = false;
5656
}
5757
foreach (var to in destinationEmailAddresses)
5858
{
59-
if (!to.Contains("@"))
59+
if (!to.Contains('@'))
6060
{
6161
logger.LogWarning($"To address is invalid ({to})");
6262
isValid = false;
@@ -132,7 +132,8 @@ public async Task SendAsync(MimeMessage mimeMessage, CancellationToken cancellat
132132
await _smtpClient.CheckAsync(_senderOptions, cancellationToken);
133133
_logger.LogTrace($"Sending {GetEnvelope(mimeMessage, includeTextBody: true)}");
134134
string serverResponse = await _smtpClient.SendAsync(mimeMessage, cancellationToken, transferProgress).ConfigureAwait(false);
135-
_logger.LogTrace($"Server response: \"{serverResponse}\".");
135+
_logger.LogTrace($"{_senderOptions} server response: \"{serverResponse}\".");
136+
_logger.LogDebug($"Sent Message-ID {mimeMessage.MessageId}.");
136137
}
137138

138139
public async Task<bool> TrySendAsync(MimeMessage mimeMessage, CancellationToken cancellationToken = default, ITransferProgress transferProgress = null)

source/MailKitSimplified.Receiver/Extensions/MessageSummaryExtensions.cs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,9 @@ internal static string QuoteForReply(this IMessageSummary original, string bodyT
204204
}
205205
else
206206
{
207-
string GetHtml(InternetAddressList contacts) => contacts.Mailboxes.Select(a => $"\"{a.Name}\" &lt;{a.Address}&gt;").ToEnumeratedString("; ");
207+
string GetHtml(InternetAddressList contacts) =>
208+
contacts.Mailboxes.Select(a => $"\"{a.Name}\" &lt;{a.Address}&gt;")
209+
.ToEnumeratedString("; ");
208210
stringBuilder.AppendLine("<div>");
209211
stringBuilder.AppendLine(message ?? string.Empty);
210212
stringBuilder.AppendLine("</div><br /><blockquote><hr /><div>");
@@ -321,7 +323,7 @@ public static async Task AddFlagsAsync(this IMessageSummary messageSummary, Mess
321323
if (peekFolder || messageSummary.Folder.Access != FolderAccess.ReadWrite)
322324
_ = await messageSummary.Folder.OpenAsync(FolderAccess.ReadWrite, cancellationToken).ConfigureAwait(false);
323325
if (!messageSummary.Flags.HasValue || !messageSummary.Flags.Value.HasFlag(messageFlags))
324-
await messageSummary.Folder.AddFlagsAsync(messageSummary.UniqueId, messageFlags, silent).ConfigureAwait(false);
326+
await messageSummary.Folder.AddFlagsAsync(messageSummary.UniqueId, messageFlags, silent, cancellationToken).ConfigureAwait(false);
325327
bool delete = messageFlags.HasFlag(MessageFlags.Deleted);
326328
if (peekFolder)
327329
await messageSummary.Folder.CloseAsync(delete, cancellationToken).ConfigureAwait(false);
@@ -346,7 +348,7 @@ public static async Task AddFlagsAsync(this IMailFolder mailFolder, MessageFlags
346348
if (peekFolder || mailFolder.Access != FolderAccess.ReadWrite)
347349
_ = await mailFolder.OpenAsync(FolderAccess.ReadWrite, cancellationToken).ConfigureAwait(false);
348350
var ascendingIds = uniqueIds is IList<UniqueId> ids ? ids : uniqueIds.OrderBy(u => u.Id).ToList();
349-
await mailFolder.AddFlagsAsync(ascendingIds, messageFlags, silent).ConfigureAwait(false);
351+
await mailFolder.AddFlagsAsync(ascendingIds, messageFlags, silent, cancellationToken).ConfigureAwait(false);
350352
bool delete = messageFlags.HasFlag(MessageFlags.Deleted);
351353
if (peekFolder)
352354
await mailFolder.CloseAsync(delete, cancellationToken).ConfigureAwait(false);

source/MailKitSimplified.Receiver/Models/EmailReceiverOptions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,6 @@ public async Task<IImapClient> CreateImapClientAsync(IProtocolLogger protocolLog
8585

8686
public EmailReceiverOptions Copy() => MemberwiseClone() as EmailReceiverOptions;
8787

88-
public override string ToString() => $"{ImapHost}:{ImapPort} {ImapCredential.UserName} {MailFolderName}";
88+
public override string ToString() => $"{ImapHost} {ImapCredential.UserName} {MailFolderName}";
8989
}
9090
}

source/MailKitSimplified.Receiver/Services/MailFolderClient.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414

1515
namespace MailKitSimplified.Receiver.Services
1616
{
17+
[Obsolete("Consider using MailFolderReader instead.")]
1718
public sealed class MailFolderClient : IMailFolderClient
1819
{
1920
public string MailFolderName => _mailFolder?.FullName ?? _imapReceiver.ToString();
@@ -23,26 +24,30 @@ public sealed class MailFolderClient : IMailFolderClient
2324
private readonly ILogger _logger;
2425
private readonly IImapReceiver _imapReceiver;
2526

27+
[Obsolete("Consider using MailFolderReader instead.")]
2628
public MailFolderClient(IImapReceiver imapReceiver, ILogger<MailFolderClient> logger = null)
2729
{
2830
_logger = logger ?? NullLogger<MailFolderClient>.Instance;
2931
_imapReceiver = imapReceiver ?? throw new ArgumentNullException(nameof(imapReceiver));
3032
}
3133

34+
[Obsolete("Consider using MailFolderReader instead.")]
3235
public static MailFolderClient Create(EmailReceiverOptions emailReceiverOptions, ILogger<MailFolderClient> logger = null, ILogger<ImapReceiver> logImap = null, IProtocolLogger protocolLogger = null, IImapClient imapClient = null)
3336
{
3437
var imapReceiver = ImapReceiver.Create(emailReceiverOptions, logImap, protocolLogger, imapClient);
3538
var mailFolderClient = new MailFolderClient(imapReceiver, logger);
3639
return mailFolderClient;
3740
}
3841

42+
[Obsolete("Consider using MailFolderReader instead.")]
3943
public static MailFolderClient Create(IImapClient imapClient, EmailReceiverOptions emailReceiverOptions, ILogger<MailFolderClient> logger = null, ILogger<ImapReceiver> logImap = null)
4044
{
4145
var imapReceiver = ImapReceiver.Create(imapClient, emailReceiverOptions, logImap);
4246
var mailFolderClient = new MailFolderClient(imapReceiver, logger);
4347
return mailFolderClient;
4448
}
4549

50+
[Obsolete("Consider using MailFolderReader.OpenMailFolderAsync() instead.")]
4651
public async ValueTask<IMailFolder> ConnectAsync(bool enableWrite = false, CancellationToken cancellationToken = default)
4752
{
4853
if (_mailFolder == null)

source/MailKitSimplified.Receiver/Services/MailFolderMonitor.cs

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,8 @@ private async Task IdleStartAsync(CancellationToken cancellationToken = default)
186186
_ = await _fetchFolder.OpenAsync(FolderAccess.ReadWrite, cancellationToken).ConfigureAwait(false);
187187
_mailFolder = await _imapReceiver.ConnectMailFolderAsync(cancellationToken).ConfigureAwait(false);
188188
_ = await _mailFolder.OpenAsync(FolderAccess.ReadOnly, cancellationToken).ConfigureAwait(false);
189-
_logger.LogDebug($"{_imapReceiver} ({_mailFolder.Count}) idle monitor started.");
189+
var connectOption = _folderMonitorOptions.IgnoreExistingMailOnConnect ? "ignoring" : "fetching";
190+
_logger.LogInformation($"{_imapReceiver} ({_mailFolder.Count}) idle monitor started, {connectOption} existing emails.");
190191

191192
_mailFolder.CountChanged += OnCountChanged;
192193
_mailFolder.MessageExpunged += OnMessageExpunged;
@@ -338,7 +339,15 @@ private async ValueTask<int> ProcessMessagesArrivedAsync(bool firstConnection =
338339
_arrival = new CancellationTokenSource();
339340
var newMail = _messageCache.TryAddUniqueRange(fetched);
340341
if (!firstConnection || (firstConnection && !_folderMonitorOptions.IgnoreExistingMailOnConnect))
341-
newMail.ActionEach(_arrivalQueue.Enqueue, cancellationToken);
342+
{
343+
foreach (var mailItem in newMail)
344+
{
345+
if (cancellationToken.IsCancellationRequested)
346+
break;
347+
_logger.LogDebug($"{_imapReceiver} message #{mailItem.UniqueId} arrived.");
348+
_arrivalQueue.Enqueue(mailItem);
349+
}
350+
}
342351
return newMail.Count;
343352
}
344353

source/MailKitSimplified.Receiver/Services/MailFolderReader.cs

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,7 @@ public async Task<IList<IMessageSummary>> GetMessageSummariesAsync(MessageSummar
170170
int endIndex = _take < 0 ? _all : _skip + _take - 1;
171171
filteredSummaries = await mailFolder.FetchAsync(_skip, endIndex, filter, cancellationToken).ConfigureAwait(false);
172172
}
173+
_logger.LogTrace($"{_imapReceiver} received {filteredSummaries.Count} email(s).");
173174
if (_continueTake && _take > 0)
174175
_skip += _take;
175176
await mailFolder.CloseAsync(false, CancellationToken.None).ConfigureAwait(false);
@@ -215,6 +216,7 @@ public async Task<IList<MimeMessage>> GetMimeMessagesAsync(CancellationToken can
215216
mimeMessages.Add(mimeMessage);
216217
}
217218
}
219+
_logger.LogTrace($"{_imapReceiver} received {mimeMessages.Count} email(s).");
218220
if (_continueTake && _take > 0)
219221
{
220222
if (_skip < mailFolder.Count)
@@ -239,6 +241,7 @@ public async Task<IList<IMessageSummary>> GetMessageSummariesAsync(IEnumerable<U
239241
var ascendingUids = uniqueIds.OrderBy(u => u.Id).ToList();
240242
var messageSummaries = await mailFolder.FetchAsync(ascendingUids, filter, cancellationToken).ConfigureAwait(false);
241243
filteredSummaries = messageSummaries.Where(m => uniqueIds.Contains(m.UniqueId)).Reverse().ToList();
244+
_logger.LogTrace($"{_imapReceiver} received {filteredSummaries.Count} email(s).");
242245
await mailFolder.CloseAsync(false, CancellationToken.None).ConfigureAwait(false);
243246

244247
return filteredSummaries ?? Array.Empty<IMessageSummary>();
@@ -250,6 +253,7 @@ public async Task<MimeMessage> GetMimeMessageAsync(UniqueId uniqueId, Cancellati
250253
var mailFolder = await _imapReceiver.ConnectMailFolderAsync(cancellationToken).ConfigureAwait(false);
251254
_ = await mailFolder.OpenAsync(FolderAccess.ReadOnly, cancellationToken).ConfigureAwait(false);
252255
mimeMessage = await mailFolder.GetMessageAsync(uniqueId, cancellationToken, progress).ConfigureAwait(false);
256+
_logger.LogTrace($"{_imapReceiver} received {mimeMessage.MessageId}.");
253257
await mailFolder.CloseAsync(false, CancellationToken.None).ConfigureAwait(false);
254258
return mimeMessage;
255259
}
@@ -269,11 +273,35 @@ public async Task<IList<MimeMessage>> GetMimeMessagesAsync(IEnumerable<UniqueId>
269273
if (mimeMessage != null)
270274
mimeMessages.Add(mimeMessage);
271275
}
276+
_logger.LogTrace($"{_imapReceiver} received {mimeMessages.Count} email(s).");
272277
await mailFolder.CloseAsync(false, CancellationToken.None).ConfigureAwait(false);
273278
}
274279
return mimeMessages;
275280
}
276281

282+
[Obsolete("Consider using GetMimeMessagesAsync() instead.")]
283+
public IEnumerable<MimeMessage> GetMimeMessages(IEnumerable<UniqueId> uniqueIds, CancellationToken cancellationToken = default, ITransferProgress progress = null)
284+
{
285+
if (uniqueIds != null)
286+
{
287+
var mailFolder = _imapReceiver.ConnectMailFolderAsync(cancellationToken).GetAwaiter().GetResult();
288+
lock (mailFolder.SyncRoot)
289+
{
290+
_ = mailFolder.Open(FolderAccess.ReadOnly, cancellationToken);
291+
foreach (var uniqueId in uniqueIds)
292+
{
293+
if (cancellationToken.IsCancellationRequested)
294+
break;
295+
var mimeMessage = mailFolder.GetMessage(uniqueId, cancellationToken, progress);
296+
_logger.LogTrace($"{_imapReceiver} received {mimeMessage.MessageId}.");
297+
if (mimeMessage != null)
298+
yield return mimeMessage;
299+
}
300+
mailFolder.Close(false, CancellationToken.None);
301+
}
302+
}
303+
}
304+
277305
/// <summary>Query just the arrival dates of messages on the server.</summary>
278306
/// <param name="deliveredAfter">Search for messages after this date.</param>
279307
/// <param name="deliveredBefore">Search for messages before this date.</param>

source/MailKitSimplified.Sender/Models/EmailSenderOptions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,6 @@ public IProtocolLogger CreateProtocolLogger(IFileSystem fileSystem = null)
8686

8787
public EmailSenderOptions Copy() => MemberwiseClone() as EmailSenderOptions;
8888

89-
public override string ToString() => $"{SmtpHost}:{SmtpPort}";
89+
public override string ToString() => SmtpHost;
9090
}
9191
}

0 commit comments

Comments
 (0)