Revision: 53
Author: tmyroadctfig
Date: 2006-07-01 01:36:49 -0700 (Sat, 01 Jul 2006)
ViewCVS: http://svn.sourceforge.net/nmailserver/?rev=53&view=rev
Log Message:
-----------
Added a post install project. Added an initial performance counter. Work on developing an admin interface for the spool.
Modified Paths:
--------------
NMail/branches/luke-dev/NDns/NDns.xml
NMail/branches/luke-dev/NMail/DataTypes/Message.cs
NMail/branches/luke-dev/NMail/ISpoolData.cs
NMail/branches/luke-dev/NMail/NMail.csproj
NMail/branches/luke-dev/NMail.ImapService/State/ExamineState.cs
NMail/branches/luke-dev/NMail.SmtpService/SmtpService.cs
NMail/branches/luke-dev/NMail.sln
NMail/branches/luke-dev/doc/NMail User's Guide.doc
Added Paths:
-----------
NMail/branches/luke-dev/NMail/DataTypes/Envelope.cs
NMail/branches/luke-dev/NMail.Administration.Web/SpoolDetails.aspx
NMail/branches/luke-dev/NMail.Administration.Web/SpoolDetails.aspx.cs
NMail/branches/luke-dev/NMail.PostInstall/
NMail/branches/luke-dev/NMail.PostInstall/NMail.PostInstall.csproj
NMail/branches/luke-dev/NMail.PostInstall/PostInstallForm.Designer.cs
NMail/branches/luke-dev/NMail.PostInstall/PostInstallForm.cs
NMail/branches/luke-dev/NMail.PostInstall/PostInstallForm.resx
NMail/branches/luke-dev/NMail.PostInstall/Program.cs
NMail/branches/luke-dev/NMail.PostInstall/Properties/
NMail/branches/luke-dev/NMail.PostInstall/Properties/AssemblyInfo.cs
NMail/branches/luke-dev/NMail.PostInstall/Properties/Resources.Designer.cs
NMail/branches/luke-dev/NMail.PostInstall/Properties/Resources.resx
NMail/branches/luke-dev/NMail.PostInstall/Properties/Settings.Designer.cs
NMail/branches/luke-dev/NMail.PostInstall/Properties/Settings.settings
Modified: NMail/branches/luke-dev/NDns/NDns.xml
===================================================================
--- NMail/branches/luke-dev/NDns/NDns.xml 2006-06-28 11:16:34 UTC (rev 52)
+++ NMail/branches/luke-dev/NDns/NDns.xml 2006-07-01 08:36:49 UTC (rev 53)
@@ -4,5 +4,918 @@
<name>NDns</name>
</assembly>
<members>
+ <member name="T:NDns.Message.Header">
+ <summary>
+ Represents the header component of a DNS message.
+ </summary>
+ </member>
+ <member name="F:NDns.Message.Header.id">
+ <summary>
+ A 16 bit Id number to identify this message.
+ </summary>
+ </member>
+ <member name="F:NDns.Message.Header.response">
+ <summary>
+ Was this message a query or a response?
+ </summary>
+ </member>
+ <member name="F:NDns.Message.Header.opcode">
+ <summary>
+ A four bit field that specifies query type in the message.
+ </summary>
+ </member>
+ <member name="F:NDns.Message.Header.authoritative">
+ <summary>
+ Is the answer authoritative?
+ </summary>
+ </member>
+ <member name="F:NDns.Message.Header.truncated">
+ <summary>
+ Was the message truncated due to size constraints?
+ </summary>
+ </member>
+ <member name="F:NDns.Message.Header.recursionDesired">
+ <summary>
+ Is recursion desired?
+ </summary>
+ </member>
+ <member name="F:NDns.Message.Header.recursionAvailable">
+ <summary>
+ Is recursion available?
+ </summary>
+ </member>
+ <member name="F:NDns.Message.Header.rcode">
+ <summary>
+ The response code for this message.
+ </summary>
+ </member>
+ <member name="F:NDns.Message.Header.questionEntries">
+ <summary>
+ An unsigned 16 bit integer specifying the number of entries in the
+ question section.
+ </summary>
+ </member>
+ <member name="F:NDns.Message.Header.answerEntries">
+ <summary>
+ An unsigned 16 bit integer specifying the number of resource
+ records in the answer section.
+ </summary>
+ </member>
+ <member name="F:NDns.Message.Header.nameServerEntries">
+ <summary>
+ An unsigned 16 bit integer specifying the number of name server
+ resource records in the authority records section.
+ </summary>
+ </member>
+ <member name="F:NDns.Message.Header.additionalEntries">
+ <summary>
+ An unsigned 16 bit integer specifying the number of resource records in
+ the additional records section.
+ </summary>
+ </member>
+ <member name="F:NDns.Message.Header.lastId">
+ <summary>
+ The last Id number assigned to a DNS message.
+ </summary>
+ </member>
+ <member name="M:NDns.Message.Header.#ctor">
+ <summary>
+ Creates a new DNS message header with a unique Id number.
+ </summary>
+ </member>
+ <member name="M:NDns.Message.Header.#ctor(System.Byte[],System.UInt16,System.UInt16@)">
+ <summary>
+ Creates a new DNS message header using the given data. This data is
+ typically the response from a DNS server.
+ </summary>
+ <param name="data">The data to create the message header from.</param>
+ <param name="start">The position to start reading the byte array from.</param>
+ <param name="length">The number of bytes read from the byte array.</param>
+ </member>
+ <member name="M:NDns.Message.Header.GetId">
+ <summary>
+ Gets the next available Id number.
+ </summary>
+ <returns>The Id number.</returns>
+ </member>
+ <member name="M:NDns.Message.Header.ToByteArray">
+ <summary>
+ Converts the header to a byte array ready to send in a DNS message.
+ </summary>
+ <returns>The header as a byte array.</returns>
+ </member>
+ <member name="M:NDns.Message.Header.CreateOpCode(System.Byte)">
+ <summary>
+ Creates the opcode that corresponds to the given byte.
+ </summary>
+ <param name="opcode">The data to create the opcode from.</param>
+ <returns>The opcode.</returns>
+ </member>
+ <member name="M:NDns.Message.Header.CreateResponseCode(System.Byte)">
+ <summary>
+ Creates the response code that corresponds to the given byte.
+ </summary>
+ <param name="rcode">The data to create the response code from.</param>
+ <returns>The response code.</returns>
+ </member>
+ <member name="P:NDns.Message.Header.Id">
+ <summary>
+ Gets the Id number for this header (and thus message).
+ </summary>
+ </member>
+ <member name="T:NDns.Message.AnswerSection">
+ <summary>
+ A answer section entry in a DNS message.
+ </summary>
+ </member>
+ <member name="F:NDns.Message.AnswerSection.answerName">
+ <summary>
+ The string name in this answer.
+ </summary>
+ </member>
+ <member name="F:NDns.Message.AnswerSection.answerType">
+ <summary>
+ The type of record.
+ </summary>
+ </member>
+ <member name="F:NDns.Message.AnswerSection.answerClass">
+ <summary>
+ The query class.
+ </summary>
+ </member>
+ <member name="F:NDns.Message.AnswerSection.answerTTL">
+ <summary>
+ The time to live for the answer.
+ </summary>
+ </member>
+ <member name="F:NDns.Message.AnswerSection.answerRecord">
+ <summary>
+ The record data associated with this record.
+ </summary>
+ </member>
+ <member name="M:NDns.Message.AnswerSection.#ctor(System.Byte[],System.UInt16,System.UInt16@,NDns.Message.DomainCoder)">
+ <summary>
+ Creates a answer section from the given byte data.
+ </summary>
+ <param name="data">The data to create the answer section from.</param>
+ <param name="start">The position to start reading the byte array from.</param>
+ <param name="length">The number of bytes read from the byte array.</param>
+ <param name="coder">The coder to use when parsing the data.</param>
+ </member>
+ <member name="P:NDns.Message.AnswerSection.Record">
+ <summary>
+ The answer record associated with this answer entry.
+ </summary>
+ </member>
+ <member name="T:NDns.Message.Records.CNameRecord">
+ <summary>
+ A DNS Canonical NAME record.
+ </summary>
+ </member>
+ <member name="T:NDns.Message.Records.Record">
+ <summary>
+ A DNS record.
+ </summary>
+ </member>
+ <member name="F:NDns.Message.Records.Record.type">
+ <summary>
+ The type of this record.
+ </summary>
+ </member>
+ <member name="F:NDns.Message.Records.Record.recordTTL">
+ <summary>
+ The time to live for this record (in seconds).
+ </summary>
+ </member>
+ <member name="F:NDns.Message.Records.Record.creationTime">
+ <summary>
+ The time this record was created.
+ </summary>
+ </member>
+ <member name="M:NDns.Message.Records.Record.#ctor">
+ <summary>
+ Creates a new DNS record.
+ </summary>
+ </member>
+ <member name="P:NDns.Message.Records.Record.Type">
+ <summary>
+ Returns the type for this record.
+ </summary>
+ </member>
+ <member name="P:NDns.Message.Records.Record.Data">
+ <summary>
+ The data associated with this record as a user readable string.
+ </summary>
+ </member>
+ <member name="P:NDns.Message.Records.Record.TTL">
+ <summary>
+ Gets and sets the time to live for this record (in seconds).
+ </summary>
+ </member>
+ <member name="F:NDns.Message.Records.CNameRecord.cName">
+ <summary>
+ The canonical name for this record.
+ </summary>
+ </member>
+ <member name="M:NDns.Message.Records.CNameRecord.#ctor(System.String)">
+ <summary>
+ Creates a CName record from the given domain.
+ </summary>
+ <param name="cName">The string of the canonical name.</param>
+ </member>
+ <member name="M:NDns.Message.Records.CNameRecord.#ctor(System.Byte[],System.UInt16,System.UInt16@,NDns.Message.DomainCoder)">
+ <summary>
+ Creates a CName record from the given byte data.
+ </summary>
+ <param name="data">The data to create the CName record from.</param>
+ <param name="start">The position to start reading the byte array from.</param>
+ <param name="length">The number of bytes read from the byte array.</param>
+ <param name="coder">The coder to use when parsing the data.</param>
+ </member>
+ <member name="P:NDns.Message.Records.CNameRecord.CName">
+ <summary>
+ Returns the canonical name for this record.
+ </summary>
+ </member>
+ <member name="P:NDns.Message.Records.CNameRecord.Data">
+ <summary>
+ The data associated with this record as a user readable string.
+ </summary>
+ </member>
+ <member name="T:NDns.QueryFactory">
+ <summary>
+ A factory class for creating DNS query and response messages.
+ </summary>
+ </member>
+ <member name="M:NDns.QueryFactory.CreateQuery(System.String,NDns.Message.QType)">
+ <summary>
+ Creates a new DNS query to look up the record for the query string and type.
+ </summary>
+ <param name="queryString">The query string to pack.</param>
+ <param name="queryType">The type of the query.</param>
+ <returns>The DNS message.</returns>
+ </member>
+ <member name="T:NDns.Message.Records.PTRRecord">
+ <summary>
+ A DNS PTR record.
+ </summary>
+ </member>
+ <member name="F:NDns.Message.Records.PTRRecord.name">
+ <summary>
+ The name for this record.
+ </summary>
+ </member>
+ <member name="M:NDns.Message.Records.PTRRecord.#ctor(System.String)">
+ <summary>
+ Creates a PTR record from the given domain.
+ </summary>
+ <param name="name">The string of the name.</param>
+ </member>
+ <member name="M:NDns.Message.Records.PTRRecord.#ctor(System.Byte[],System.UInt16,System.UInt16@,NDns.Message.DomainCoder)">
+ <summary>
+ Creates a PTR record from the given byte data.
+ </summary>
+ <param name="data">The data to create the CName record from.</param>
+ <param name="start">The position to start reading the byte array from.</param>
+ <param name="length">The number of bytes read from the byte array.</param>
+ <param name="coder">The coder to use when parsing the data.</param>
+ </member>
+ <member name="P:NDns.Message.Records.PTRRecord.Name">
+ <summary>
+ Returns the name for this record.
+ </summary>
+ </member>
+ <member name="P:NDns.Message.Records.PTRRecord.Data">
+ <summary>
+ The data associated with this record as a user readable string.
+ </summary>
+ </member>
+ <member name="T:NDns.DnsCache">
+ <summary>
+ Provides a cache for DNS information.
+ </summary>
+ </member>
+ <member name="F:NDns.DnsCache.DnsPort">
+ <summary>
+ The port to query remote dns servers on.
+ </summary>
+ </member>
+ <member name="F:NDns.DnsCache.log">
+ <summary>
+ Logging support for this class.
+ </summary>
+ </member>
+ <member name="F:NDns.DnsCache.mxServers">
+ <summary>
+ A hash table of arrays of MX records indexed by string name
+ (e.g. an array of MX records for "anu.edu.au").
+ </summary>
+ </member>
+ <member name="F:NDns.DnsCache.mxQueue">
+ <summary>
+ A list of MX records ordered according to last use.
+ </summary>
+ </member>
+ <member name="F:NDns.DnsCache.domains">
+ <summary>
+ A hash table of string records indexed by IP address
+ </summary>
+ </member>
+ <member name="F:NDns.DnsCache.domainQueue">
+ <summary>
+ A list of string records ordered according to last use.
+ </summary>
+ </member>
+ <member name="F:NDns.DnsCache.addresses">
+ <summary>
+ A hash table of ip address record arrays indexed by string name
+ (e.g. an array of A records for "www.anu.edu.au").
+ </summary>
+ </member>
+ <member name="F:NDns.DnsCache.addressQueue">
+ <summary>
+ A list of address records ordered according to last use.
+ </summary>
+ </member>
+ <member name="F:NDns.DnsCache.MXCacheSize">
+ <summary>
+ The maximum number of MX record arrays to store.
+ </summary>
+ </member>
+ <member name="F:NDns.DnsCache.DomainCacheSize">
+ <summary>
+ The maximum number of string names to store.
+ </summary>
+ </member>
+ <member name="F:NDns.DnsCache.AddressCacheSize">
+ <summary>
+ The maximum number of A record arrays to store.
+ </summary>
+ </member>
+ <member name="F:NDns.DnsCache.config">
+ <summary>
+ The configuration for this DNS cache.
+ </summary>
+ </member>
+ <member name="M:NDns.DnsCache.#ctor(NDns.Configuration.NDnsConfiguration)">
+ <summary>
+ Creates a new instance of the DNS this.
+ </summary>
+ </member>
+ <member name="M:NDns.DnsCache.DomainMatchesAddress(System.Net.IPAddress,System.String)">
+ <summary>
+ Checks if the given string and address match.
+ </summary>
+ <param name="address">The address to check.</param>
+ <param name="domain">The string to check.</param>
+ <returns>True if the string corresponds to the address.</returns>
+ </member>
+ <member name="M:NDns.DnsCache.GetHostName(System.Net.EndPoint)">
+ <summary>
+ Gets a hostname for the specified end point.
+ </summary>
+ <param name="endPoint">The end point to lookup</param>
+ <returns>The hostname.</returns>
+ </member>
+ <member name="M:NDns.DnsCache.GetHostName(System.Net.IPAddress)">
+ <summary>
+ Gets a hostname for the specified address.
+ </summary>
+ <param name="address">The address to lookup</param>
+ <returns>The hostname.</returns>
+ </member>
+ <member name="M:NDns.DnsCache.GetHostNames(System.Net.IPAddress)">
+ <summary>
+ Gets a hostnames for the specified address.
+ </summary>
+ <param name="address">The address to lookup</param>
+ <returns>The address.</returns>
+ </member>
+ <member name="M:NDns.DnsCache.GetIPAddress(System.String)">
+ <summary>
+ Gets the first IP address associated with the given domain name.
+ </summary>
+ <param name="domainName">The domain name to resolve.</param>
+ <returns>The IP address.</returns>
+ </member>
+ <member name="M:NDns.DnsCache.GetIPAddresses(System.String)">
+ <summary>
+ Looks up IP addresses for the given string name.
+ </summary>
+ <param name="domainName">The string name to lookup the addresses for.</param>
+ <returns>The IP addresses for the string name.</returns>
+ </member>
+ <member name="M:NDns.DnsCache.LookupRecords(System.String,NDns.Message.QType)">
+ <summary>
+ Looks up DNS records using the specified query string and query type.
+ </summary>
+ <param name="queryString">The query to send.</param>
+ <param name="queryType">The query type.</param>
+ <returns>The array of records from the DNS server.</returns>
+ </member>
+ <member name="M:NDns.DnsCache.GetPTRRecords(System.Net.IPAddress)">
+ <summary>
+ Gets the PTR records for the specified IP address caching the results.
+ This method also respects TTL for the records.
+ </summary>
+ <param name="address">The address to lookup</param>
+ <returns>The PTR records.</returns>
+ </member>
+ <member name="M:NDns.DnsCache.GetARecords(System.String)">
+ <summary>
+ Gets address records for the specified hostname caching the results.
+ This method also respects TTL for the records.
+ </summary>
+ <param name="domainName">The hostname to lookup</param>
+ <returns>The address records.</returns>
+ </member>
+ <member name="M:NDns.DnsCache.GetMXRecords(System.String)">
+ <summary>
+ Looks up MX records for the given string name caching the results.
+ This method also respects TTL for the records.
+ </summary>
+ <param name="domainName">The string to get the MX records for.</param>
+ <returns>The MX records</returns>
+ </member>
+ <member name="M:NDns.DnsCache.LookupMXRecords(System.String)">
+ <summary>
+ Looks up MX records from the DNS server handling empty answer
+ sections but not caching records.
+ </summary>
+ <param name="domainName">The string to look up the MX records for.</param>
+ <returns>The MX records for the given domain.</returns>
+ </member>
+ <member name="M:NDns.DnsCache.LookupPTRRecords(System.Net.IPAddress)">
+ <summary>
+ Looks up PTR records from the DNS server but does not cache records.
+ </summary>
+ <param name="address">The string to look up the PTR records for.</param>
+ <returns>The PTR records for the given domain.</returns>
+ </member>
+ <member name="M:NDns.DnsCache.LookupARecords(System.String)">
+ <summary>
+ Looks up address records from the DNS server but does not cache records.
+ </summary>
+ <param name="domainName">The string name to lookup the addresses for.</param>
+ <returns>The addresses records for the given domain.</returns>
+ </member>
+ <member name="M:NDns.DnsCache.ConvertToIPAddresses(NDns.Message.Records.ARecord[])">
+ <summary>
+ Converts an array of address records into an array of IP addresses.
+ </summary>
+ <param name="records">The records to convert.</param>
+ <returns>The IP addresses.</returns>
+ </member>
+ <member name="M:NDns.DnsCache.ConvertToHostnames(NDns.Message.Records.PTRRecord[])">
+ <summary>
+ Converts an array of PTR records into an array of hostnames.
+ </summary>
+ <param name="records">The records to convert.</param>
+ <returns>The hostnames.</returns>
+ </member>
+ <member name="M:NDns.DnsCache.PerformQuery(NDns.Message.DNSMessage)">
+ <summary>
+ Queries a DNS server using the given DNS query.
+ </summary>
+ <param name="queryMessage">The query to send to the server.</param>
+ <returns>The response from the server.</returns>
+ </member>
+ <member name="T:NDns.Message.ResponseCode">
+ <summary>
+ The response code is a 4 bit field is set as part of responses.
+ </summary>
+ </member>
+ <member name="F:NDns.Message.ResponseCode.NoError">
+ <summary>
+ No error condition.
+ </summary>
+ </member>
+ <member name="F:NDns.Message.ResponseCode.FormatError">
+ <summary>
+ The name server was unable to interpret the query.
+ </summary>
+ </member>
+ <member name="F:NDns.Message.ResponseCode.ServerFailure">
+ <summary>
+ The name server was unable to process this query due to a problem
+ with the name server.
+ </summary>
+ </member>
+ <member name="F:NDns.Message.ResponseCode.NameError">
+ <summary>
+ Meaningful only for responses from an authoritative name server,
+ this code signifies that the string name referenced in the query
+ does not exist.
+ </summary>
+ </member>
+ <member name="F:NDns.Message.ResponseCode.NotImplemented">
+ <summary>
+ The name server does not support the requested kind of query.
+ </summary>
+ </member>
+ <member name="F:NDns.Message.ResponseCode.Refused">
+ <summary>
+ The name server refuses to perform the specified operation for
+ policy reasons.
+ </summary>
+ </member>
+ <member name="T:NDns.Message.Records.MXRecord">
+ <summary>
+ A DNS Mail eXchanger record.
+ </summary>
+ </member>
+ <member name="F:NDns.Message.Records.MXRecord.preference">
+ <summary>
+ The preference associated with this MX record.
+ </summary>
+ </member>
+ <member name="F:NDns.Message.Records.MXRecord.mxName">
+ <summary>
+ The name of the MX server.
+ </summary>
+ </member>
+ <member name="M:NDns.Message.Records.MXRecord.#ctor(System.String,System.UInt16)">
+ <summary>
+ Creates a MX record from the given string and preference.
+ </summary>
+ <param name="mxName">The string of the MX record.</param>
+ <param name="perference">The preference of the MX record.</param>
+ </member>
+ <member name="M:NDns.Message.Records.MXRecord.#ctor(System.Byte[],System.UInt16,System.UInt16@,NDns.Message.DomainCoder)">
+ <summary>
+ Creates a MX record from the given byte data.
+ </summary>
+ <param name="data">The data to create the MX record from.</param>
+ <param name="start">The position to start reading the byte array from.</param>
+ <param name="length">The number of bytes read from the byte array.</param>
+ <param name="coder">The coder to use when parsing the data.</param>
+ </member>
+ <member name="M:NDns.Message.Records.MXRecord.CompareTo(System.Object)">
+ <summary>
+ Compares this MX record to another MX record, sorting by perference.
+ </summary>
+ <param name="obj">The other MX to compare to.</param>
+ <returns>-1 if this MX is perferable, 1 otherwise.</returns>
+ </member>
+ <member name="P:NDns.Message.Records.MXRecord.MX">
+ <summary>
+ Returns the MX string for this record.
+ </summary>
+ </member>
+ <member name="P:NDns.Message.Records.MXRecord.Preference">
+ <summary>
+ Returns the preference for this record.
+ </summary>
+ </member>
+ <member name="P:NDns.Message.Records.MXRecord.Data">
+ <summary>
+ The data associated with this record as a user readable string.
+ </summary>
+ </member>
+ <member name="T:NDns.Message.QType">
+ <summary>
+ The DNS query type.
+ </summary>
+ </member>
+ <member name="F:NDns.Message.QType.A">
+ <summary>
+ A host address.
+ </summary>
+ </member>
+ <member name="F:NDns.Message.QType.NS">
+ <summary>
+ An authoritative name server.
+ </summary>
+ </member>
+ <member name="F:NDns.Message.QType.CNAME">
+ <summary>
+ The canonical name for an alias.
+ </summary>
+ </member>
+ <member name="F:NDns.Message.QType.SOA">
+ <summary>
+ Marks the start of a zone of authority.
+ </summary>
+ </member>
+ <member name="F:NDns.Message.QType.PTR">
+ <summary>
+ A string name pointer.
+ </summary>
+ </member>
+ <member name="F:NDns.Message.QType.HINFO">
+ <summary>
+ Host information.
+ </summary>
+ </member>
+ <member name="F:NDns.Message.QType.MINFO">
+ <summary>
+ Mailbox or mail list information.
+ </summary>
+ </member>
+ <member name="F:NDns.Message.QType.MX">
+ <summary>
+ Mail exchange.
+ </summary>
+ </member>
+ <member name="F:NDns.Message.QType.TXT">
+ <summary>
+ Text strings.
+ </summary>
+ </member>
+ <member name="T:NDns.Configuration.NDnsConfiguration">
+ <summary>
+ Provides configuration settings for this package.
+ </summary>
+ </member>
+ <member name="M:NDns.Configuration.NDnsConfiguration.#ctor(System.Net.IPAddress[],System.Int32,System.Int32,System.Int32)">
+ <summary>
+ Creates a new NDns configuration from the arguments.
+ </summary>
+ <param name="dnsServers">The list of DNS servers to query (in order).</param>
+ <param name="maxMXCacheSize">The maximum number of MX records to the cache.</param>
+ <param name="maxDomainCacheSize">The maximum number of domain records to the cache.</param>
+ <param name="maxAddressCacheSize">The maximum number of address records to the cache.</param>
+ </member>
+ <member name="P:NDns.Configuration.NDnsConfiguration.DnsServers">
+ <summary>
+ The list of DNS servers to query (in order of perference).
+ </summary>
+ </member>
+ <member name="P:NDns.Configuration.NDnsConfiguration.MaximumMXCacheSize">
+ <summary>
+ Returns the maximum cache for MX records size in entries.
+ </summary>
+ </member>
+ <member name="P:NDns.Configuration.NDnsConfiguration.MaximumDomainCacheSize">
+ <summary>
+ Returns the maximum cache for domain records size in entries.
+ </summary>
+ </member>
+ <member name="P:NDns.Configuration.NDnsConfiguration.MaximumAddressCacheSize">
+ <summary>
+ Returns the maximum cache for address records size in entries.
+ </summary>
+ </member>
+ <member name="T:NDns.Message.Records.ARecord">
+ <summary>
+ A DNS Address record.
+ </summary>
+ </member>
+ <member name="F:NDns.Message.Records.ARecord.address">
+ <summary>
+ The address for this record.
+ </summary>
+ </member>
+ <member name="M:NDns.Message.Records.ARecord.#ctor(System.Net.IPAddress)">
+ <summary>
+ Creates an address record using the address record.
+ </summary>
+ <param name="address">The address to create the record from.</param>
+ </member>
+ <member name="M:NDns.Message.Records.ARecord.#ctor(System.Byte[],System.UInt16,System.UInt16@,NDns.Message.DomainCoder)">
+ <summary>
+ Creates an Address record from the given byte data.
+ </summary>
+ <param name="data">The data to create the Address record from.</param>
+ <param name="start">The position to start reading the byte array from.</param>
+ <param name="length">The number of bytes read from the byte array.</param>
+ <param name="coder">The coder to use when parsing the data.</param>
+ </member>
+ <member name="P:NDns.Message.Records.ARecord.Address">
+ <summary>
+ The address for this record.
+ </summary>
+ </member>
+ <member name="P:NDns.Message.Records.ARecord.Data">
+ <summary>
+ The data associated with this record as a user readable string.
+ </summary>
+ </member>
+ <member name="T:NDns.Message.Records.NSRecord">
+ <summary>
+ A DNS NS record.
+ </summary>
+ </member>
+ <member name="F:NDns.Message.Records.NSRecord.ns">
+ <summary>
+ The name server name for this record.
+ </summary>
+ </member>
+ <member name="M:NDns.Message.Records.NSRecord.#ctor(System.String)">
+ <summary>
+ Creates a NS record from the given domain.
+ </summary>
+ <param name="ns">The string of the name server name.</param>
+ </member>
+ <member name="M:NDns.Message.Records.NSRecord.#ctor(System.Byte[],System.UInt16,System.UInt16@,NDns.Message.DomainCoder)">
+ <summary>
+ Creates a NS record from the given byte data.
+ </summary>
+ <param name="data">The data to create the CName record from.</param>
+ <param name="start">The position to start reading the byte array from.</param>
+ <param name="length">The number of bytes read from the byte array.</param>
+ <param name="coder">The coder to use when parsing the data.</param>
+ </member>
+ <member name="P:NDns.Message.Records.NSRecord.NS">
+ <summary>
+ Returns the name server name for this record.
+ </summary>
+ </member>
+ <member name="P:NDns.Message.Records.NSRecord.Data">
+ <summary>
+ The data associated with this record as a user readable string.
+ </summary>
+ </member>
+ <member name="T:NDns.Message.OpCode">
+ <summary>
+ The opcode is a four bit field that specifies query type in the message.
+ This value is set by the originator of a query and copied into the response.
+ </summary>
+ </member>
+ <member name="F:NDns.Message.OpCode.StandardQuery">
+ <summary>
+ A standard query (QUERY).
+ </summary>
+ </member>
+ <member name="F:NDns.Message.OpCode.InverseQuery">
+ <summary>
+ An inverse query (IQUERY).
+ </summary>
+ </member>
+ <member name="F:NDns.Message.OpCode.StatusRequest">
+ <summary>
+ A server status request (STATUS).
+ </summary>
+ </member>
+ <member name="T:NDns.Message.DNSMessage">
+ <summary>
+ A DNS message used in DNS communications.
+ </summary>
+ </member>
+ <member name="F:NDns.Message.DNSMessage.header">
+ <summary>
+ The header for this DNS message.
+ </summary>
+ </member>
+ <member name="F:NDns.Message.DNSMessage.questionEntries">
+ <summary>
+ The question sections associated with this DNS message.
+ </summary>
+ </member>
+ <member name="F:NDns.Message.DNSMessage.answerEntries">
+ <summary>
+ The answer sections associated with the DNS message.
+ </summary>
+ </member>
+ <member name="M:NDns.Message.DNSMessage.#ctor">
+ <summary>
+ Creates a new DNS message.
+ </summary>
+ </member>
+ <member name="M:NDns.Message.DNSMessage.#ctor(System.Byte[])">
+ <summary>
+ Creates a new DNS message using the given data. This data is typically the
+ response from a DNS server.
+ </summary>
+ <param name="data">The data to create the message from.</param>
+ </member>
+ <member name="M:NDns.Message.DNSMessage.ToByteArray">
+ <summary>
+ Converts the DNS message into a byte array.
+ </summary>
+ <returns>The DNS message as a byte array.</returns>
+ </member>
+ <member name="P:NDns.Message.DNSMessage.QuestionEntries">
+ <summary>
+ Gets and sets the question section entries for this DNS message.
+ </summary>
+ </member>
+ <member name="P:NDns.Message.DNSMessage.AnswerEntries">
+ <summary>
+ Gets and sets the answer section entries for this DNS message.
+ </summary>
+ </member>
+ <member name="P:NDns.Message.DNSMessage.Id">
+ <summary>
+ Gets the Id for this DNS message.
+ </summary>
+ </member>
+ <member name="P:NDns.Message.DNSMessage.Response">
+ <summary>
+ Was this message a response or a query?
+ </summary>
+ </member>
+ <member name="P:NDns.Message.DNSMessage.Authoritative">
+ <summary>
+ Is the answer authoritative?
+ </summary>
+ </member>
+ <member name="P:NDns.Message.DNSMessage.Truncated">
+ <summary>
+ Was the message truncated due to size constraints?
+ </summary>
+ </member>
+ <member name="P:NDns.Message.DNSMessage.Recursive">
+ <summary>
+ Is recursion desired?
+ </summary>
+ </member>
+ <member name="P:NDns.Message.DNSMessage.RecursionAvailable">
+ <summary>
+ Is recursion available?
+ </summary>
+ </member>
+ <member name="P:NDns.Message.DNSMessage.Opcode">
+ <summary>
+ A four bit field that specifies query type in the message.
+ </summary>
+ </member>
+ <member name="P:NDns.Message.DNSMessage.Rcode">
+ <summary>
+ The response code for this message.
+ </summary>
+ </member>
+ <member name="T:NDns.Message.QuestionSection">
+ <summary>
+ A question section entry in a DNS message.
+ </summary>
+ </member>
+ <member name="F:NDns.Message.QuestionSection.queryName">
+ <summary>
+ The string name being looked up.
+ </summary>
+ </member>
+ <member name="F:NDns.Message.QuestionSection.queryType">
+ <summary>
+ The type of query being performed.
+ </summary>
+ </member>
+ <member name="F:NDns.Message.QuestionSection.queryClass">
+ <summary>
+ The class of query.
+ </summary>
+ </member>
+ <member name="M:NDns.Message.QuestionSection.#ctor(System.String,NDns.Message.QType)">
+ <summary>
+ Creates a new question section with the given string and type.
+ </summary>
+ <param name="queryName">The string to query.</param>
+ <param name="queryType">The type of query to perform.</param>
+ </member>
+ <member name="M:NDns.Message.QuestionSection.#ctor(System.Byte[],System.UInt16,System.UInt16@,NDns.Message.DomainCoder)">
+ <summary>
+ Creates a question section from the given byte data.
+ </summary>
+ <param name="data">The data to create the question section from.</param>
+ <param name="start">The position to start reading the byte array from.</param>
+ <param name="length">The number of bytes read from the byte array.</param>
+ <param name="coder">The coder to use when parsing the data.</param>
+ </member>
+ <member name="M:NDns.Message.QuestionSection.ToByteArray(NDns.Message.DomainCoder,System.UInt16)">
+ <summary>
+ Converts the question section into a byte array.
+ </summary>
+ <param name="coder">The string coder used to compress queries with.</param>
+ <param name="reference">A reference to the location of this entry in the message.</param>
+ <returns>The question section as a byte array.</returns>
+ </member>
+ <member name="T:NDns.Message.QClass">
+ <summary>
+ The class of records.
+ </summary>
+ </member>
+ <member name="F:NDns.Message.QClass.IN">
+ <summary>
+ The Internet.
+ </summary>
+ </member>
+ <member name="T:NDns.Message.DomainCoder">
+ <summary>
+ This class encodes and decodes DNS string names in or for DNS messages.
+ </summary>
+ </member>
+ <member name="F:NDns.Message.DomainCoder.references">
+ <summary>
+ A hash table of references indexed by string names.
+ </summary>
+ </member>
+ <member name="M:NDns.Message.DomainCoder.EncodeDomain(System.String,System.UInt16)">
+ <summary>
+ Encodes a string entry or a reference to the string entry for the given
+ domain.
+ </summary>
+ <param name="domainName">The string to create the entry for.</param>
+ <param name="start">The reference to the start of this entry in the message.</param>
+ <returns>The string name or a reference to the first occurence.</returns>
+ </member>
+ <member name="M:NDns.Message.DomainCoder.DecodeDomain(System.Byte[],System.UInt16,System.UInt16@)">
+ <summary>
+ Decodes the data to retrieve a string name.
+ </summary>
+ <param name="data">The data to process.</param>
+ <param name="start">The position to start processing from.</param>
+ <param name="length">The length of data read.</param>
+ <returns>The string decoded.</returns>
+ </member>
</members>
</doc>
Added: NMail/branches/luke-dev/NMail/DataTypes/Envelope.cs
===================================================================
--- NMail/branches/luke-dev/NMail/DataTypes/Envelope.cs (rev 0)
+++ NMail/branches/luke-dev/NMail/DataTypes/Envelope.cs 2006-07-01 08:36:49 UTC (rev 53)
@@ -0,0 +1,361 @@
+/*
+ * Copyright 2004-2006 Luke Quinane
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+using NMail.Helper;
+
+namespace NMail.DataTypes {
+ /// <summary>
+ /// A message envelope. This includes the From, To, Cc, Bcc, Subject
+ /// </summary>
+ [Serializable]
+ public class Envelope {
+ /// <summary>
+ /// Creates a new envelope from the message headers.
+ /// </summary>
+ /// <param name="messageHeaders">The headers containing the envelope information.</param>
+ public Envelope(MessageHeaders messageHeaders) {
+ // These fields should never be null
+ this.from = messageHeaders["From"];
+ this.date = messageHeaders["Date"];
+ this.subject = messageHeaders["Subject"];
+
+ this.sender = messageHeaders["Sender"];
+ if (this.sender == null || this.sender.Trim() == string.Empty) {
+ this.sender = this.from;
+ }
+ this.replyTo = messageHeaders["Rely-To"];
+ if (this.replyTo == null || this.replyTo.Trim() == string.Empty) {
+ this.replyTo = this.from;
+ }
+
+ // These fields can be null
+ this.messageId = messageHeaders["Message-Id"];
+ if (this.messageId != null && this.messageId.Trim() == string.Empty) {
+ this.messageId = null;
+ }
+ this.to = messageHeaders["To"];
+ if (this.to != null && this.to.Trim() == string.Empty) {
+ this.to = null;
+ }
+ this.inReplyTo = messageHeaders["In-Reply-To"];
+ if (this.inReplyTo != null && this.inReplyTo.Trim() == string.Empty) {
+ this.inReplyTo = null;
+ }
+ this.bcc = messageHeaders["Bcc"];
+ if (this.bcc != null && this.inReplyTo.Trim() == string.Empty) {
+ this.bcc = null;
+ }
+ this.cc = messageHeaders["Cc"];
+ if (this.cc != null && this.cc.Trim() == string.Empty) {
+ this.cc = null;
+ }
+ }
+
+ /// <summary>
+ /// Creates a new envelope with the minimum required fields.
+ /// </summary>
+ /// <param name="from">The sender of the message.</param>
+ /// <param name="date">The date the message was sent.</param>
+ /// <param name="subject">The message's subject.</param>
+ public Envelope(string from, string date, string subject) {
+ this.from = from;
+ this.sender = from;
+ this.replyTo = from;
+
+ this.subject = subject;
+ this.date = date;
+ }
+
+ #region Properties
+
+ private string messageId;
+
+ /// <summary>
+ /// Extracted from the Message-Id header.
+ /// </summary>
+ public string MessageId {
+ get {
+ return this.messageId;
+ }
+ set {
+ this.messageId = value;
+ }
+ }
+
+ private string from;
+
+ /// <summary>
+ /// The value extracted from the From header field.
+ /// </summary>
+ public string From {
+ get {
+ return this.from;
+ }
+ set {
+ this.from = value;
+ }
+ }
+
+ private string sender;
+
+ /// <summary>
+ /// The value extracted from the Sender header field.
+ /// </summary>
+ public string Sender {
+ get {
+ return this.sender;
+ }
+ set {
+ this.sender = value;
+ }
+ }
+
+ private string to;
+
+ /// <summary>
+ /// The value extracted from the To header field.
+ /// </summary>
+ public string To {
+ get {
+ return this.to;
+ }
+ set {
+ this.to = value;
+ }
+ }
+
+
+ private string inReplyTo;
+
+ /// <summary>
+ /// The value extracted from the In-Reply-To header field.
+ /// </summary>
+ public string InReplyTo {
+ get {
+ return this.inReplyTo;
+ }
+ set {
+ this.inReplyTo = value;
+ }
+ }
+
+
+ private string replyTo;
+
+ /// <summary>
+ /// The value extracted from the Reply-To header field.
+ /// </summary>
+ public string ReplyTo {
+ get {
+ return this.replyTo;
+ }
+ set {
+ this.replyTo = value;
+ }
+ }
+
+
+ private string bcc;
+
+ /// <summary>
+ /// The value extracted from the Bcc header field.
+ /// </summary>
+ public string Bcc {
+ get {
+ return this.bcc;
+ }
+ set {
+ this.bcc = value;
+ }
+ }
+
+
+ private string cc;
+
+ /// <summary>
+ /// The value extracted from the Cc header field.
+ /// </summary>
+ public string Cc {
+ get {
+ return this.cc;
+ }
+ set {
+ this.cc = value;
+ }
+ }
+
+
+ private string subject;
+
+ /// <summary>
+ /// The value extracted from the Subject header field.
+ /// </summary>
+ public string Subject {
+ get {
+ return this.subject;
+ }
+ set {
+ this.subject = value;
+ }
+ }
+
+
+ private string date;
+
+ /// <summary>
+ /// The value extracted from the Date header field.
+ /// </summary>
+ public string Date {
+ get {
+ return this.date;
+ }
+ set {
+ this.date = value;
+ }
+ }
+ #endregion
+
+ #region getEnvelopeImapAddress
+ private string getEnvelopeImapAddress(string data) {
+ // TODO: handle groups
+
+ StringBuilder output = new StringBuilder();
+ string[] addresses = StringTokenizer.GetQuotedTokens(data, ",".ToCharArray(), Int32.MaxValue, false);
+
+ output.Append("(");
+
+ foreach (string address in addresses) {
+ string[] tokens = StringTokenizer.GetQuotedTokens(address, " ".ToCharArray(), Int32.MaxValue, true);
+ string emailAddress = null;
+ string personalName = null;
+ string host = null;
+ string mailbox = null;
+
+ if (tokens.Length > 0) {
+ if (tokens[0][0] != '<') {
+ personalName = tokens[0];
+
+ if (tokens.Length > 1) {
+ emailAddress = tokens[1];
+ }
+ } else {
+ // No personal name
+ emailAddress = tokens[0];
+ }
+ }
+
+ if (emailAddress != null) {
+ try {
+ EmailAddress tmpAddress = new EmailAddress(emailAddress, true);
+ host = tmpAddress.Host.ToString();
+ mailbox = tmpAddress.Mailbox.ToString();
+ } catch {
+ }
+ }
+
+ // Append the personal name and source route
+ if (personalName != null) {
+ output.Append("(\"");
+ output.Append(personalName);
+ output.Append("\" NIL ");
+ } else {
+ output.Append("(NIL NIL ");
+ }
+
+ // Append the mailbox
+ if (mailbox != null) {
+ output.Append("\"");
+ output.Append(mailbox);
+ output.Append("\" ");
+ } else {
+ output.Append("NIL ");
+ }
+
+ // Append the host
+ if (host != null) {
+ output.Append("\"");
+ output.Append(host);
+ output.Append("\")");
+ } else {
+ output.Append("NIL)");
+ }
+ }
+
+ output.Append(")");
+
+ return output.ToString();
+ }
+ #endregion
+
+ #region ToImapEnvelopeString
+ /// <summary>
+ /// Converts this envelope into a string that can be used in an IMAP envelope
+ /// response.
+ /// </summary>
+ /// <returns>The IMAP envelope string.</returns>
+ public string ToImapEnvelopeString() {
+ StringBuilder envelope = new StringBuilder();
+
+ envelope.Append("ENVELOPE (\"");
+ envelope.Append(this.date);
+ envelope.Append("\" \"");
+ envelope.Append(this.subject);
+ envelope.Append("\" ");
+
+ // From
+ envelope.Append(getEnvelopeImapAddress(this.from));
+ envelope.Append(" ");
+
+ // Sender
+ envelope.Append(getEnvelopeImapAddress(this.sender));
+ envelope.Append(" ");
+
+ // Reply-To
+ envelope.Append(getEnvelopeImapAddress(this.replyTo));
+ envelope.Append(" ");
+
+ // To
+ envelope.Append((this.to == null) ? "NIL" : getEnvelopeImapAddress(this.to));
+ envelope.Append(" ");
+
+ // Cc
+ envelope.Append((this.cc == null) ? "NIL" : getEnvelopeImapAddress(this.cc));
+ envelope.Append(" ");
+
+ // Bcc
+ envelope.Append((this.bcc == null) ? "NIL" : getEnvelopeImapAddress(this.bcc));
+ envelope.Append(" ");
+
+ // In-Reply-To
+ envelope.Append("\"");
+ envelope.Append((this.inReplyTo == null) ? "NIL" : this.inReplyTo);
+ envelope.Append("\" ");
+
+ // Message-Id
+ envelope.Append("\"");
+ envelope.Append((this.messageId == null) ? "NIL" : this.messageId);
+ envelope.Append("\")");
+
+ return envelope.ToString();
+ }
+ #endregion
+ }
+}
Modified: NMail/branches/luke-dev/NMail/DataTypes/Message.cs
===================================================================
--- NMail/branches/luke-dev/NMail/DataTypes/Message.cs 2006-06-28 11:16:34 UTC (rev 52)
+++ NMail/branches/luke-dev/NMail/DataTypes/Message.cs 2006-07-01 08:36:49 UTC (rev 53)
@@ -60,6 +60,14 @@
this.data = bodyData;
}
+ /// <summary>
+ /// Gets an envelope for this message.
+ /// </summary>
+ /// <returns>The envelope.</returns>
+ public Envelope GetEnvelope() {
+ return new Envelope(this.Headers);
+ }
+
private bool parsed {
get {
if (this.MultipartBody) {
Modified: NMail/branches/luke-dev/NMail/ISpoolData.cs
===================================================================
--- NMail/branches/luke-dev/NMail/ISpoolData.cs 2006-06-28 11:16:34 UTC (rev 52)
+++ NMail/branches/luke-dev/NMail/ISpoolData.cs 2006-07-01 08:36:49 UTC (rev 53)
@@ -21,7 +21,7 @@
namespace NMail {
/// <summary>
- /// Stores the data for the spool. The implementors of this interface must be thread
+ /// Stores the data for the spool. The implementations of this interface must be thread
/// safe.
/// </summary>
public interface ISpoolData {
Modified: NMail/branches/luke-dev/NMail/NMail.csproj
===================================================================
--- NMail/branches/luke-dev/NMail/NMail.csproj 2006-06-28 11:16:34 UTC (rev 52)
+++ NMail/branches/luke-dev/NMail/NMail.csproj 2006-07-01 08:36:49 UTC (rev 53)
@@ -129,6 +129,7 @@
<Compile Include="DataTypes\ACLs\StoreFolderAcl.cs" />
<Compile Include="DataTypes\ACLs\StoreFolderPrivilege.cs" />
<Compile Include="DataTypes\ACLs\UserGroupAdminPrivilege.cs" />
+ <Compile Include="DataTypes\Envelope.cs" />
<Compile Include="DataTypes\LocalStoreGroup.cs" />
<Compile Include="DataTypes\ByteString.cs">
<SubType>Code</SubType>
Added: NMail/branches/luke-dev/NMail.Administration.Web/SpoolDetails.aspx
===================================================================
--- NMail/branches/luke-dev/NMail.Administration.Web/SpoolDetails.aspx (rev 0)
+++ NMail/branches/luke-dev/NMail.Administration.Web/SpoolDetails.aspx 2006-07-01 08:36:49 UTC (rev 53)
@@ -0,0 +1,6 @@
+<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="SpoolDetails.aspx.cs" Inherits="SpoolDetails" Title="Untitled Page" %>
+<asp:Content ID="Content1" ContentPlaceHolderID="SiteContentPlaceHolder" Runat="Server">
+</asp:Content>
+<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder" Runat="Server">
+</asp:Content>
+
Added: NMail/branches/luke-dev/NMail.Administration.Web/SpoolDetails.aspx.cs
===================================================================
--- NMail/branches/luke-dev/NMail.Administration.Web/SpoolDetails.aspx.cs (rev 0)
+++ NMail/branches/luke-dev/NMail.Administration.Web/SpoolDetails.aspx.cs 2006-07-01 08:36:49 UTC (rev 53)
@@ -0,0 +1,20 @@
+using System;
+using System.Data;
+using System.Configuration;
+using System.Collections;
+using System.Web;
+using System.Web.Security;
+using System.Web.UI;
+using System.Web.UI.WebControls;
+using System.Web.UI.WebControls.WebParts;
+using System.Web.UI.HtmlControls;
+
+public partial class SpoolDetails : System.Web.UI.Page
+{
+ protected void Page_Load(object sender, EventArgs e)
+ {
+ NMail.Server.RemoteAdministration ra;
+ // ra.NMailServer.Services[0].Service
+
+ }
+}
Modified: NMail/branches/luke-dev/NMail.ImapService/State/ExamineState.cs
===================================================================
--- NMail/branches/luke-dev/NMail.ImapService/State/ExamineState.cs 2006-06-28 11:16:34 UTC (rev 52)
+++ NMail/branches/luke-dev/NMail.ImapService/State/ExamineState.cs 2006-07-01 08:36:49 UTC (rev 53)
@@ -174,149 +174,10 @@
}
#endregion
- #region getEnvelopeAddress
- protected virtual string getEnvelopeAddress(string headerData) {
- // TODO: handle groups
-
- StringBuilder output = new StringBuilder();
- string[] addresses = StringTokenizer.GetQuotedTokens(headerData, ",".ToCharArray(), Int32.MaxValue, false);
-
- output.Append("(");
-
- foreach (string address in addresses) {
- string[] tokens = StringTokenizer.GetQuotedTokens(address, " ".ToCharArray(), Int32.MaxValue, true);
- string emailAddress = null;
- string personalName = null;
- string host = null;
- string mailbox = null;
-
- if (tokens.Length > 0) {
- if (tokens[0][0] != '<') {
- personalName = tokens[0];
-
- if (tokens.Length > 1) {
- emailAddress = tokens[1];
- }
- } else {
- // No personal name
- emailAddress = tokens[0];
- }
- }
-
- if (emailAddress != null) {
- try {
- EmailAddress tmpAddress = new EmailAddress(emailAddress, true);
- host = tmpAddress.Host.ToString();
- mailbox = tmpAddress.Mailbox.ToString();
- } catch {
- }
- }
-
- // Append the personal name and source route
- if (personalName != null) {
- output.Append("(\"");
- output.Append(personalName);
- output.Append("\" NIL ");
- } else {
- output.Append("(NIL NIL ");
- }
-
- // Append the mailbox
- if (mailbox != null) {
- output.Append("\"");
- output.Append(mailbox);
- output.Append("\" ");
- } else {
- output.Append("NIL ");
- }
-
- // Append the host
- if (host != null) {
- output.Append("\"");
- output.Append(host);
- output.Append("\")");
- } else {
- output.Append("NIL)");
- }
- }
-
- output.Append(")");
-
- return output.ToString();
- }
- #endregion
-
#region sendEnvelope
protected virtual void sendEnvelope(FetchResponse response, MessageHeaders messageHeaders) {
- StringBuilder envelope = new StringBuilder();
-
- envelope.Append("ENVELOPE (\"");
- envelope.Append(messageHeaders["Date"].Trim());
- envelope.Append("\" \"");
- envelope.Append(messageHeaders["Subject"]);
- envelope.Append("\" ");
-
- // From
- envelope.Append(getEnvelopeAddress(messageHeaders["From"]));
- envelope.Append(" ");
-
- // Sender
- if (messageHeaders["Sender"] == null) {
- envelope.Append(getEnvelopeAddress(messageHeaders["From"]));
- } else {
- envelope.Append(getEnvelopeAddress(messageHeaders["Sender"]));
- }
- envelope.Append(" ");
-
- // Reply-To
- if (messageHeaders["Rely-To"] == null) {
- envelope.Append(getEnvelopeAddress(messageHeaders["From"]));
- } else {
- envelope.Append(getEnvelopeAddress(messageHeaders["Rely-To"]));
- }
- envelope.Append(" ");
-
- // To
- if (messageHeaders["To"] == null || messageHeaders["To"].Trim() == string.Empty) {
- envelope.Append("NIL");
- } else {
- envelope.Append(getEnvelopeAddress(messageHeaders["To"]));
- }
- envelope.Append(" ");
-
- // Cc
- if (messageHeaders["Cc"] == null || messageHeaders["Cc"].Trim() == string.Empty) {
- envelope.Append("NIL");
- } else {
- envelope.Append(getEnvelopeAddress(messageHeaders["Cc"]));
- }
- envelope.Append(" ");
-
- // Bcc
- if (messageHeaders["Bcc"] == null || messageHeaders["Bcc"].Trim() == string.Empty) {
- envelope.Append("NIL");
- } else {
- envelope.Append(getEnvelopeAddress(messageHeaders["Bcc"]));
- }
- envelope.Append(" ");
-
- // In-Reply-To
- if (messageHeaders["In-Reply-To"] == null) {
- envelope.Append("NIL");
- } else {
- envelope.Append("\"" + messageHeaders["In-Reply-To"] + "\"");
- }
- envelope.Append(" ");
-
- // Message-Id
- if (messageHeaders["Message-Id"] == null) {
- envelope.Append("NIL");
- } else {
- envelope.Append("\"" + messageHeaders["Message-Id"].Trim() + "\"");
- }
- envelope.Append(")");
-
- response.AppendResponseItem(envelope.ToString());
+ Envelope envelope = new Envelope(messageHeaders);
+ response.AppendResponseItem(envelope.ToImapEnvelopeString());
}
#endregion
Added: NMail/branches/luke-dev/NMail.PostInstall/NMail.PostInstall.csproj
===================================================================
--- NMail/branches/luke-dev/NMail.PostInstall/NMail.PostInstall.csproj (rev 0)
+++ NMail/branches/luke-dev/NMail.PostInstall/NMail.PostInstall.csproj 2006-07-01 08:36:49 UTC (rev 53)
@@ -0,0 +1,88 @@
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <ProductVersion>8.0.50727</ProductVersion>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{906413B5-1C7D-4072-B5CF-FDCED1F6CA7C}</ProjectGuid>
+ <OutputType>WinExe</OutputType>
+ <AppDesignerFolder>Properties</AppDesignerFolder>
+ <RootNamespace>NMail.PostInstall</RootNamespace>
+ <AssemblyName>NMail.PostInstall</AssemblyName>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ <DebugSymbols>true</DebugSymbols>
+ <DebugType>full</DebugType>
+ <Optimize>false</Optimize>
+ <OutputPath>bin\Debug\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ <OutputPath>bin\Release\</OutputPath>
+ <DefineConstants>TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <ItemGroup>
+ <Reference Include="System" />
+ <Reference Include="System.Data" />
+ <Reference Include="System.Deployment" />
+ <Reference Include="System.Drawing" />
+ <Reference Include="System.Windows.Forms" />
+ <Reference Include="System.Xml" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="PostInstallForm.cs">
+ <SubType>Form</SubType>
+ </Compile>
+ <Compile Include="PostInstallForm.Designer.cs">
+ <DependentUpon>PostInstallForm.cs</DependentUpon>
+ </Compile>
+ <Compile Include="Program.cs" />
+ <Compile Include="Properties\AssemblyInfo.cs" />
+ <EmbeddedResource Include="PostInstallForm.resx">
+ <SubType>Designer</SubType>
+ <DependentUpon>PostInstallForm.cs</DependentUpon>
+ </EmbeddedResource>
+ <EmbeddedResource Include="Properties\Resources.resx">
+ <Generator>ResXFileCodeGenerator</Generator>
+ <LastGenOutput>Resources.Designer.cs</LastGenOutput>
+ <SubType>Designer</SubType>
+ </EmbeddedResource>
+ <Compile Include=...
[truncated message content] |