// sends a single part mail to the server private void SendSinglepartMail(MailMessageWrapper msg) { // write the header smtp.WriteHeader(msg.Header); // send the mail body smtp.WriteBytes(msg.BodyEncoding.GetBytes(msg.Body)); }
public void Send(MailMessageWrapper msg) { if (msg.From == null) { throw new SmtpException("From property must be set."); } if (msg.To == null) { if (msg.To.Count < 1) { throw new SmtpException("Atleast one recipient must be set."); } } // start with a reset incase old data // is present at the server in this session smtp.WriteRset(); // write the mail from command smtp.WriteMailFrom(msg.From.Address); // write the rcpt to command for the To addresses foreach (MailAddress addr in msg.To) { smtp.WriteRcptTo(addr.Address); } // write the rcpt to command for the Cc addresses foreach (MailAddress addr in msg.Cc) { smtp.WriteRcptTo(addr.Address); } // write the rcpt to command for the Bcc addresses foreach (MailAddress addr in msg.Bcc) { smtp.WriteRcptTo(addr.Address); } // write the data command and then // send the email smtp.WriteData(); if (msg.Attachments.Count == 0) { SendSinglepartMail(msg); } else { SendMultipartMail(msg); } // write the data end tag "." smtp.WriteDataEndTag(); }
public void Send(MailMessage message) { EsmtpClient smtp = new EsmtpClient(smtpServer, username, password, use_ssl); // wrap the MailMessage in a MailMessage wrapper for easier // access to properties and to add some functionality MailMessageWrapper messageWrapper = new MailMessageWrapper(message); smtp.Send(messageWrapper); smtp.Close(); }
// sends a multipart mail to the server private void SendMultipartMail(MailMessageWrapper msg) { // generate the boundary between attachments string boundary = MailUtil.GenerateBoundary(); // set the Content-Type header to multipart/mixed string bodyContentType = msg.Header.ContentType; msg.Header.ContentType = System.String.Format("multipart/mixed;\r\n boundary={0}", boundary); // write the header smtp.WriteHeader(msg.Header); // write the first part text part // before the attachments smtp.WriteBoundary(boundary); MailHeader partHeader = new MailHeader(); partHeader.ContentType = bodyContentType; smtp.WriteHeader(partHeader); // FIXME: probably need to use QP or Base64 on everything higher // then 8-bit .. like utf-16 smtp.WriteBytes(msg.BodyEncoding.GetBytes(msg.Body)); smtp.WriteBoundary(boundary); // now start to write the attachments for (int i = 0; i < msg.Attachments.Count; i++) { MailAttachment a = (MailAttachment)msg.Attachments[i]; FileInfo fileInfo = new FileInfo(a.Filename); MailHeader aHeader = new MailHeader(); aHeader.ContentType = String.Format(MimeTypes.GetMimeType(fileInfo.Name) + "; name=\"{0}\"", fileInfo.Name); aHeader.ContentDisposition = String.Format("attachment; filename=\"{0}\"", fileInfo.Name); aHeader.ContentTransferEncoding = a.Encoding.ToString(); smtp.WriteHeader(aHeader); // perform the actual writing of the file. // read from the file stream and write to the tcp stream FileStream ins = fileInfo.OpenRead(); // create an apropriate encoder IAttachmentEncoder encoder; if (a.Encoding == MailEncoding.UUEncode) { encoder = new UUAttachmentEncoder(644, fileInfo.Name); } else { encoder = new Base64AttachmentEncoder(); } encoder.EncodeStream(ins, smtp.Stream); ins.Close(); smtp.WriteLine(""); // if it is the last attachment write // the final boundary otherwise write // a normal one. if (i < (msg.Attachments.Count - 1)) { smtp.WriteBoundary(boundary); } else { smtp.WriteFinalBoundary(boundary); } } }