From a3083680e6e135b207bc1dd2030543aafa7e04dd Mon Sep 17 00:00:00 2001 From: Daniel Schick Date: Wed, 23 Jun 2021 19:19:48 +0000 Subject: [PATCH] Mailkit mit IMAP Implementierung (6.4.1) funktioniert leider nicht mit dem neuen Mailserver --- Stundensheet.xlsx | Bin 47160 -> 47214 bytes nsw/Source/bsmd.ExcelReadService/App.config | 12 +- .../bsmd.ExcelReadService/ExcelReadService.cs | 3 + .../Properties/Settings.Designer.cs | 22 +- .../Properties/Settings.settings | 6 +- .../Properties/AssemblyProductInfo.cs | 2 +- .../Properties/AssemblyProjectInfo.cs | 2 +- nsw/Source/bsmd.email/BSMDMail.cs | 4 +- nsw/Source/bsmd.email/BSMDPopClient.cs | 232 ++++++++++++++---- nsw/Source/bsmd.email/bsmd.email.csproj | 19 +- nsw/Source/bsmd.email/packages.config | 6 +- 11 files changed, 227 insertions(+), 81 deletions(-) diff --git a/Stundensheet.xlsx b/Stundensheet.xlsx index da412df0ed7ea4b4289490b5c10f231660d212da..6d07817d2168062b1dab462702a12965b5915c4d 100644 GIT binary patch delta 19325 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 delta 19275 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 diff --git a/nsw/Source/bsmd.ExcelReadService/App.config b/nsw/Source/bsmd.ExcelReadService/App.config index d31d17f2..b099a546 100644 --- a/nsw/Source/bsmd.ExcelReadService/App.config +++ b/nsw/Source/bsmd.ExcelReadService/App.config @@ -35,9 +35,6 @@ - - Data Source=(localdb)\Projects;Initial Catalog=nsw;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False - 300 @@ -50,7 +47,7 @@ + xmlns:xsd="http://www.w3.org/2001/XMLSchema"> report@bsmd.de hsok@gmx.de bald@puls200.de @@ -65,7 +62,7 @@ + xmlns:xsd="http://www.w3.org/2001/XMLSchema"> E:\svnlager\BSMD\nsw\Deutschland\BSMD-Formblatt.xlsx @@ -73,12 +70,15 @@ + xmlns:xsd="http://www.w3.org/2001/XMLSchema"> E:\svnlager\BSMD\nsw\Dänemark\NSW-DK-Excel-Arrival.xlsx E:\svnlager\BSMD\nsw\Dänemark\NSW-DK-Excel-Departure.xlsx + + Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=E:\DATA\DB\NSW.MDF;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False + diff --git a/nsw/Source/bsmd.ExcelReadService/ExcelReadService.cs b/nsw/Source/bsmd.ExcelReadService/ExcelReadService.cs index d1afd932..f128ab2f 100644 --- a/nsw/Source/bsmd.ExcelReadService/ExcelReadService.cs +++ b/nsw/Source/bsmd.ExcelReadService/ExcelReadService.cs @@ -71,6 +71,9 @@ namespace bsmd.ExcelReadService Dictionary reportingPartyDict = DBManager.Instance.GetReportingPartyDict(); + // BSMDPopClient.PrintCapabilities(); + // BSMDPopClient.PrintSslConnectionInfo(); + using (BSMDPopClient bsmdPopClient = new BSMDPopClient()) { if(bsmdPopClient.IsConnected) diff --git a/nsw/Source/bsmd.ExcelReadService/Properties/Settings.Designer.cs b/nsw/Source/bsmd.ExcelReadService/Properties/Settings.Designer.cs index 90689ca9..70417180 100644 --- a/nsw/Source/bsmd.ExcelReadService/Properties/Settings.Designer.cs +++ b/nsw/Source/bsmd.ExcelReadService/Properties/Settings.Designer.cs @@ -12,7 +12,7 @@ namespace bsmd.ExcelReadService.Properties { [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "14.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.8.1.0")] internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); @@ -23,15 +23,6 @@ namespace bsmd.ExcelReadService.Properties { } } - [global::System.Configuration.ApplicationScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("replace me!")] - public string ConnectionString { - get { - return ((string)(this["ConnectionString"])); - } - } - [global::System.Configuration.ApplicationScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Configuration.DefaultSettingValueAttribute("300")] @@ -108,5 +99,16 @@ namespace bsmd.ExcelReadService.Properties { return ((global::System.Collections.Specialized.StringCollection)(this["ConfirmationDK"])); } } + + [global::System.Configuration.ApplicationScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("Data Source=(localdb)\\MSSQLLocalDB;Initial Catalog=E:\\DATA\\DB\\NSW.MDF;Integrated " + + "Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;Appl" + + "icationIntent=ReadWrite;MultiSubnetFailover=False")] + public string ConnectionString { + get { + return ((string)(this["ConnectionString"])); + } + } } } diff --git a/nsw/Source/bsmd.ExcelReadService/Properties/Settings.settings b/nsw/Source/bsmd.ExcelReadService/Properties/Settings.settings index 3e0f92fb..2048bb49 100644 --- a/nsw/Source/bsmd.ExcelReadService/Properties/Settings.settings +++ b/nsw/Source/bsmd.ExcelReadService/Properties/Settings.settings @@ -2,9 +2,6 @@ - - replace me! - 300 @@ -40,5 +37,8 @@ <string>E:\svnlager\BSMD\nsw\Dänemark\NSW-DK-Excel-Departure.xlsx</string> </ArrayOfString> + + Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=E:\DATA\DB\NSW.MDF;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False + \ No newline at end of file diff --git a/nsw/Source/bsmd.database/Properties/AssemblyProductInfo.cs b/nsw/Source/bsmd.database/Properties/AssemblyProductInfo.cs index d46380b9..fea5d68b 100644 --- a/nsw/Source/bsmd.database/Properties/AssemblyProductInfo.cs +++ b/nsw/Source/bsmd.database/Properties/AssemblyProductInfo.cs @@ -2,6 +2,6 @@ [assembly: AssemblyCompany("schick Informatik")] [assembly: AssemblyProduct("BSMD NSW interface")] -[assembly: AssemblyInformationalVersion("6.4.0")] +[assembly: AssemblyInformationalVersion("6.4.1")] [assembly: AssemblyCopyright("Copyright © 2014-2021 schick Informatik")] [assembly: AssemblyTrademark("")] \ No newline at end of file diff --git a/nsw/Source/bsmd.database/Properties/AssemblyProjectInfo.cs b/nsw/Source/bsmd.database/Properties/AssemblyProjectInfo.cs index 49265b3f..0b1870fa 100644 --- a/nsw/Source/bsmd.database/Properties/AssemblyProjectInfo.cs +++ b/nsw/Source/bsmd.database/Properties/AssemblyProjectInfo.cs @@ -1,4 +1,4 @@ using System.Reflection; -[assembly: AssemblyVersion("6.4.0.*")] +[assembly: AssemblyVersion("6.4.1.*")] diff --git a/nsw/Source/bsmd.email/BSMDMail.cs b/nsw/Source/bsmd.email/BSMDMail.cs index 3c0087fe..17d37d87 100644 --- a/nsw/Source/bsmd.email/BSMDMail.cs +++ b/nsw/Source/bsmd.email/BSMDMail.cs @@ -21,8 +21,8 @@ namespace bsmd.email { public class BSMDMail : IDisposable { - private SmtpClient client; - private static ILog log = LogManager.GetLogger(typeof(BSMDMail)); + private readonly SmtpClient client; + private static readonly ILog log = LogManager.GetLogger(typeof(BSMDMail)); internal BSMDMail() { diff --git a/nsw/Source/bsmd.email/BSMDPopClient.cs b/nsw/Source/bsmd.email/BSMDPopClient.cs index b95fb90a..d3f2242d 100644 --- a/nsw/Source/bsmd.email/BSMDPopClient.cs +++ b/nsw/Source/bsmd.email/BSMDPopClient.cs @@ -9,12 +9,19 @@ using System; using System.IO; -using OpenPop.Pop3; -using OpenPop.Mime; using log4net; using System.Security.Cryptography.X509Certificates; using System.Net.Security; +using MimeKit; +using MailKit; +using MailKit.Security; +using MailKit.Net.Pop3; +using MailKit.Net.Imap; +using MailKit.Net.Smtp; + +using EmailValidation; + namespace bsmd.email { public class BSMDPopClient : IDisposable @@ -24,7 +31,7 @@ namespace bsmd.email private readonly Pop3Client pop3Client; private readonly ILog _log = LogManager.GetLogger(typeof(BSMDPopClient)); - private int currentMail = 1; + private int currentMail = 0; #endregion @@ -35,21 +42,15 @@ namespace bsmd.email try { this.pop3Client = new Pop3Client(); - - //bool useSSL = false; // abhängig vom PORT setzen!!! - //if (Properties.Settings.Default.POP3Port != 110) - bool useSSL = true; - - this.pop3Client.Connect(Properties.Settings.Default.POP3Server, Properties.Settings.Default.POP3Port, useSSL, - 60000, 60000, new System.Net.Security.RemoteCertificateValidationCallback(ValidateServerCertificate)); - // this.pop3Client.Connect(Properties.Settings.Default.POP3Server, Properties.Settings.Default.POP3Port, useSSL); - + this.pop3Client.ServerCertificateValidationCallback = ValidateServerCertificate; + bool useSSL = true; + this.pop3Client.Connect(Properties.Settings.Default.POP3Server, Properties.Settings.Default.POP3Port, useSSL); this.pop3Client.Authenticate(Properties.Settings.Default.POP3User, Properties.Settings.Default.POP3Password); this.IsConnected = true; } catch (Exception ex) { - _log.ErrorFormat("Error connecting to POP3 Server: {0}", ex.Message); + _log.ErrorFormat("Error connecting to POP3 Server {0}: {1}", Properties.Settings.Default.POP3Server, ex.Message); _log.DebugFormat("User:{0} Pw:{1}", Properties.Settings.Default.POP3User, Properties.Settings.Default.POP3Password); } } @@ -58,8 +59,8 @@ namespace bsmd.email { if (this.pop3Client != null) { - if (this.pop3Client.Connected) - this.pop3Client.Disconnect(); + if (this.pop3Client.IsConnected) + this.pop3Client.Disconnect(true); this.pop3Client.Dispose(); } } @@ -96,19 +97,26 @@ namespace bsmd.email if (!IsConnected) return false; int messageCount = this.pop3Client.GetMessageCount(); - if (messageCount > (this.currentMail - 1)) + if (messageCount > this.currentMail) { - Message mailMessage = this.pop3Client.GetMessage(this.currentMail); + MimeMessage mailMessage = this.pop3Client.GetMessage(this.currentMail); + if((mailMessage.Sender != null) && EmailValidator.Validate(mailMessage.Sender.Address)) + sender = mailMessage.Sender.Address; + if ((sender == null) && mailMessage.From.Count > 0) + { + foreach (MailboxAddress ma in mailMessage.From.Mailboxes) + { + if(EmailValidator.Validate(ma.Address)) + { + sender = ma.Address; + break; + } + } + } - if (mailMessage.Headers.Sender?.HasValidMailAddress == true) - sender = mailMessage.Headers.Sender.MailAddress.Address; - if ((sender == null) && (mailMessage.Headers.From?.HasValidMailAddress == true)) - sender = mailMessage.Headers.From.MailAddress.Address; - - MessagePart aPart = mailMessage.FindFirstPlainTextVersion(); - body = aPart?.GetBodyAsText(); - messageId = mailMessage.Headers.MessageId; - subject = mailMessage.Headers.Subject; + body = mailMessage.TextBody; + messageId = mailMessage.MessageId; + subject = mailMessage.Subject; this.currentMail++; // advance message pointer return true; @@ -129,32 +137,63 @@ namespace bsmd.email if (!IsConnected) return false; int messageCount = this.pop3Client.GetMessageCount(); - if (messageCount > (this.currentMail - 1)) + if (messageCount > this.currentMail) { - Message mailMessage = this.pop3Client.GetMessage(this.currentMail); + MimeMessage mailMessage = this.pop3Client.GetMessage(this.currentMail); - if (mailMessage.Headers.Sender?.HasValidMailAddress == true) - sender = mailMessage.Headers.Sender.MailAddress.Address; - if ((sender == null) && (mailMessage.Headers.From?.HasValidMailAddress == true)) - sender = mailMessage.Headers.From.MailAddress.Address; - - messageId = mailMessage.Headers.MessageId; - subject = mailMessage.Headers.Subject; - - foreach(MessagePart part in mailMessage.FindAllAttachments()) + if((mailMessage.Sender != null) && EmailValidator.Validate(mailMessage.Sender.Address)) + sender = mailMessage.Sender.Address; + if ((sender == null) && (mailMessage.From.Count > 0)) { - _log.InfoFormat("found attachment named {0}, ContentType {1}", part.FileName, part.ContentType); - if (part.FileName.EndsWith(".xls", StringComparison.InvariantCultureIgnoreCase)) + foreach (MailboxAddress ma in mailMessage.From.Mailboxes) { - attachmentLocalFile = Path.Combine(Properties.Settings.Default.ArchiveFolder, part.FileName); - part.Save(new FileInfo(attachmentLocalFile)); + if (EmailValidator.Validate(ma.Address)) + { + sender = ma.Address; + break; + } } - else if (part.FileName.EndsWith(".xlsx", StringComparison.InvariantCultureIgnoreCase)) + } + + messageId = mailMessage.MessageId; + subject = mailMessage.Subject; + + foreach (MimeEntity attachment in mailMessage.Attachments) + { + if (attachment is MessagePart rfc822) { - attachmentLocalFile = Path.Combine(Properties.Settings.Default.ArchiveFolder, part.FileName); - part.Save(new FileInfo(attachmentLocalFile)); + string filename = attachment.ContentDisposition?.FileName; + if(filename == null) + { + _log.InfoFormat("attachment {0} has no filename", attachment.ContentId); + continue; + } + _log.InfoFormat("found attachment named {0}, ContentType {1}", filename, attachment.ContentType); + + if (filename.EndsWith(".xls", StringComparison.InvariantCultureIgnoreCase) || + filename.EndsWith(".xlsx", StringComparison.InvariantCultureIgnoreCase)) + { + attachmentLocalFile = Path.Combine(Properties.Settings.Default.ArchiveFolder, filename); + using (var stream = File.Create(attachmentLocalFile)) + rfc822.Message.WriteTo(stream); + } + } + else + { + var part = (MimePart)attachment; + var filename = part.FileName; + if (filename != null) + { + if (filename.EndsWith(".xls", StringComparison.InvariantCultureIgnoreCase) || + filename.EndsWith(".xlsx", StringComparison.InvariantCultureIgnoreCase)) + { + attachmentLocalFile = Path.Combine(Properties.Settings.Default.ArchiveFolder, filename); + using (var stream = File.Create(attachmentLocalFile)) + part.Content.DecodeTo(stream); + } + } } - } + } this.currentMail++; // advance message pointer @@ -176,15 +215,19 @@ namespace bsmd.email // Run through each of these messages and download the headers for (int messageIndex = messageCount; messageIndex > 0; messageIndex--) { - // If the Message ID of the current message is the same as the parameter given, delete that message - if (this.pop3Client.GetMessageHeaders(messageIndex).MessageId.Equals(messageId)) + // If the Message ID of the current message is the same as the parameter given, delete that message + if (this.pop3Client.GetMessage(messageIndex).MessageId.Equals(messageId)) { // gefunden, Nachricht laden - Message mailMessage = this.pop3Client.GetMessage(messageIndex); - foreach (MessagePart part in mailMessage.FindAllAttachments()) + MimeMessage mailMessage = this.pop3Client.GetMessage(messageIndex); + foreach (MimeEntity attachment in mailMessage.Attachments) { - if (part.FileName.EndsWith(".pdf", StringComparison.InvariantCultureIgnoreCase)) - return part.FileName; + if(attachment is MessagePart) + { + var filename = attachment.ContentDisposition?.FileName; + if ((filename != null) && filename.EndsWith(".pdf", StringComparison.OrdinalIgnoreCase)) + return attachment.ContentDisposition?.FileName; + } } } } @@ -208,10 +251,10 @@ namespace bsmd.email int messageCount = this.pop3Client.GetMessageCount(); // Run trough each of these messages and download the headers - for (int messageItem = messageCount; messageItem > 0; messageItem--) + for (int messageItem = (messageCount - 1); messageItem >= 0; messageItem--) { // If the Message ID of the current message is the same as the parameter given, delete that message - if (this.pop3Client.GetMessageHeaders(messageItem).MessageId.Equals(messageId)) + if (this.pop3Client.GetMessage(messageItem).MessageId.Equals(messageId)) { // Delete this.pop3Client.DeleteMessage(messageItem); @@ -224,6 +267,87 @@ namespace bsmd.email } #endregion - + + #region MailKit helper / info / logging funcs + + #region SslConnectionInformation + + public static void PrintSslConnectionInfo() + { + using (var client = new SmtpClient()) + { + string host = Properties.Settings.Default.SMTPServer; + client.Connect(host, 587, SecureSocketOptions.Auto); + + Console.WriteLine($"Negotiated the following SSL options with {host}:"); + Console.WriteLine($" Protocol Version: {client.SslProtocol}"); + Console.WriteLine($" Cipher Algorithm: {client.SslCipherAlgorithm}"); + Console.WriteLine($" Cipher Strength: {client.SslCipherStrength}"); + Console.WriteLine($" Hash Algorithm: {client.SslHashAlgorithm}"); + Console.WriteLine($" Hash Strength: {client.SslHashStrength}"); + Console.WriteLine($" Key-Exchange Algorithm: {client.SslKeyExchangeAlgorithm}"); + Console.WriteLine($" Key-Exchange Strength: {client.SslKeyExchangeStrength}"); + + // Example Log: + // + // Negotiated the following SSL options with pop.gmail.com: + // Protocol Version: Tls12 + // Cipher Algorithm: Aes128 + // Cipher Strength: 128 + // Hash Algorithm: Sha256 + // Hash Strength: 0 + // Key-Exchange Algorithm: 44550 + // Key-Exchange Strength: 255 + + client.Disconnect(true); + } + } + + public static void PrintCapabilities() + { + using (var client = new Pop3Client()) + { + client.Connect(Properties.Settings.Default.POP3Server, Properties.Settings.Default.POP3Port, SecureSocketOptions.SslOnConnect); + + if (client.Capabilities.HasFlag(Pop3Capabilities.Sasl)) + { + var mechanisms = string.Join(", ", client.AuthenticationMechanisms); + Console.WriteLine("The POP3 server supports the following SASL mechanisms: {0}", mechanisms); + } + + client.Authenticate(Properties.Settings.Default.POP3User, Properties.Settings.Default.POP3Password); + + if (client.Capabilities.HasFlag(Pop3Capabilities.Apop)) + Console.WriteLine("The server supports APOP authentication."); + + if (client.Capabilities.HasFlag(Pop3Capabilities.Expire)) + { + if (client.ExpirePolicy > 0) + Console.WriteLine("The POP3 server automatically expires messages after {0} days", client.ExpirePolicy); + else + Console.WriteLine("The POP3 server will never expire messages."); + } + + if (client.Capabilities.HasFlag(Pop3Capabilities.LoginDelay)) + Console.WriteLine("The minimum number of seconds between login attempts is {0}.", client.LoginDelay); + + if (client.Capabilities.HasFlag(Pop3Capabilities.Pipelining)) + Console.WriteLine("The POP3 server can pipeline commands, so using client.GetMessages() will be faster."); + + if (client.Capabilities.HasFlag(Pop3Capabilities.Top)) + Console.WriteLine("The POP3 server supports the TOP command, so it's possible to download message headers."); + + if (client.Capabilities.HasFlag(Pop3Capabilities.UIDL)) + Console.WriteLine("The POP3 server supports the UIDL command which means we can track messages by UID."); + + client.Disconnect(true); + } + } + + #endregion + + + #endregion + } } diff --git a/nsw/Source/bsmd.email/bsmd.email.csproj b/nsw/Source/bsmd.email/bsmd.email.csproj index 3b6e88c1..ec0c1d5b 100644 --- a/nsw/Source/bsmd.email/bsmd.email.csproj +++ b/nsw/Source/bsmd.email/bsmd.email.csproj @@ -40,16 +40,29 @@ ..\bsmdKey.snk + + ..\packages\Portable.BouncyCastle.1.8.10\lib\net40\BouncyCastle.Crypto.dll + + + ..\packages\EmailValidation.1.0.4\lib\net45\EmailValidation.dll + ..\packages\log4net.2.0.8\lib\net45-full\log4net.dll True - - ..\packages\OpenPop.NET.2.0.6.1120\lib\net40\OpenPop.dll - True + + ..\packages\MailKit.2.13.0\lib\net45\MailKit.dll + + + ..\packages\MimeKit.2.13.0\lib\net45\MimeKit.dll + + ..\packages\System.Buffers.4.5.1\lib\netstandard1.1\System.Buffers.dll + + + diff --git a/nsw/Source/bsmd.email/packages.config b/nsw/Source/bsmd.email/packages.config index 2c7a1f81..c56e467e 100644 --- a/nsw/Source/bsmd.email/packages.config +++ b/nsw/Source/bsmd.email/packages.config @@ -1,5 +1,9 @@  + - + + + + \ No newline at end of file