mail::address — An E-mail address
#include <libmail/rfcaddr.H>
mail::address address("John Smith", "johnsmith@example.com");
std::string addr=address.getAddr();
std::string name=address.getName();
address.setAddr(addr);
address.setName(name);
std::string str=address.toString();
std::vector<mail::address> addressList;
std::string header= mail::address::toString("From: ", addressList,
size_t width=76);
size_t errorIndex;
bool error=mail::address::fromString(std::string addresses,
addressList,
errorIndex);
std::string stdAddr=address.getCanonAddress();
mail::address addr1, addr2;
bool same= addr1 == addr2;
bool notsame= addr1 != addr2;
mail::address represents a
single E-mail address. An E-mail address consists of the
recipient's name, and the actual address in the format of
user
@domain
. The name and the
address components may be accessed or changed by getName()
, getAddr()
, setName()
and setAddr()
methods.
mail::emailAddress would
be a more appropriate class for most situations. The name
component used by getName()
and setName()
methods is the
Internet-format, MIME-encoded name. mail::emailAddress is a subclass of
mail::address, and provides
more convenient methods for working with the name component
of an E-mail address.
The toString
and
fromString
methods, defined
below, will take a vector of either mail::emailAddress or mail::address objects, and in all other
ways both classes are freely interchangable, and may be
converted to one another.
The toString
method converts
an address to a text string formatted as "name <user@domain>
". A second
toString
function creates an
E-mail header that contains a comma-separated list of E-mail
addresses. The first parameter must be the header's name
(with a trailing space character); the second parameter is a
reference to a vector of mail::address objects. An optional third
parameter sets the maximum line width; the text string
returned by toString
will have
newline characters, if necessary to make sure that each line
is shorter than the specified maximum.
fromString
does the
opposite: it converts the contents of an E-mail header to an
array of mail::address
objects. The first parameter is the E-mail header's contents
(without Header-Name:
). The second parameter is a
reference to a vector of mail::address objects. fromString
returns false if a fatal error
has occured (out of memory, or something else). errorIndex
is normally set to
string::npos
. If the header
cannot be parsed; errorIndex
is set to the index
of the character in addresses
where a syntax error
was found (the header is still parsed, and any recognizable
addresses are still saved in addressList
).
addressList
should
be empty. Otherwise the addresses are appended to addressList
's existing
contents.
The domain
part of an E-mail address is case insensitive, however the
user
part of an
E-mail address is not case insensitive. It is up to each
individual domain
whether or not the user
part is case
sensitive, or not. Since it is not possible to determine
whether user
is
case sensitive; the getCanonAddress
method returns the E-mail
address as user
@domain
, with only the
domain
part
converted to lowercase.
The object also defines the equality and non-equality
operators, which compare the address portion of two
mail::address objects (the
name portions are ignored), with the domain
part of each domain
being case insensitive