Example #1
0
        static void Main(string[] args)
        {
            try
            {
                var o = CommandLineParser.ParseCommandLine <Options>(args);

                var template = File.ReadAllText(o.Template);
                var maillist = ReadTsv(o.Maillist).ToList();

                var service = new ExchangeService(ExchangeVersion.Exchange2013_SP1);
                NetworkCredential nc;
                Credential.GetCredentialsVistaAndUp("office365", out nc);
                service.Credentials = nc;
                if (o.TraceExchange)
                {
                    service.TraceEnabled = true;
                    service.TraceFlags   = TraceFlags.All;
                }
                service.Url = new Uri(o.ExchangeServer);

                if (o.Preview && !Directory.Exists(o.PreviewDir))
                {
                    Directory.CreateDirectory(o.PreviewDir);
                }

                Regex r = new Regex(@"^\s*([^:]+):\s*(.*)$");
                int   i = 0;
                foreach (var item in maillist)
                {
                    var mail = new EmailMessage(service);

                    var s = template;
                    foreach (var kvp in item)
                    {
                        s = s.Replace("[[" + kvp.Key + "]]", kvp.Value);
                    }

                    bool          foundEmpty = false;
                    StringBuilder body       = new StringBuilder();
                    foreach (var line in s.Split('\n'))
                    {
                        if (foundEmpty)
                        {
                            body.AppendLine(line); continue;
                        }
                        if (string.IsNullOrWhiteSpace(line))
                        {
                            foundEmpty = true; continue;
                        }
                        var m = r.Match(line);
                        if (!m.Success)
                        {
                            throw new Exception("bad header field " + line);
                        }
                        switch (m.Groups[1].Value.ToLowerInvariant())
                        {
                        case "subject": mail.Subject = m.Groups[2].Value.Trim(); break;

                        case "to": mail.ToRecipients.Add(m.Groups[2].Value.Trim()); break;

                        case "cc": mail.CcRecipients.Add(m.Groups[2].Value.Trim()); break;

                        case "bcc": mail.BccRecipients.Add(m.Groups[2].Value.Trim()); break;

                        case "attach": mail.Attachments.AddFileAttachment(m.Groups[2].Value.Trim()); break;

                        default:
                            throw new Exception("unknown field in template: " + m.Groups[1].Value);
                        }
                    }
                    mail.Body = body.ToString();

                    if (o.Preview)
                    {
                        using (var sw = new StreamWriter(Path.Combine(o.PreviewDir, string.Format("preview_{0}.html", ++i))))
                        {
                            sw.WriteLine("<pre>");
                            sw.WriteLine("Subject: " + mail.Subject);
                            foreach (var email in mail.ToRecipients)
                            {
                                sw.WriteLine("To: " + email.ToString());
                            }
                            foreach (var email in mail.CcRecipients)
                            {
                                sw.WriteLine("Cc: " + email.ToString());
                            }
                            foreach (var email in mail.BccRecipients)
                            {
                                sw.WriteLine("Bcc: " + email.ToString());
                            }
                            foreach (var attach in mail.Attachments)
                            {
                                sw.WriteLine("Attach: " + attach.Name);
                            }
                            sw.WriteLine("</pre>");
                            sw.WriteLine("<hr>");
                            sw.WriteLine(mail.Body);
                        }
                        continue;
                    }


                    mail.SendAndSaveCopy();
                }
            }
            catch (CommandLineParseError err)
            {
                Console.Error.WriteLine(err.Message);
                Console.Error.WriteLine(err.Usage);
                Environment.Exit(1);
            }
            catch (Exception exn)
            {
                Console.Error.WriteLine(exn.ToString());
                Environment.Exit(1);
            }
        }