Example #1
0
        // 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.");
                }
            }
        }
Example #2
0
        /// <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());
        }
Example #3
0
        // 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());
        }
Example #4
0
        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());
        }
Example #5
0
        /// <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.");
            }
        }
Example #6
0
        /// <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());
        }