// Dealing with Message Body public void MessageBodySerialization(delWriteData _idelwritedata) { //------------- // TODO: If the display name assigned value, set from, to to display name // If the display name not assigned value, use the default value (From, To); //------------- _idelwritedata(SMTPDefinition.ClientCFrom + ": " + this.From); _idelwritedata(SMTPDefinition.ClientCTo + ": " + this.To); //If subject contained non-English character if (SMTP.Utility.StringDetectors.NonEnglishChar(this.Subject)) { _idelwritedata(SMTPDefinition.ClientCSubject + ": =?" + this.EncodingName + "?B?" + SMTP.Utility.Base64Convertor.Convert(this.Subject, this.EncodingName) + "?="); } else { _idelwritedata(SMTPDefinition.ClientCSubject + ": " + this.Subject); } if (this.Cc != null && this.Cc.Trim() != "") { _idelwritedata(SMTPDefinition.ClientCCc + ": " + this.Cc); } //if file attached, use multipart/mixed to send message, or else sending message as the simplest way. if (this.Attachments.Count > 0 || this.EnforceMultiPart) { //------------- // TODO: A MIME version controller. //------------- _idelwritedata(SMTPDefinition.ClientCMIMEVersion + ": 1.0"); _idelwritedata(SMTPDefinition.ClientCContentType + ": " + SMTPDefinition.ClientCContentTypeOption.MultipartMixed + ";"); //Generate a boundary SMTPDefinition.ClientCBoundary currBoundary = new SMTPDefinition.ClientCBoundary(); //------------- // TODO: boundary key generator, generate a key which never appeared in the other part of mail message. // Sample "01C73E90.8304A050" //------------- currBoundary.Key = "01C73E90.8304A050"; currBoundary.SubKey = "001"; _idelwritedata("\t" + SMTPDefinition.ClientCBoundaryName + "=\"" + currBoundary.Boundary + "\""); //Display a message if user client do not support Multi-part format. _idelwritedata(""); _idelwritedata("This is a multi-part message in MIME format."); _idelwritedata(""); //Begin to write content. _idelwritedata(currBoundary.NormalBoundary); //------------- // TODO: get content type from registry and add some logical for the multi part message generator. //..............And the charset //------------- _idelwritedata(SMTPDefinition.ClientCContentType + ": " + SMTPDefinition.ClientCContentTypeOption.TextPlain + "; charset=\"" + this.EncodingName + "\""); //if require base64 if (this.MessageEncoding == MessageEncoding.Base64 || SMTP.Utility.StringDetectors.NonEnglishChar(this.Message)) { _idelwritedata(SMTPDefinition.ClientCContentTransferEncoding + ": " + SMTPDefinition.ClientCContentTransferEncodingOption.Base64); _idelwritedata(""); _idelwritedata(SMTP.Utility.Base64Convertor.Convert(this.Message, this.EncodingName)); } else if (this.MessageEncoding == MessageEncoding.Printable) { _idelwritedata(SMTPDefinition.ClientCContentTransferEncoding + ": " + SMTPDefinition.ClientCContentTransferEncodingOption.QuotedPrintable); _idelwritedata(""); _idelwritedata(this.Message); } //Write file streams int i; for (i = 0; i < this.Attachments.Count; i++) { _idelwritedata(currBoundary.NormalBoundary); _idelwritedata(SMTPDefinition.ClientCContentType + ": " + SMTPDefinition.ClientCContentTypeOption.AplicationStream + ";\r\n\tname=\"" + (this.MessageEncoding == MessageEncoding.Base64 || SMTP.Utility.StringDetectors.NonEnglishChar(this.Attachments[i].FileName) ? "=?" + this.EncodingName + "?b?" + SMTP.Utility.Base64Convertor.Convert(this.Attachments[i].FileName) + "?=" : this.Attachments[i].FileName + "\"")); _idelwritedata(SMTPDefinition.ClientCContentTransferEncoding + ": " + SMTPDefinition.ClientCContentTransferEncodingOption.Base64); //If non-english characters are found if (this.MessageEncoding == MessageEncoding.Base64 || SMTP.Utility.StringDetectors.NonEnglishChar(this.Attachments[i].FileName)) { _idelwritedata(SMTPDefinition.ClientCContentDescription + ": " + "=?" + this.EncodingName + "?b?" + SMTP.Utility.Base64Convertor.Convert(this.Attachments[i].FileName) + "?="); } else { _idelwritedata(SMTPDefinition.ClientCContentDescription + ": " + this.Attachments[i].FileName); } _idelwritedata(SMTPDefinition.ClientCContentDisposition + ": " + SMTPDefinition.ClientCContentDispositionOption.Attachment + "; filename=\"" + (this.MessageEncoding == MessageEncoding.Base64 || SMTP.Utility.StringDetectors.NonEnglishChar(this.Attachments[i].FileName) ? "=?" + this.EncodingName + "?b?" + SMTP.Utility.Base64Convertor.Convert(this.Attachments[i].FileName) + "?=" : this.Attachments[i].FileName + "\"")); _idelwritedata(""); _idelwritedata(this.EncodeFile(this.Attachments[i].Path)); } _idelwritedata(currBoundary.EndBoundary); } //Text/plain mode else { //if require base64 if (this.MessageEncoding == MessageEncoding.Base64 || SMTP.Utility.StringDetectors.NonEnglishChar(this.Message)) { _idelwritedata(SMTPDefinition.ClientCContentType + ": " + SMTPDefinition.ClientCContentTypeOption.TextPlain + "; charset=\"" + this.EncodingName + "\""); _idelwritedata(SMTPDefinition.ClientCContentTransferEncoding + ": " + SMTPDefinition.ClientCContentTransferEncodingOption.Base64); _idelwritedata(""); _idelwritedata(SMTP.Utility.Base64Convertor.Convert(this.Message, this.EncodingName)); } else if (this.MessageEncoding == MessageEncoding.Printable) { _idelwritedata(""); _idelwritedata(this.Message); } } }
// Dealing with Message Body public void MessageBodySerialization(delWriteData _idelwritedata) { //------------- // TODO: If the display name assigned value, set from, to to display name // If the display name not assigned value, use the default value (From, To); //------------- _idelwritedata(SMTPDefinition.ClientCFrom + ": " + this.From); _idelwritedata(SMTPDefinition.ClientCTo + ": " + this.To); //If subject contained non-English character if (SMTP.Utility.StringDetectors.NonEnglishChar(this.Subject)) _idelwritedata(SMTPDefinition.ClientCSubject + ": =?" + this.EncodingName + "?B?" + SMTP.Utility.Base64Convertor.Convert(this.Subject, this.EncodingName) + "?="); else _idelwritedata(SMTPDefinition.ClientCSubject + ": " + this.Subject); if (this.Cc != null && this.Cc.Trim() != "") { _idelwritedata(SMTPDefinition.ClientCCc + ": " + this.Cc); } //if file attached, use multipart/mixed to send message, or else sending message as the simplest way. if (this.Attachments.Count > 0 || this.EnforceMultiPart) { //------------- // TODO: A MIME version controller. //------------- _idelwritedata(SMTPDefinition.ClientCMIMEVersion + ": 1.0"); _idelwritedata(SMTPDefinition.ClientCContentType + ": " + SMTPDefinition.ClientCContentTypeOption.MultipartMixed + ";"); //Generate a boundary SMTPDefinition.ClientCBoundary currBoundary = new SMTPDefinition.ClientCBoundary(); //------------- // TODO: boundary key generator, generate a key which never appeared in the other part of mail message. // Sample "01C73E90.8304A050" //------------- currBoundary.Key = "01C73E90.8304A050"; currBoundary.SubKey = "001"; _idelwritedata("\t" + SMTPDefinition.ClientCBoundaryName + "=\"" + currBoundary.Boundary + "\""); //Display a message if user client do not support Multi-part format. _idelwritedata(""); _idelwritedata("This is a multi-part message in MIME format."); _idelwritedata(""); //Begin to write content. _idelwritedata(currBoundary.NormalBoundary); //------------- // TODO: get content type from registry and add some logical for the multi part message generator. //..............And the charset //------------- _idelwritedata(SMTPDefinition.ClientCContentType + ": " + SMTPDefinition.ClientCContentTypeOption.TextPlain + "; charset=\"" + this.EncodingName + "\""); //if require base64 if (this.MessageEncoding == MessageEncoding.Base64 || SMTP.Utility.StringDetectors.NonEnglishChar(this.Message)) { _idelwritedata(SMTPDefinition.ClientCContentTransferEncoding + ": " + SMTPDefinition.ClientCContentTransferEncodingOption.Base64); _idelwritedata(""); _idelwritedata(SMTP.Utility.Base64Convertor.Convert(this.Message, this.EncodingName)); } else if (this.MessageEncoding == MessageEncoding.Printable) { _idelwritedata(SMTPDefinition.ClientCContentTransferEncoding + ": " + SMTPDefinition.ClientCContentTransferEncodingOption.QuotedPrintable); _idelwritedata(""); _idelwritedata(this.Message); } //Write file streams int i; for (i = 0; i < this.Attachments.Count; i++) { _idelwritedata(currBoundary.NormalBoundary); _idelwritedata(SMTPDefinition.ClientCContentType + ": " + SMTPDefinition.ClientCContentTypeOption.AplicationStream + ";\r\n\tname=\"" + (this.MessageEncoding == MessageEncoding.Base64 || SMTP.Utility.StringDetectors.NonEnglishChar(this.Attachments[i].FileName) ? "=?" + this.EncodingName + "?b?" + SMTP.Utility.Base64Convertor.Convert(this.Attachments[i].FileName) + "?=" : this.Attachments[i].FileName + "\"")); _idelwritedata(SMTPDefinition.ClientCContentTransferEncoding + ": " + SMTPDefinition.ClientCContentTransferEncodingOption.Base64); //If non-english characters are found if (this.MessageEncoding == MessageEncoding.Base64 || SMTP.Utility.StringDetectors.NonEnglishChar(this.Attachments[i].FileName)) _idelwritedata(SMTPDefinition.ClientCContentDescription + ": " + "=?" + this.EncodingName + "?b?" + SMTP.Utility.Base64Convertor.Convert(this.Attachments[i].FileName) + "?="); else _idelwritedata(SMTPDefinition.ClientCContentDescription + ": " + this.Attachments[i].FileName); _idelwritedata(SMTPDefinition.ClientCContentDisposition + ": " + SMTPDefinition.ClientCContentDispositionOption.Attachment + "; filename=\"" + (this.MessageEncoding == MessageEncoding.Base64 || SMTP.Utility.StringDetectors.NonEnglishChar(this.Attachments[i].FileName) ? "=?" + this.EncodingName + "?b?" + SMTP.Utility.Base64Convertor.Convert(this.Attachments[i].FileName) + "?=" : this.Attachments[i].FileName + "\"")); _idelwritedata(""); _idelwritedata(this.EncodeFile(this.Attachments[i].Path)); } _idelwritedata(currBoundary.EndBoundary); } //Text/plain mode else { //if require base64 if (this.MessageEncoding == MessageEncoding.Base64 || SMTP.Utility.StringDetectors.NonEnglishChar(this.Message)) { _idelwritedata(SMTPDefinition.ClientCContentType + ": " + SMTPDefinition.ClientCContentTypeOption.TextPlain + "; charset=\"" + this.EncodingName + "\""); _idelwritedata(SMTPDefinition.ClientCContentTransferEncoding + ": " + SMTPDefinition.ClientCContentTransferEncodingOption.Base64); _idelwritedata(""); _idelwritedata(SMTP.Utility.Base64Convertor.Convert(this.Message, this.EncodingName)); } else if (this.MessageEncoding== MessageEncoding.Printable) { _idelwritedata(""); _idelwritedata(this.Message); } } }