/// <summary> /// Creates a new SMTP email message. /// </summary> /// <param name="from">From Mail Box object.</param> /// <param name="to">To Mail Box object.</param> /// <param name="cc">CC Mailbox object.</param> /// <param name="subject">Subject line.</param> /// <param name="body">Message body.</param> /// <param name="filesToAttach">Files that has to be attached</param> public SmtpMessage(MailBox from, MailBox to, MailBox cc, string subject, string body, List<string> filesToAttach=null) { Initialize(); From = from; if (!String.IsNullOrEmpty(to.EmailAddress)) { To.Add(to); } if (cc != null && !string.IsNullOrEmpty(cc.EmailAddress)) { Cc.Add(cc); } Subject = subject; Body = body; if (filesToAttach != null) { HasAttachments = true; AttachedFiles = filesToAttach; } }
/// <summary> /// Creates the SMTP message body. /// </summary> /// <returns>The string representation of the message.</returns> public async Task <string> CreateMessageBody() { if (From == null) { throw new Exception("From field is missing."); } if (To.Count == 0) { throw new Exception("To field is missing."); } StringBuilder message = new StringBuilder(); message.AppendFormat("Date: {0}{1}", DateTime.Now.ToString(DATE_FORMAT), System.Environment.NewLine); message.AppendFormat("X-Priority: {0}{1}", ((byte)Priority).ToString(), System.Environment.NewLine); message.AppendFormat("From: \"{0}\"<{1}>{2}", From.Name, From.EmailAddress, System.Environment.NewLine); message.Append("To: "); for (int i = 0; i < To.Count; i++) { MailBox to = To[i]; string separator = i == To.Count - 1 ? Environment.NewLine : ", "; message.AppendFormat("\"{0}\"<{1}>{2}", to.Name, to.EmailAddress, separator); } if (Cc.Count > 0) { message.Append("Cc: "); } for (int i = 0; i < Cc.Count; i++) { MailBox cc = Cc[i]; string separator = i == Cc.Count - 1 ? Environment.NewLine : ", "; message.AppendFormat("\"{0}\"<{1}>{2}", cc.Name, cc.EmailAddress, separator); } if (Cc.Count > 0) { message.AppendFormat("{0}", Environment.NewLine); } message.AppendFormat("Subject: {0}{1}", Subject, Environment.NewLine); message.AppendFormat("MIME-Version: 1.0{0}", Environment.NewLine); if (HasAttachments) { message.AppendFormat("Content-Type: multipart/mixed; boundary=\"{0}\"{1}", Boundary, Environment.NewLine); message.AppendFormat("{0}", Environment.NewLine); message.AppendFormat("--{0}{1}", Boundary, Environment.NewLine); } if (IsHtml) { message.AppendFormat("Content-Type: text/html; {0}", System.Environment.NewLine); } else { message.AppendFormat("Content-Type: text/plain; charset=\"{0}\"{1}", Encoding.WebName, System.Environment.NewLine); } message.Append(Environment.NewLine); message.Append(Body); message.Append(Environment.NewLine); message.Append(Environment.NewLine); if (HasAttachments) { foreach (string file in AttachedFiles) { message.AppendFormat("--{0}{1}", Boundary, Environment.NewLine); message.AppendFormat("Content-Type: application/octet-stream;{0}", Environment.NewLine); message.AppendFormat("Content-Transfer-Encoding: base64{0}", Environment.NewLine); string filename = _findFileName(file); message.AppendFormat("Content-Disposition: attachment; filename= \"" + filename + "\" {0}", Environment.NewLine); string fileEncoded = await _encodeToBase64(file); message.Append(Environment.NewLine); message.Append(fileEncoded); message.Append(Environment.NewLine); } message.AppendFormat("--{0}--{1}", Boundary, Environment.NewLine); } message.Append("."); return(message.ToString()); }
/// <summary> /// Sends the specified email message. /// </summary> /// <param name="from">The sender's email address.</param> /// <param name="to">The receiver's email address.</param> /// <param name="subject">The subject line of the email.</param> /// <param name="message">The message body of the email.</param> /// <returns>True if the message was sent successfully. False otherwise.</returns> public async Task<bool> SendAsync(MailBox from, MailBox to, string subject, string message) { From = from; To = to; Subject = subject; Message = message; bool result = await SendAsync(); return result; }