// end added by mb /// <summary>Constructor using a file path</summary> /// <example> /// <code>Attachment a = new Attachment("C:\\file.jpg");</code> /// </example> public Attachment(string filePath) { this.filePath = filePath; if (filePath.Length > 0) { try { FileInfo fileInfo = new FileInfo(filePath); if (fileInfo.Exists) { this.mimeType = getMimeType(fileInfo.Extension); this.name = fileInfo.Name; this.size = (int)fileInfo.Length; string encodedTempFile = Path.GetTempFileName(); MailEncoder.ConvertToBase64(filePath, encodedTempFile); this.encodedFilePath = encodedTempFile; } } catch (ArgumentNullException) { throw new MailException("Attachment file does not exist or path is incorrect."); } } }
/// <summary> /// Encode the file for inclusion as a mime attachment. /// The boundaries are not provided. /// </summary> /// <returns></returns> public String ToMime() { StringBuilder sb = new StringBuilder(); if (ContentId != null) { sb.Append("Content-ID: <" + ContentId + ">\r\n"); } sb.Append("Content-Type: " + mimeType + ";\r\n"); sb.Append(" name=\"" + MailEncoder.ConvertToQP(name, null) + "\"\r\n"); sb.Append("Content-Transfer-Encoding: " + encoding + "\r\n"); sb.Append("Content-Disposition: attachment;\r\n"); sb.Append(" filename=\"" + MailEncoder.ConvertToQP(name, null) + "\"\r\n\r\n"); FileStream fin = new FileStream(encodedFilePath, FileMode.Open, FileAccess.Read); byte[] bin; while (fin.Position != fin.Length) { bin = new byte[76]; int len = fin.Read(bin, 0, 76); sb.Append(System.Text.Encoding.UTF8.GetString(bin, 0, len) + "\r\n"); } fin.Close(); return(sb.ToString()); }
// creates comma separated address list from to: and cc: private string CreateAddressList(ArrayList msgList) { StringBuilder sb = new StringBuilder(); int index = 1; int msgCount = msgList.Count; for (IEnumerator i = msgList.GetEnumerator(); i.MoveNext(); index++) { EmailAddress a = (EmailAddress)i.Current; // if the personal name exists, add it to the address sent. IE: "Ian Stallings" <*****@*****.**> if (a.FriendlyName != null && a.FriendlyName.Length > 0) { sb.Append("\"" + MailEncoder.ConvertHeaderToQP(a.FriendlyName, charset) + "\" <" + a.Address + ">"); } else { sb.Append("<" + a.Address + ">"); } // if it's not the last address add a semi-colon: if (msgCount != index) { sb.Append(","); } } return(sb.ToString()); }
private string GetTextMessageBody(string messageBody, string textType) { StringBuilder sb = new StringBuilder(); sb.Append("Content-Type: " + textType + ";\r\n"); sb.Append(" charset=\"" + charset + "\"\r\n"); sb.Append("Content-Transfer-Encoding: quoted-printable\r\n\r\n"); sb.Append(MailEncoder.ConvertToQP(messageBody, charset)); return(sb.ToString()); }
/// <summary>Constructor using a provided Stream</summary> /// <example> /// <code>Attachment a = new Attachment(new FileStrema(@"C:\file.jpg", FileMode.Open, FileAccess.Read), "file.jpg");</code> /// </example> public Attachment(Stream stream, string fileName) { try { this.mimeType = "unknown/application"; this.name = fileName; this.size = (int)stream.Length; string encodedTempFile = Path.GetTempFileName(); MailEncoder.ConvertToBase64(stream, encodedTempFile); this.encodedFilePath = encodedTempFile; } catch (ArgumentNullException) { throw new MailException("Attachment file does not exist or path is incorrect."); } }
/// <summary>Returns the MailMessage as a RFC 822 formatted message</summary> public override string ToString() { StringBuilder sb = new StringBuilder(60000); MimeHeaderLineBuilder lb = new MimeHeaderLineBuilder( ); lb.Traits.SetEncoderCharSet(charset); // reply to email address sb.Append( MimeCommon.ConcatMessageLine( lb.Traits, "Reply-To:", ReplyTo.ToMimeString(lb.Traits.EncoderCharSet), MimeConstants.CrLf)); // BgnTemp debug. an already encoded from email address. if (mEncodedFromAddress != null) { sb.Append(mEncodedFromAddress + MimeConstants.CrLf); } else { // EndTemp debug. // send from email address sb.Append( MimeCommon.ConcatMessageLine( lb.Traits, "From:", From.ToMimeString(lb.Traits.EncoderCharSet), MimeConstants.CrLf)); } // send to email address sb.Append( MimeCommon.ConcatMessageLine( lb.Traits, "To:", ToRecipients.ToMessageHeaderString(lb.Traits.EncoderCharSet), MimeConstants.CrLf)); // sb.Append( "Reply-To: " ) ; // sb.Append( ReplyTo.ToMimeString( charset )) ; // sb.Append( SmtpConstants.CrLf ) ; // sb.Append( "From: " + From.ToMimeStringToMessageHeaderString( charset )) ; // sb.Append( SmtpConstants.CrLf ) ; // sb.Append( "To: " + ToRecipients.ToMessageHeaderString( charset )) ; // sb.Append( SmtpConstants.CrLf ) ; if (CCRecipients.Count > 0) { sb.Append("CC: " + CCRecipients.ToMessageHeaderString(charset)); sb.Append(SmtpConstants.CrLf); } if (BCCRecipients.Count > 0) { sb.Append("BCC: " + BCCRecipients.ToMessageHeaderString(charset)); sb.Append(SmtpConstants.CrLf); } // message subject line. if (Stringer.IsNotEmpty(Subject)) { lb.Clear( ); lb.Append("Subject: "); lb.Append(Subject); sb.Append(lb.ToEncodedString( ) + MimeConstants.CrLf); } // BgnTemp debug. an already encoded subject line. if (mEncodedSubject != null) { sb.Append(mEncodedSubject + MimeConstants.CrLf); } // EndTemp debug. // send timestamp lb .Clear( ) .Append("Date: " + DateTime.Now.ToUniversalTime().ToString("R")); sb.Append(lb.ToEncodedString( ) + MimeConstants.CrLf); sb.Append(SmtpConfig.X_MAILER_HEADER + "\r\n"); if (notification) { if (ReplyTo.FriendlyName != null && ReplyTo.FriendlyName.Length != 0) { sb.Append("Disposition-Notification-To: " + MailEncoder.ConvertHeaderToQP(ReplyTo.FriendlyName, charset) + " <" + ReplyTo.Address + ">\r\n"); } else { sb.Append("Disposition-Notification-To: <" + ReplyTo.Address + ">\r\n"); } } if (priority != null) { sb.Append("X-Priority: " + priority + "\r\n"); } if (customHeaders != null) { for (IEnumerator i = customHeaders.GetEnumerator(); i.MoveNext();) { MailHeader m = (MailHeader)i.Current; if (m.name.Length >= 0 && m.body.Length >= 0) { sb.Append(m.name + ":" + MailEncoder.ConvertHeaderToQP(m.body, charset) + "\r\n"); } else { // TODO: Check if below is within RFC spec. sb.Append(m.name + ":\r\n"); } } } sb.Append("MIME-Version: 1.0\r\n"); sb.Append(GetMessageBody()); return(sb.ToString()); }