public void sendAttachedFile(string filename, byte[] data, bool bTilPBS) { string local_filename = filename.Replace('.', '_') + ".txt"; Chilkat.MailMan mailman = new Chilkat.MailMan(); bool success; success = mailman.UnlockComponent("HAFSJOMAILQ_9QYSMgP0oR1h"); if (success != true) { throw new Exception(mailman.LastErrorText); } // Use the GMail SMTP server mailman.SmtpHost = Program.Smtphost; mailman.SmtpPort = int.Parse(Program.Smtpport); mailman.SmtpSsl = bool.Parse(Program.Smtpssl); // Set the SMTP login/password. mailman.SmtpUsername = Program.Smtpuser; mailman.SmtpPassword = Program.Smtppasswd; // Create a new email object Chilkat.Email email = new Chilkat.Email(); if (bTilPBS) { #if (DEBUG) email.Subject = "Test Til PBS: " + local_filename; email.Body = "Test Til PBS: " + local_filename; #else email.Subject = "Til PBS: " + local_filename; email.Body = "Til PBS: " + local_filename; #endif } else { #if (DEBUG) email.Subject = "Test Fra PBS: " + local_filename; email.Body = "Test Fra PBS: " + local_filename; #else email.Subject = "Fra PBS: " + local_filename; email.Body = "Fra PBS: " + local_filename; #endif } email.AddTo(Program.MailToName, Program.MailToAddr); email.From = Program.MailFrom; email.ReplyTo = Program.MailReply; email.AddDataAttachment2(local_filename, data, "text/plain"); email.UnzipAttachments(); success = mailman.SendEmail(email); if (success != true) { throw new Exception(email.LastErrorText); } }
public void Process(MyEmailEventArgs e) { Console.WriteLine("Forwarding message {0}!!!", e.Subject); Chilkat.Email mail = mailMan.FetchEmail(e.Uidl); if (mail == null) { Console.WriteLine("Cannot get the remail {0}", e.Uidl); return; } Chilkat.Email forwardMail = mail.CreateForward(); forwardMail.From = "*****@*****.**"; forwardMail.AddTo("Thao Vo", "*****@*****.**"); bool success = mailMan.SendEmail(forwardMail); if (success == false) { Console.WriteLine(mailMan.LastErrorText); } PostProcessCommand(e); }
public void sendAttachedFile(string MailBody) { Chilkat.MailMan mailman = new Chilkat.MailMan(); bool success; success = mailman.UnlockComponent("HAFSJOMAILQ_9QYSMgP0oR1h"); if (success != true) { throw new Exception(mailman.LastErrorText); } // Use the GMail SMTP server mailman.SmtpHost = Program.Smtphost; mailman.SmtpPort = int.Parse(Program.Smtpport); mailman.SmtpSsl = bool.Parse(Program.Smtpssl); // Set the SMTP login/password. mailman.SmtpUsername = Program.Smtpuser; mailman.SmtpPassword = Program.Smtppasswd; // Create a new email object Chilkat.Email email = new Chilkat.Email(); #if (DEBUG) email.Subject = "Filer klar til afhentning Fra PBS Test"; email.Body = MailBody; #else email.Subject = "Filer klar til afhentning Fra PBS"; email.Body = MailBody; #endif email.AddTo(Program.MailToName, Program.MailToAddr); email.From = Program.MailFrom; email.ReplyTo = Program.MailReply; success = mailman.SendEmail(email); if (success != true) { throw new Exception(email.LastErrorText); } }
public static bool SendEmailWithChilkat(MailMessage mailMessage, string attachfilePath) { //using (Chilkat.Imap imap = new Imap()) //{ Chilkat.MailMan mailman = new Chilkat.MailMan(); mailman.UnlockComponent("EASYDAIMAPMAILQ_vcyhVCXs2N0G"); // Set the SMTP server. mailman.SmtpHost = MailServer.HostName; // Set the SMTP login/password (if required) mailman.SmtpUsername = MailServer.UserName; mailman.SmtpPassword = MailServer.Password; // Connect to SMTP port 465 using TLS. mailman.SmtpSsl = true; mailman.SmtpPort = MailServer.HostPort; // Create a new email object Chilkat.Email email = new Chilkat.Email(); email.Subject = mailMessage.Subject; email.From = mailMessage.From.ToString(); email.Body = mailMessage.Body; //email.Subject = "This is a test"; //email.Body = "This is a test"; //email.From = "*****@*****.**"; bool success = email.AddTo("", mailMessage.To[0].Address.ToString()); if (mailMessage.CC.Count > 0) { success = email.AddCC("", mailMessage.CC[0].Address.ToString()); } // To add more recipients, call AddTo, AddCC, or AddBcc once per recipient. // Add some attachments. // The AddFileAttachment method returns the value of the content-type it chose for the attachment. string contentType = email.AddFileAttachment(attachfilePath); //if (email.LastMethodSuccess != true) //{ // Debug.WriteLine(email.LastErrorText); // return false; //} // Call SendEmail to connect to the SMTP server and send. // The connection (i.e. session) to the SMTP server remains // open so that subsequent SendEmail calls may use the // same connection. success = mailman.SendEmail(email); if (success != true) { Debug.WriteLine(mailman.LastErrorText); throw new Exception(mailman.LastErrorText); } success = mailman.CloseSmtpConnection(); if (success != true) { Debug.WriteLine("Connection to SMTP server not closed cleanly."); } Debug.WriteLine("Mail with attachments sent!"); try { saveEmailToSendItem(email); } catch (Exception ex) { Logger.LogInfo("Error in save email to send item:" + ex.ToString()); } return(true); //} //return true; }
public bool SendEmail(string subject, string body, string emailFrom, string emailTo) { // The mailman object is used for receiving (POP3) // and sending (SMTP) email. Chilkat.MailMan mailman = new Chilkat.MailMan(); // Note: This example requires licenses to both "Chilkat Email" and "Chilkat MHT". // Any string argument automatically begins the 30-day trial. bool success; success = mailman.UnlockComponent(ChilkatEmailUnlock); if (success != true) return false; Chilkat.Email email = new Chilkat.Email(); email.Subject = subject; email.Body = body; email.AddTo(emailTo, emailTo); email.From = emailFrom; mailman.SmtpHost = strSmtpHost; mailman.SmtpUsername = strSmtpUser; mailman.SmtpPassword = strSmtpPass; mailman.SmtpPort = iSmtpPort; mailman.StartTLS = startTLS; if (Charset.Length != 0) email.Charset = Charset; success = mailman.SendEmail(email); if (success != true) return false; success = mailman.CloseSmtpConnection(); return true; }
/// <summary> /// Get all the leads from the database and do stuff with them. That doesn't sound very good does it. /// </summary> /// <param name="testLead">(Optional) A test lead to send to rather than DB leads.</param> /// <remarks> /// This should probably go in ApplicationManager with callbacks and stuff for logging. Todo. /// </remarks> private void ProcessNewDatabaseLeads(Lead testLead) { const string genericTeamName = "WARRIORS"; const string defaultTemplateDesc1 = "Football"; const string defaultTemplateDesc2 = "Baseball"; const int customJersyImageWidth = 150; const string imagesSubdir = "images"; const string commonSubdir = "common"; const string tempSubdir = "temp"; const int maxNumLeadsCommonSense = 5; int sendRetries = 0; // // Debugging mode doesn't send emails to leads, but it sends them to a test account. // bool debugging = _settings.DebuggingMode; Log("Processing new leads in db, debugging mode: {0}...", debugging); string errMsg = string.Empty; string outputEmailFile = Functions.BuildFilenameFromElements(_settings.EmailSrcDir, "output-temp.htm"); // // Read header row, then read the row we want. // StreamReader reader = File.OpenText(Functions.BuildFilenameFromElements(_settings.EmailSrcDir, string.Format("lead-email-{0}.htm", _settings.EmailTemplateNo))); string emailTemplateOrig = reader.ReadToEnd(); reader.Close(); // The mailman object is used for sending and receiving email. Chilkat.MailMan mailman = new Chilkat.MailMan(); // The MHT component can be used to convert an HTML page // from a URL, file, or in-memory HTML into an email // with embedded images and style sheets. Chilkat.Mht mht = new Chilkat.Mht(); // Any string argument automatically begins the 30-day trial. bool success; // success = mailman.UnlockComponent(Config.ChilkatUnlockCodeEmail); success = mailman.UnlockComponent(ChilkatRegCodes.ChilkatEmail); if (success != true) { Log("Component unlock failed"); return; } // success = mht.UnlockComponent(Config.ChilkatUnlockCodeEmail); success = mht.UnlockComponent(ChilkatRegCodes.ChilkatMHT); if (success != true) { Log("Mht component unlock failed"); return; } // Set the SMTP server. mailman.SmtpHost = Config.LeadMailboxServer; // Set the SMTP login/password (if required) mailman.SmtpUsername = Config.LeadMailboxLoginUID; mailman.SmtpPassword = Config.LeadMailboxLoginPW; // // Set up parameters to append to all the email links so Google Analytics can track the clicks for us. // Campaign campaign = new Campaign(); // Todo: grab this from the db & config file campaign.Source = "fundraisingweb"; campaign.Medium = (debugging || testLead != null) ? "testing" : "email"; campaign.Content = _settings.EmailTemplateNo; List <Lead> leads; if (testLead == null) { Log("Getting leads from db..."); leads = DataManager.GetNewFundraisingLeads(); } else { leads = new List <Lead>(); leads.Add(testLead); } if (leads.Count > maxNumLeadsCommonSense) { string msg = string.Format("An unusually high amount of leads were returned from the db ({0}), do you wish to send emails anyway?", leads.Count); if (MessageBox.Show(msg, "Sanity Check", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No) { // Close the program btnClose_Click(null, null); } } foreach (Lead lead in leads) { Log("Processing lead: {0}", lead); if (!_doingProcessing && testLead == null) { // // We were signalled to stop processing // Log("User signalled to quit, exiting..."); return; } string emailTemplate = emailTemplateOrig; //Lead lead = leads[0]; // ApplicationManager.SetFundraisingIdeasProperties(lead); // const int totalNumberOfTemplates = 5; // string templateDescShort = Functions.FirstNonemptyString(lead.TemplateDescShort, "Football"); // // Otherwise, make it 1 so that we put in two different template graphics. // // int altTemplate = lead.TemplateDescShort == string.Empty ? 1 : 0; string customName; if (!Functions.IsEmptyString(lead.LastName) && lead.LastName.Length <= 13) { customName = lead.LastName; } else if (!Functions.IsEmptyString(lead.FirstName) && lead.LastName.Length <= 13) { customName = lead.FirstName; } else { customName = "anyname"; } customName = customName.ToUpper(); string customNumber = string.Format("{0:yy}", DateTime.Now); Template template1 = lead.TemplateCurrent; Template template2 = lead.TemplateCurrent; // If we have a specific template specified, use them both. Otherwise, use the default and another one. if (template1 == null) { template1 = DataManager.GetTemplate(defaultTemplateDesc1); // template2 = DataManager.GetTemplate(((template1.TemplateId + 1) % totalNumberOfTemplates + 1) + 1); template2 = DataManager.GetTemplate(defaultTemplateDesc2); } //Template template1 = DataManager.GetTemplate(templateDescShort); //Template template2 = DataManager.GetTemplate((template1.TemplateId + altTemplate) % totalNumberOfTemplates); PlayerSeason example1 = new PlayerSeason(customName, customNumber); PlayerSeason example2 = new PlayerSeason(genericTeamName, customNumber); example1.TemplateCurrent = template1; example2.TemplateCurrent = template2; string example1File = string.Format("{0}_{1:000}_{2}_{3}.jpg", template1.TemplateDescShort, template1.TemplateId, customName, customNumber); string example1FPath = Functions.BuildFilenameFromElements( _settings.EmailSrcDir, imagesSubdir, tempSubdir, example1File); string example2File = string.Format("{0}_{1:000}_{2}_{3}.jpg", template2.TemplateDescShort, template2.TemplateId, genericTeamName, customNumber); string example2FPath = Functions.BuildFilenameFromElements( _settings.EmailSrcDir, imagesSubdir, commonSubdir, example2File); Log("Creating image: {0}", example1File); ApplicationManager.WritePlayerMarketingGIFFile(example1, customJersyImageWidth, example1FPath, debugging); Log("Creating image: {0}", example2File); ApplicationManager.WritePlayerMarketingGIFFile(example2, customJersyImageWidth, example2FPath, debugging); // // Personalize the email. // Dictionary <string, string> replacements = new Dictionary <string, string>(); replacements.Add("[cust_fname]", Functions.TitleCase(Functions.FirstNonemptyString(lead.FirstName.ToLower(), lead.LastName.ToLower(), "Hi future fundraiser"))); replacements.Add("[current_year_2digit]", customNumber); replacements.Add("[homepage_href]", ApplicationManager.BuildWebsiteLink(null, campaign)); string addtlLi = string.Empty; if (lead.IsAthletics) { addtlLi = string.Format("<li>Your {0} team!</li>", lead.TemplateCurrent.TemplateDescShort); } replacements.Add("[perfect_for_addtl_li]", addtlLi); replacements.Add("[specific_jersey_href]", ApplicationManager.BuildWebsiteLink(example1, campaign)); replacements.Add("[alternate_jersey_href]", ApplicationManager.BuildWebsiteLink(example2, campaign)); replacements.Add("[specific_jersey_image]", Functions.BuildUrlFromElements(imagesSubdir, tempSubdir, example1File)); replacements.Add("[alternate_jersey_image]", Functions.BuildUrlFromElements(imagesSubdir, commonSubdir, example2File)); replacements.Add("[homepage_href_fundraisingpage]", ApplicationManager.BuildWebsiteLink(null, campaign, Config.WebsiteFundraisingPage)); replacements.Add("[unsubscribe_url]", string.Format("mailto:{0}?subject=unsubscribe&body=Your%20stickers%20are%20great%20but%20please%20unsubscribe%20me.", Config.LeadMailboxLoginUID)); replacements.Add("[how_user_entered_info]", "to the \"Fundraising Ideas\" website"); // // Validate the row, all these fields must be there or we're wasting our time. // foreach (KeyValuePair <string, string> replacement in replacements) { if (!emailTemplate.Contains(replacement.Key)) { errMsg = string.Format("Cannot find required value in output file: \"{0}\"", replacement.Key); throw new ApplicationException(errMsg); // // Do something with the error here. // } else { emailTemplate = emailTemplate.Replace(replacement.Key, replacement.Value); } } MatchCollection leftovers1 = Regex.Matches(emailTemplate, "(\\[.*\\])"); if (leftovers1.Count > 0) { string msg = "You need to implement the following tokens:\r\n\r\n"; foreach (Match token in leftovers1) { msg = Functions.BuildStringFromElementsWithDelimiter(msg, token.Groups[0].ToString(), "\r\n"); } MessageBox.Show(msg, "Fix These", MessageBoxButtons.OK, MessageBoxIcon.Stop); return; } string emailSubject = Functions.GetValueFromText(emailTemplate, "<title>(.*)</title>"); Functions.WriteStringAsFile(emailTemplate, outputEmailFile); Log("Done creating email, now gonna email it."); // Create a new email object Chilkat.Email email = new Chilkat.Email(); // Embed the images in the email - Outlook friendly. mht.UseCids = true; // Create an email from an HTML file. email = mht.GetEmail(outputEmailFile); if (email == null) { MessageBox.Show(mht.LastErrorText); return; } email.Subject = emailSubject; // email.Body = "This is a test"; email.From = string.Format("Fan Favorite Designs <{0}>", Config.LeadMailboxLoginUID); email.ReplyTo = Config.LeadMailboxLoginUID; if (debugging) { email.AddTo("Lead Monitor", "*****@*****.**"); } else { email.AddTo(lead.BuildFullName(), lead.EmailAddress); // email.AddBcc("Lead Monitor", "*****@*****.**"); } Chilkat.HtmlToText h2t = new Chilkat.HtmlToText(); // success = h2t.UnlockComponent(Config.ChilkatUnlockCodeEmail); success = h2t.UnlockComponent(ChilkatRegCodes.ChilkatHTMLtoXML); if (success != true) { MessageBox.Show(h2t.LastErrorText); return; } // Get the email's HTML body. string html; html = email.GetHtmlBody(); // Convert it to plain text: string plainText; plainText = h2t.ToText(html); // Add a few things so the email makes sense. plainText = string.Format("This email was meant to be viewed in HTML mode. You can visit \r\nour website here to get a better look at our product.\r\n\r\n {0}\r\n{1}", ApplicationManager.BuildWebsiteLink(null, campaign), plainText); // Add a plain-text alternative to the email: email.AddPlainTextAlternativeBody(plainText); // Call SendEmail to connect to the SMTP server and send. // The connection (i.e. session) to the SMTP server remains // open so that subsequent SendEmail calls may use the // same connection. Log("Sending SMTP mail..."); success = mailman.SendEmail(email); if (success != true) { sendRetries++; if (sendRetries < 5) { Log("Can't send email, gonna hang out for a bit, and try again."); Thread.Sleep(20000); } else { throw new ApplicationException("Cannot send email - cannot continue."); } } else if (!debugging && testLead == null) { // // Update the DB indicating that we sent the email so we don't do it again. // bool res = DataManager.AddLeadStatusLog(lead, Lead.LeadStatusCode.lscEmailSent, string.Format("lead-email-{0}.htm", _settings.EmailTemplateNo)); if (res) { Log("Updated status log - all good."); } else { Log("Yikes, can't update status log that we emailed! Bombing out."); throw new ApplicationException("Cannot update status log - cannot continue."); } sendRetries = 0; } else { Log("Email success; debug mode - not updating DB"); sendRetries = 0; } // Some SMTP servers do not actually send the email until // the connection is closed. In these cases, it is necessary to // call CloseSmtpConnection for the mail to be sent. // Most SMTP servers send the email immediately, and it is // not required to close the connection. We'll close it here // for the example: success = mailman.CloseSmtpConnection(); if (success != true) { Log("Connection to SMTP server not closed cleanly."); throw new ApplicationException("Cannot disconnect from SMTP server cleanly - cannot continue."); } } Log("Cleaning up temp files, if any."); string tempDirPath = Functions.BuildFilenameFromElements( _settings.EmailSrcDir, imagesSubdir, tempSubdir); string[] tempFiles = Directory.GetFiles(tempDirPath); foreach (string file in tempFiles) { File.Delete(file); } // todo: add icon to exe // todo: buy chilkat components Log("Processing of db leads completed"); }