| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- using System.Text;
- using System.Text.RegularExpressions;
- namespace MailFromWho
- {
- internal class Format
- {
- private readonly Settings _settings;
- public Format(Settings settings)
- {
- _settings = settings;
- }
- internal void CreateCSV()
- {
- string? line;
- Dictionary<string, List<string>> addresses = new Dictionary<string, List<string>>();
- // Read the file and display it line by line.
- var inFile = new System.IO.StreamReader(_settings.IntermediateFile);
- using (var outFile = new System.IO.StreamWriter(_settings.CsvFile))
- {
- while ((line = inFile.ReadLine()) != null)
- {
- char[] quotes = { '\"' };
- var emailAddress = ExtractEmails(line);
- if (emailAddress != null)
- {
- emailAddress = emailAddress.ToLower();
- var alias = line.Replace($"<{emailAddress}>", "").Trim().Trim(quotes);
- if (addresses.ContainsKey(emailAddress))
- {
- var aliasses = addresses[emailAddress];
- if (!aliasses.Contains(alias))
- {
- aliasses.Add(alias);
- }
- }
- else
- {
- var aliasses = new List<string>();
- if (!string.IsNullOrEmpty(alias))
- {
- aliasses.Add(alias);
- }
- addresses.Add(emailAddress, aliasses);
- }
- }
- }
- List<KeyValuePair<string, List<string>>> addressList = addresses.ToList();
- addressList.Sort(
- delegate (KeyValuePair<string, List<string>> pair1,
- KeyValuePair<string, List<string>> pair2)
- {
- var emailRegex = new Regex(@"\w+([-+.]\w+)*@(?<domain>\w+([-.]\w+)*\.\w+([-.]\w+)*)",
- RegexOptions.IgnoreCase);
- var domain1 = emailRegex.Match(pair1.Key).Groups["domain"].Value;
- var domain2 = emailRegex.Match(pair2.Key).Groups["domain"].Value;
- return domain1.CompareTo(domain2);
- }
- );
- foreach (var address in addressList)
- {
- var sb = new StringBuilder(address.Key);
- foreach (var alias in address.Value)
- {
- sb.Append(',').Append(alias);
- }
- var outLine = sb.ToString();
- System.Console.WriteLine(outLine);
- outFile.WriteLine(outLine);
- }
- }
- inFile.Close();
- }
- public string? ExtractEmails(string lineIn)
- {
- var emailRegex = new Regex(@"\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*",
- RegexOptions.IgnoreCase);
- //find items that matches with our pattern
- var emailMatches = emailRegex.Matches(lineIn);
- foreach (Match emailMatch in emailMatches)
- {
- return emailMatch.Value;
- }
- return null;
- }
- }
- }
|