Second pass at adding key files

This commit is contained in:
dsainty
2024-06-17 22:24:05 +10:00
parent aa25e9347f
commit b6fc94ff0f
923 changed files with 243184 additions and 0 deletions

View File

@ -0,0 +1,536 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>GT::Mail::BulkMail - A simplified interface to sending bulk emails</title>
<link rev="made" href="mailto:root@penguin.office.gossamer-threads.com" />
<style type="text/css">
/* $MVD$:fontset("Untitled Font Set 1","ARIEL","HELVETICA","HELV","SANSERIF") */
/* $MVD$:fontset("Arial","Arial") */
/* $MVD$:fontset("Arial Black","Arial Black") */
/* $MVD$:fontset("Algerian","Algerian") */
body {
background-color: white;
font-family: Verdana, Arial, sans-serif;
font-size: small;
color: black;
}
p {
background-color : white;
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
h1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
background-color : white;
color : maroon;
}
h2 {
font-family : Verdana, Arial, sans-serif;
font-size : medium;
font-weight : bold;
color : blue;
background-color : white;
}
h3 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
color : black;
background-color : white;
}
h4 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : maroon;
background-color : white;
}
h5 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : blue;
background-color : white;
}
h6 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : black;
background-color : white;
}
ul {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
ol {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
li {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
th {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
td {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dd {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dt {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
code {
font-family : Courier;
font-size : small;
color : black;
}
pre {
font-family : Courier;
font-size : small;
color : black;
}
.mvd-H1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : 14.0pt;
background-color : transparent;
background-image : none;
color : maroon;
}
.mvd-H2 {
font-family : Verdana, Arial, sans-serif;
font-size : 12.0pt;
color : blue;
}
p.indent {
font-family : "Verdana, Arial, sans-serif";
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
.mvd-P-indent {
font-family : Verdana, Arial, sans-serif;
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
pre.programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE-programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE {
font-size : 9.0pt;
}
p.note {
margin-left : 28.0pt;
}
.mvd-P-note {
margin-left : 28.0pt;
}
.mvd-H4 {
font-family : Verdana, Arial, sans-serif;
font-weight : normal;
font-size : 9.0pt;
color : black;
margin-left : 6.0pt;
margin-top : -14.0pt;
}
.mvd-P {
font-family : Verdana, Arial, sans-serif;
font-size : 10.0pt;
color : black;
}
.mvd-BODY {
font-family : Verdana, Arial, sans-serif;
background-color : white;
}
p.indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
.mvd-P-indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
</style>
</head>
<body style="background-color: white">
<p><a name="__index__"></a></p>
<!-- INDEX BEGIN -->
<ul>
<li><a href="#name">NAME</a></li>
<li><a href="#synopsis">SYNOPSIS</a></li>
<li><a href="#description">DESCRIPTION</a></li>
<li><a href="#requirements">REQUIREMENTS</a></li>
<ul>
<li><a href="#methods">METHODS</a></li>
</ul>
</ul>
<!-- INDEX END -->
<hr />
<p>
</p>
<h1><a name="name">NAME</a></h1>
<p>GT::Mail::BulkMail - A (perhaps overly) simplified interface to sending bulk emails</p>
<p>
</p>
<hr />
<h1><a name="synopsis">SYNOPSIS</a></h1>
<pre>
$mailer = new GT::Mail::BulkMail;
$mailer-&gt;option(&quot;setting&quot;);
$mailer-&gt;otheroption(&quot;othersetting&quot;);
...
-- or --</pre>
<pre>
$mailer = new GT::Mail::BulkMail(
-option =&gt; &quot;setting&quot;,
-otheroption =&gt; &quot;othersetting&quot;,
...
);</pre>
<pre>
-- then --</pre>
<pre>
sub subroutine {
# Code to generate the next e-mail address
}
open FILE, &quot;email_list.txt&quot;;
%hash = ( 1 =&gt; 'some@fictional.address',
2 =&gt; 'who@knows.where'
);
@array = ('yet@another.fictional.address','and@one.more');
$mailer-&gt;send(\&amp;subroutine,\*FILE,\%hash,\@array);
close FILE;</pre>
<p>
</p>
<hr />
<h1><a name="description">DESCRIPTION</a></h1>
<p>GT::Mail::BulkMail is a module to handle mass mailings. It is capable of
using either sendmail, or an SMTP server. It has the advantage of
not requiring multiple connections to the SMTP server.</p>
<p>
</p>
<hr />
<h1><a name="requirements">REQUIREMENTS</a></h1>
<p>Perl 5.004</p>
<p>
</p>
<h2><a name="methods">METHODS</a></h2>
<p>All methods can be specified at object creation time as an option with the:
-option&nbsp;=&gt;&nbsp;value syntax. For example, <code>$mailer = new GT::Mail::BulkMail(-from =&gt; &quot;foo@bar.com&quot;)</code>
would have the same effect as: <code>$mailer = new GT::Mail::BulkMail(); $mailer-&gt;from(&quot;foo@bar.com&quot;)</code></p>
<dl>
<dt><strong><a name="item_smtp">smtp</a></strong><br />
</dt>
<dd>
Sets the SMTP server to use, and sets the object mail sending method to use SMTP. Takes
SMTP server as argument.
</dd>
<p></p>
<dt><strong><a name="item_sendmail">sendmail</a></strong><br />
</dt>
<dd>
Sets the sendmail executable to use. Takes the path to sendmail as the argument.
</dd>
<p></p>
<dt><strong><a name="item_text">text</a></strong><br />
</dt>
<dd>
Specifies that the mail format is text. This translates into Content-type: text/plain.
This is the default format.
</dd>
<p></p>
<dt><strong><a name="item_html">html</a></strong><br />
</dt>
<dd>
Specifies that the mail format is HTML. (Content-type: text/html)
</dd>
<p></p>
<dt><strong><a name="item_headers">headers</a></strong><br />
</dt>
<dd>
Returns any custom headers set as a hash reference in scalar context, or a hash in list context.
</dd>
<p></p>
<dt><strong><a name="item_add_header">add_header</a></strong><br />
</dt>
<dd>
Adds a single header. This can be any header starting with ``X-'' (Note that X-Mailer headers
will be prepended with the GT::Mail::BulkMail X-Mailer header (which includes the perl version,
OS name, GT::Mail::BulkMail module and CVS versions, and the Gossamer Threads homepage)). Pass
two arguments: A key (header name) and a value (header value). For example, for
<code>X-Foo: blah blah blah</code> you would use: $mailer-&gt;add_header(``X-Foo'' =&gt; ``blah blah blah'')
</dd>
<p></p>
<dt><strong><a name="item_add_headers">add_headers</a></strong><br />
</dt>
<dd>
Same as above, except it adds multiple headers. Has the same argument format. You would use:
$mailer-&gt;add_headers(``X-Foo1'' =&gt; ``blah'', ``X-Foo2'' =&gt; ``blah blah'');
</dd>
<p></p>
<dt><strong><a name="item_delete_header">delete_header</a></strong><br />
</dt>
<dd>
Deletes a single header. Pass the name of the header to delete.
</dd>
<p></p>
<dt><strong><a name="item_delete_headers">delete_headers</a></strong><br />
</dt>
<dd>
Delete multiple headers. Pass a list of names of headers to delete.
</dd>
<p></p>
<dt><strong><a name="item_from">from</a></strong><br />
</dt>
<dd>
Sets the ``from'' field of the e-mail. Must be set before $mailer-&gt;<a href="#item_send"><code>send()</code></a> can be called.
Must be set to an e-mail address. If this e-mail address is rejected by the SMTP server,
no e-mails will be sent.
</dd>
<p></p>
<dt><strong><a name="item_name">name</a></strong><br />
</dt>
<dd>
Sets the ``name'' field of the e-mail. This affects what is displayed in the ``From'' field.
When sending the email, the actual field will be set to: <code>&quot;This name&quot; &lt;some@name.net&gt;</code>.
Optional.
</dd>
<p></p>
<dt><strong><a name="item_subject">subject</a></strong><br />
</dt>
<dd>
Sets the subject of the message. If not specified, it will default to ``(no subject)''
</dd>
<p></p>
<dt><strong><a name="item_message">message</a></strong><br />
</dt>
<dd>
The body of the message. Can be left blank, but that seems rather pointless...
The message will be encoded using the quoted-printable format if it contains characters
outside the 7-bit range.
</dd>
<p></p>
<dt><strong><a name="item_success">success</a></strong><br />
</dt>
<dd>
A code reference to be run for each and every successful e-mail sending.
Each call to this code reference will be given the e-mail address as the only argument
(unless using a message ID, which is discussed below). Optional.
</dd>
<p></p>
<dt><strong><a name="item_failure">failure</a></strong><br />
</dt>
<dd>
A code reference that will be run for any email addresses that cannot be sent. Each
call to this code reference will be given the ID or e-mail address as the argument
(message IDs are discussed below). Optional.
</dd>
<p></p>
<dt><strong><a name="item_frompresend">frompresend</a></strong><br />
</dt>
<dt><strong><a name="item_namepresend">namepresend</a></strong><br />
</dt>
<dt><strong><a name="item_subjectpresend">subjectpresend</a></strong><br />
</dt>
<dt><strong><a name="item_messagepresend">messagepresend</a></strong><br />
</dt>
<dd>
A code reference that will be run before sending an e-mail. The 'from', 'name', 'subject',
or 'message' field will be sent to the code references (depending on which method called)
and whatever is returned will be used as the actual field for the email sent. This can be
used to parse fields to customize them for each recipient. The subroutine is called with
two arguments: (ID_OR_EMAIL, FIELD). If an ID is provided, it will be passed as the
first argument, otherwise the email address will be passed. The second argument is the
field itself. The field used in the actual email to the user will be the value returned by
the subroutine.
</dd>
<dd>
<p>The default field (for the rest of the mailing) can be changed by directly modifying $_[1]
itself.</p>
</dd>
<dd>
<p>If the subroutine reference returns an undefined value, the mailer will use the actual field
instead. You can use this technique to only modify some messages, but not others.</p>
</dd>
<dd>
<p>Optional.</p>
</dd>
<p></p>
<dt><strong><a name="item_show_errors">show_errors</a></strong><br />
</dt>
<dd>
If set to something true it will <code>warn()</code> on all errors. Optional. The default is turned on,
but can easily be changed by modifying the line '
</dd>
<p></p>
<dt><strong><a name="item_error_code">error_code</a></strong><br />
</dt>
<dd>
Takes a code reference - the code reference will be called with the error as the argument
when an error occurs. Optional.
</dd>
<p></p>
<dt><strong><a name="item_send">send</a></strong><br />
</dt>
<dd>
Takes any number of the following arguments:
</dd>
<dl>
<dt><strong><a name="item_array_reference">array reference</a></strong><br />
</dt>
<dd>
An array reference of a list of e-mail addresses to send to. After each message, either the
success or failure callback will be called with the e-mail address as the argument, and
possibly a message as the second argument.
</dd>
<p></p>
<dt><strong><a name="item_hash_reference">hash reference</a></strong><br />
</dt>
<dd>
A hash reference of ID =&gt; email pairs. For example,
123 =&gt; <a href="mailto:'someone@whoknows.com'.">'someone@whoknows.com'.</a> The value will be used as the e-mail address to send
to, and the key will be an identifier to pass into the success or failure callbacks.
</dd>
<p></p>
<dt><strong><a name="item_glob_reference">glob reference</a></strong><br />
</dt>
<dd>
A glob reference to an open file. Make sure the file is opened before passing this!
The file should contain one e-mail address per line.
</dd>
<p></p>
<dt><strong><a name="item_subroutine_or_code_reference">subroutine or code reference</a></strong><br />
</dt>
<dd>
You may pass a code reference, and it will be called for each e-mail address. It is
assumed that the subroutine will return one e-mail address each time called, and
that a return value of ``undef'' indicates that there are no more e-mail addresses.
The code reference could alternatively return two items - if it does, it is assumed that
the first is an ID code, and that the second is the email address. When a call to either
or the success or failure callbacks, the ID will be provided as the first argument
instead of the e-mail address itself.
</dd>
<dd>
<p>One cool feature to note about using code refs is that you can call <code>next()</code> from within
the code reference and it will then recall the code reference for the next value.</p>
</dd>
</dl>
</dl>
</body>
</html>

View File

@ -0,0 +1,454 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>GT::Mail::Editor - E-mail template editor</title>
<link rev="made" href="mailto:root@penguin.office.gossamer-threads.com" />
<style type="text/css">
/* $MVD$:fontset("Untitled Font Set 1","ARIEL","HELVETICA","HELV","SANSERIF") */
/* $MVD$:fontset("Arial","Arial") */
/* $MVD$:fontset("Arial Black","Arial Black") */
/* $MVD$:fontset("Algerian","Algerian") */
body {
background-color: white;
font-family: Verdana, Arial, sans-serif;
font-size: small;
color: black;
}
p {
background-color : white;
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
h1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
background-color : white;
color : maroon;
}
h2 {
font-family : Verdana, Arial, sans-serif;
font-size : medium;
font-weight : bold;
color : blue;
background-color : white;
}
h3 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
color : black;
background-color : white;
}
h4 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : maroon;
background-color : white;
}
h5 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : blue;
background-color : white;
}
h6 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : black;
background-color : white;
}
ul {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
ol {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
li {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
th {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
td {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dd {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dt {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
code {
font-family : Courier;
font-size : small;
color : black;
}
pre {
font-family : Courier;
font-size : small;
color : black;
}
.mvd-H1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : 14.0pt;
background-color : transparent;
background-image : none;
color : maroon;
}
.mvd-H2 {
font-family : Verdana, Arial, sans-serif;
font-size : 12.0pt;
color : blue;
}
p.indent {
font-family : "Verdana, Arial, sans-serif";
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
.mvd-P-indent {
font-family : Verdana, Arial, sans-serif;
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
pre.programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE-programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE {
font-size : 9.0pt;
}
p.note {
margin-left : 28.0pt;
}
.mvd-P-note {
margin-left : 28.0pt;
}
.mvd-H4 {
font-family : Verdana, Arial, sans-serif;
font-weight : normal;
font-size : 9.0pt;
color : black;
margin-left : 6.0pt;
margin-top : -14.0pt;
}
.mvd-P {
font-family : Verdana, Arial, sans-serif;
font-size : 10.0pt;
color : black;
}
.mvd-BODY {
font-family : Verdana, Arial, sans-serif;
background-color : white;
}
p.indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
.mvd-P-indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
</style>
</head>
<body style="background-color: white">
<p><a name="__index__"></a></p>
<!-- INDEX BEGIN -->
<ul>
<li><a href="#name">NAME</a></li>
<li><a href="#synopsis">SYNOPSIS</a></li>
<li><a href="#description">DESCRIPTION</a></li>
<ul>
<li><a href="#tpl_load__loads_a_template__from_the_templates_">tpl_load - Loads a template (from the templates)</a></li>
<li><a href="#tpl_save__save_a_template">tpl_save - Save a template</a></li>
<li><a href="#load">load</a></li>
<li><a href="#new">new</a></li>
</ul>
<li><a href="#copyright">COPYRIGHT</a></li>
<li><a href="#version">VERSION</a></li>
</ul>
<!-- INDEX END -->
<hr />
<p>
</p>
<h1><a name="name">NAME</a></h1>
<p>GT::Mail::Editor - E-mail template editor</p>
<p>
</p>
<hr />
<h1><a name="synopsis">SYNOPSIS</a></h1>
<p>Generally used from templates:</p>
<pre>
&lt;%GT::Mail::Editor::tpl_load(
dir =&gt; $template_root,
template =&gt; $template_set,
file =&gt; $filename,
header =&gt; From,
header =&gt; To,
header =&gt; Subject
)%&gt;</pre>
<pre>
&lt;%if error%&gt;
Unable to load e-mail template: &lt;%error%&gt;
&lt;%else%&gt;
From: &lt;input type=text name=header_From value=&quot;&lt;%header_From%&gt;&quot;&gt;
To: &lt;input type=text name=header_To value=&quot;&lt;%header_To%&gt;&quot;&gt;
Subject: &lt;input type=text name=header_Subject value=&quot;&lt;%header_Subject%&gt;&quot;&gt;
Other headers:&lt;br&gt;
&lt;textarea name=extra_headers&gt;
&lt;%loop extra_headers%&gt;&lt;%name%&gt;: &lt;%value%&gt;
&lt;%endloop%&gt;
&lt;%endif%&gt;</pre>
<pre>
- or -</pre>
<pre>
&lt;%GT::Mail::Editor::save(
dir =&gt; $template_root,
template =&gt; $template_set,
file =&gt; $filename,
header =&gt; To =&gt; $header_To,
header =&gt; From =&gt; $header_From,
header =&gt; Subject =&gt; $header_Subject,
extra_headers =&gt; $extra_headers
)%&gt;
&lt;%if error%&gt;Unable to save e-mail template: &lt;%error%&gt;
... Display the above form in here ...
&lt;%endif%&gt;</pre>
<p>
</p>
<hr />
<h1><a name="description">DESCRIPTION</a></h1>
<p>GT::Mail::Editor is designed to provide a template interface to creating and
editing a wide variety of e-mail templates. Although not currently supported,
eventually attachments, HTML, etc. will be supported.</p>
<p>
</p>
<h2><a name="tpl_load__loads_a_template__from_the_templates_">tpl_load - Loads a template (from the templates)</a></h2>
<p>Calling GT::Mail::Editor::tpl_load from a template returns variables required to
display a form to edit the template passed in.</p>
<dl>
<dt><strong><a name="item_dir">dir</a></strong><br />
</dt>
<dd>
Defines the base directory of templates.
</dd>
<p></p>
<dt><strong><a name="item_template">template</a></strong><br />
</dt>
<dd>
This defines a template set. This is optional. If present, this directory will
be tacked onto the end of 'dir'. This is simply to provide a more flexible way
to specify the template directory. For example, if you have 'dir' set to '/a/b'
and template set to 'c', then the directory '/a/b/c' will be used to save and
load e-mail templates.
</dd>
<p></p>
<dt><strong><a name="item_file">file</a></strong><br />
</dt>
<dd>
Specify the filename of the template inside the directory already specified with
'dir' and 'template'
</dd>
<p></p>
<dt><strong><a name="item_header">header</a></strong><br />
</dt>
<dd>
Multiple ``special'' headers can be requested with this. The argument following
each 'header' should be the name of a header, such as ``To''. Then, in the
variables returned from tpl_load(), you will have a variable such as 'header_To'
available, containing the value of the To: field.
</dd>
<p></p></dl>
<p>
</p>
<h2><a name="tpl_save__save_a_template">tpl_save - Save a template</a></h2>
<dl>
<dt><strong><a name="item_dir_template_file">dir template file</a></strong><br />
</dt>
<dd>
See the entries in <a href="#tpl_load">tpl_load</a>
</dd>
<p></p>
<dt><strong>header</strong><br />
</dt>
<dd>
Specifies that the two following arguments are the field and value of a header
field. For example, header =&gt; To =&gt; <a href="mailto:``abc@example.com''">``abc@example.com''</a> would specify that the To
field should be <a href="mailto:``abc@example.com''">``abc@example.com''</a> (To: <a href="mailto:abc@example.com).">abc@example.com).</a>
</dd>
<p></p>
<dt><strong><a name="item_extra_headers">extra_headers</a></strong><br />
</dt>
<dd>
The value to extra_headers should be a newline-delimited list of headers other
than those specified with header. These will be parsed, and blank lines skipped.
</dd>
<p></p>
<dt><strong><a name="item_body">body</a></strong><br />
</dt>
<dd>
The body of the message. Need I say more? MIME messages are possible by
inserting them directly into the body, however currently MIME messages cannot
be created using this editor.
</dd>
<p></p></dl>
<p>
</p>
<h2><a name="load">load</a></h2>
<p>Attempts to load a GT::Mail::Editor object with data passed in. This can take
either a file handle or a filename. If passing a filename, dir and template
will be used (if available). You should construct an object with <code>new()</code> prior
to calling this method.</p>
<p>
</p>
<h2><a name="new">new</a></h2>
<p>Constructs a new GT::Mail::Editor object. This will be done automatically when
using the template methods <a href="#tpl_load">tpl_load</a> and <a href="#tpl_save">tpl_save</a>. Takes the following
arguments:</p>
<dl>
<dt><strong>dir</strong><br />
</dt>
<dd>
Defines the base directory of templates.
</dd>
<p></p>
<dt><strong>template</strong><br />
</dt>
<dd>
This defines a template set. This is optional. If present, this directory will
be tacked onto the end of 'dir'. This is simply to provide a more flexible way
to specify the template directory. For example, if you have 'dir' set to '/a/b'
and template set to 'c', then the directory '/a/b/c' will be used to save and
load e-mail templates.
</dd>
<p></p></dl>
<p>
</p>
<hr />
<h1><a name="copyright">COPYRIGHT</a></h1>
<p>Copyright (c) 2004 Gossamer Threads Inc. All Rights Reserved.
<a href="http://www.gossamer-threads.com/">http://www.gossamer-threads.com/</a></p>
<p>
</p>
<hr />
<h1><a name="version">VERSION</a></h1>
<p>Revision: $Id: Editor.pm,v 1.24 2005/01/18 23:06:40 bao Exp $</p>
</body>
</html>

View File

@ -0,0 +1,272 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>/tmp/glist/private/lib/GT/Mail/Editor/HTML.pm</title>
<link rev="made" href="mailto:root@penguin.office.gossamer-threads.com" />
<style type="text/css">
/* $MVD$:fontset("Untitled Font Set 1","ARIEL","HELVETICA","HELV","SANSERIF") */
/* $MVD$:fontset("Arial","Arial") */
/* $MVD$:fontset("Arial Black","Arial Black") */
/* $MVD$:fontset("Algerian","Algerian") */
body {
background-color: white;
font-family: Verdana, Arial, sans-serif;
font-size: small;
color: black;
}
p {
background-color : white;
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
h1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
background-color : white;
color : maroon;
}
h2 {
font-family : Verdana, Arial, sans-serif;
font-size : medium;
font-weight : bold;
color : blue;
background-color : white;
}
h3 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
color : black;
background-color : white;
}
h4 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : maroon;
background-color : white;
}
h5 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : blue;
background-color : white;
}
h6 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : black;
background-color : white;
}
ul {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
ol {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
li {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
th {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
td {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dd {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dt {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
code {
font-family : Courier;
font-size : small;
color : black;
}
pre {
font-family : Courier;
font-size : small;
color : black;
}
.mvd-H1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : 14.0pt;
background-color : transparent;
background-image : none;
color : maroon;
}
.mvd-H2 {
font-family : Verdana, Arial, sans-serif;
font-size : 12.0pt;
color : blue;
}
p.indent {
font-family : "Verdana, Arial, sans-serif";
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
.mvd-P-indent {
font-family : Verdana, Arial, sans-serif;
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
pre.programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE-programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE {
font-size : 9.0pt;
}
p.note {
margin-left : 28.0pt;
}
.mvd-P-note {
margin-left : 28.0pt;
}
.mvd-H4 {
font-family : Verdana, Arial, sans-serif;
font-weight : normal;
font-size : 9.0pt;
color : black;
margin-left : 6.0pt;
margin-top : -14.0pt;
}
.mvd-P {
font-family : Verdana, Arial, sans-serif;
font-size : 10.0pt;
color : black;
}
.mvd-BODY {
font-family : Verdana, Arial, sans-serif;
background-color : white;
}
p.indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
.mvd-P-indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
</style>
</head>
<body style="background-color: white">
<p><a name="__index__"></a></p>
<!-- INDEX BEGIN -->
<!-- INDEX END -->
</body>
</html>

View File

@ -0,0 +1,272 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>/tmp/glist/private/lib/GT/Mail/Editor/Text.pm</title>
<link rev="made" href="mailto:root@penguin.office.gossamer-threads.com" />
<style type="text/css">
/* $MVD$:fontset("Untitled Font Set 1","ARIEL","HELVETICA","HELV","SANSERIF") */
/* $MVD$:fontset("Arial","Arial") */
/* $MVD$:fontset("Arial Black","Arial Black") */
/* $MVD$:fontset("Algerian","Algerian") */
body {
background-color: white;
font-family: Verdana, Arial, sans-serif;
font-size: small;
color: black;
}
p {
background-color : white;
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
h1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
background-color : white;
color : maroon;
}
h2 {
font-family : Verdana, Arial, sans-serif;
font-size : medium;
font-weight : bold;
color : blue;
background-color : white;
}
h3 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
color : black;
background-color : white;
}
h4 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : maroon;
background-color : white;
}
h5 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : blue;
background-color : white;
}
h6 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : black;
background-color : white;
}
ul {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
ol {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
li {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
th {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
td {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dd {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dt {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
code {
font-family : Courier;
font-size : small;
color : black;
}
pre {
font-family : Courier;
font-size : small;
color : black;
}
.mvd-H1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : 14.0pt;
background-color : transparent;
background-image : none;
color : maroon;
}
.mvd-H2 {
font-family : Verdana, Arial, sans-serif;
font-size : 12.0pt;
color : blue;
}
p.indent {
font-family : "Verdana, Arial, sans-serif";
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
.mvd-P-indent {
font-family : Verdana, Arial, sans-serif;
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
pre.programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE-programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE {
font-size : 9.0pt;
}
p.note {
margin-left : 28.0pt;
}
.mvd-P-note {
margin-left : 28.0pt;
}
.mvd-H4 {
font-family : Verdana, Arial, sans-serif;
font-weight : normal;
font-size : 9.0pt;
color : black;
margin-left : 6.0pt;
margin-top : -14.0pt;
}
.mvd-P {
font-family : Verdana, Arial, sans-serif;
font-size : 10.0pt;
color : black;
}
.mvd-BODY {
font-family : Verdana, Arial, sans-serif;
background-color : white;
}
p.indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
.mvd-P-indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
</style>
</head>
<body style="background-color: white">
<p><a name="__index__"></a></p>
<!-- INDEX BEGIN -->
<!-- INDEX END -->
</body>
</html>

View File

@ -0,0 +1,364 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>GT::Mail::Encoder - MIME Encoder</title>
<link rev="made" href="mailto:root@penguin.office.gossamer-threads.com" />
<style type="text/css">
/* $MVD$:fontset("Untitled Font Set 1","ARIEL","HELVETICA","HELV","SANSERIF") */
/* $MVD$:fontset("Arial","Arial") */
/* $MVD$:fontset("Arial Black","Arial Black") */
/* $MVD$:fontset("Algerian","Algerian") */
body {
background-color: white;
font-family: Verdana, Arial, sans-serif;
font-size: small;
color: black;
}
p {
background-color : white;
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
h1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
background-color : white;
color : maroon;
}
h2 {
font-family : Verdana, Arial, sans-serif;
font-size : medium;
font-weight : bold;
color : blue;
background-color : white;
}
h3 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
color : black;
background-color : white;
}
h4 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : maroon;
background-color : white;
}
h5 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : blue;
background-color : white;
}
h6 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : black;
background-color : white;
}
ul {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
ol {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
li {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
th {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
td {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dd {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dt {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
code {
font-family : Courier;
font-size : small;
color : black;
}
pre {
font-family : Courier;
font-size : small;
color : black;
}
.mvd-H1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : 14.0pt;
background-color : transparent;
background-image : none;
color : maroon;
}
.mvd-H2 {
font-family : Verdana, Arial, sans-serif;
font-size : 12.0pt;
color : blue;
}
p.indent {
font-family : "Verdana, Arial, sans-serif";
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
.mvd-P-indent {
font-family : Verdana, Arial, sans-serif;
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
pre.programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE-programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE {
font-size : 9.0pt;
}
p.note {
margin-left : 28.0pt;
}
.mvd-P-note {
margin-left : 28.0pt;
}
.mvd-H4 {
font-family : Verdana, Arial, sans-serif;
font-weight : normal;
font-size : 9.0pt;
color : black;
margin-left : 6.0pt;
margin-top : -14.0pt;
}
.mvd-P {
font-family : Verdana, Arial, sans-serif;
font-size : 10.0pt;
color : black;
}
.mvd-BODY {
font-family : Verdana, Arial, sans-serif;
background-color : white;
}
p.indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
.mvd-P-indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
</style>
</head>
<body style="background-color: white">
<p><a name="__index__"></a></p>
<!-- INDEX BEGIN -->
<ul>
<li><a href="#name">NAME</a></li>
<li><a href="#synopsis">SYNOPSIS</a></li>
<li><a href="#description">DESCRIPTION</a></li>
<ul>
<li><a href="#encoding_a_stream">Encoding a stream</a></li>
</ul>
<li><a href="#copyright">COPYRIGHT</a></li>
<li><a href="#version">VERSION</a></li>
</ul>
<!-- INDEX END -->
<hr />
<p>
</p>
<h1><a name="name">NAME</a></h1>
<p>GT::Mail::Encoder - MIME Encoder</p>
<p>
</p>
<hr />
<h1><a name="synopsis">SYNOPSIS</a></h1>
<pre>
open IN, 'decoded.txt' or die $!;
open OUT, '&gt;encoded.txt' or die $!;
if (GT::Mail::Encoder-&gt;supported ('7bit')) {
GT::Mail::Encoder-&gt;decode (
debug =&gt; 1,
encoding =&gt; '7bit',
in =&gt; \*IN,
out =&gt; sub { print OUT $_[0] }
) or die $GT::Mail::Encoder::error;
}
else {
die &quot;Unsupported encoding&quot;;
}
close IN;
close OUT;</pre>
<p>
</p>
<hr />
<h1><a name="description">DESCRIPTION</a></h1>
<p>GT::Mail::Encoder is a MIME Encoder implemented in perl. It will try to use
the C extension for encoding Base64. If the extension is not there
it will do it in perl (slow!).</p>
<p>
</p>
<h2><a name="encoding_a_stream">Encoding a stream</a></h2>
<p>The <code>new()</code> constructor and the <code>supported()</code> class method are the only methods that
are public in the interface. The <code>new()</code> constructor takes a hash of params.
The <code>supported()</code> method takes a single string, the name of the encoding you want
to encode and returns true if the encoding is supported and false otherwise.</p>
<dl>
<dt><strong><a name="item_debug">debug</a></strong><br />
</dt>
<dd>
Set debugging level. 1 or 0.
</dd>
<p></p>
<dt><strong><a name="item_encoding">encoding</a></strong><br />
</dt>
<dd>
Sets the encoding used to encode.
</dd>
<p></p>
<dt><strong><a name="item_in">in</a></strong><br />
</dt>
<dd>
Set to a file handle or IO handle.
</dd>
<p></p>
<dt><strong><a name="item_out">out</a></strong><br />
</dt>
<dd>
Set to a code reference, the decoded stream will be passed in at the first
argument for each chunk encoded.
</dd>
<p></p></dl>
<p>
</p>
<hr />
<h1><a name="copyright">COPYRIGHT</a></h1>
<p>Copyright (c) 2004 Gossamer Threads Inc. All Rights Reserved.
<a href="http://www.gossamer-threads.com/">http://www.gossamer-threads.com/</a></p>
<p>
</p>
<hr />
<h1><a name="version">VERSION</a></h1>
<p>Revision: $Id: Encoder.pm,v 1.40 2004/01/13 01:35:17 jagerman Exp $
</p>
</body>
</html>

View File

@ -0,0 +1,399 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>GT::Mail::Message - Encapsolates an email message.</title>
<link rev="made" href="mailto:root@penguin.office.gossamer-threads.com" />
<style type="text/css">
/* $MVD$:fontset("Untitled Font Set 1","ARIEL","HELVETICA","HELV","SANSERIF") */
/* $MVD$:fontset("Arial","Arial") */
/* $MVD$:fontset("Arial Black","Arial Black") */
/* $MVD$:fontset("Algerian","Algerian") */
body {
background-color: white;
font-family: Verdana, Arial, sans-serif;
font-size: small;
color: black;
}
p {
background-color : white;
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
h1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
background-color : white;
color : maroon;
}
h2 {
font-family : Verdana, Arial, sans-serif;
font-size : medium;
font-weight : bold;
color : blue;
background-color : white;
}
h3 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
color : black;
background-color : white;
}
h4 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : maroon;
background-color : white;
}
h5 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : blue;
background-color : white;
}
h6 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : black;
background-color : white;
}
ul {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
ol {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
li {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
th {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
td {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dd {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dt {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
code {
font-family : Courier;
font-size : small;
color : black;
}
pre {
font-family : Courier;
font-size : small;
color : black;
}
.mvd-H1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : 14.0pt;
background-color : transparent;
background-image : none;
color : maroon;
}
.mvd-H2 {
font-family : Verdana, Arial, sans-serif;
font-size : 12.0pt;
color : blue;
}
p.indent {
font-family : "Verdana, Arial, sans-serif";
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
.mvd-P-indent {
font-family : Verdana, Arial, sans-serif;
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
pre.programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE-programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE {
font-size : 9.0pt;
}
p.note {
margin-left : 28.0pt;
}
.mvd-P-note {
margin-left : 28.0pt;
}
.mvd-H4 {
font-family : Verdana, Arial, sans-serif;
font-weight : normal;
font-size : 9.0pt;
color : black;
margin-left : 6.0pt;
margin-top : -14.0pt;
}
.mvd-P {
font-family : Verdana, Arial, sans-serif;
font-size : 10.0pt;
color : black;
}
.mvd-BODY {
font-family : Verdana, Arial, sans-serif;
background-color : white;
}
p.indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
.mvd-P-indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
</style>
</head>
<body style="background-color: white">
<p><a name="__index__"></a></p>
<!-- INDEX BEGIN -->
<ul>
<li><a href="#name">NAME</a></li>
<li><a href="#synopsis">SYNOPSIS</a></li>
<li><a href="#description">DESCRIPTION</a></li>
<ul>
<li><a href="#creating_a_new_gt__mail__message_object">Creating a new GT::Mail::Message object</a></li>
<li><a href="#creating_a_new_part">Creating a new Part</a></li>
<li><a href="#manipulating_parts">Manipulating Parts</a></li>
<li><a href="#accessing_parts">Accessing Parts</a></li>
</ul>
<li><a href="#copyright">COPYRIGHT</a></li>
<li><a href="#version">VERSION</a></li>
</ul>
<!-- INDEX END -->
<hr />
<p>
</p>
<h1><a name="name">NAME</a></h1>
<p>GT::Mail::Message - Encapsolates an email message.</p>
<p>
</p>
<hr />
<h1><a name="synopsis">SYNOPSIS</a></h1>
<pre>
use GT::Mail::Message;
# Get a GT::Mail::Message object from the parser
use GT::Mail::Parse;</pre>
<pre>
my $parser = new GT::Mail::Parse( in_file =&gt; &quot;myemail.eml&quot; );
my $message = $parser-&gt;parse;</pre>
<pre>
# Get the top level part
my $root_part = $message-&gt;root_part;</pre>
<pre>
# Replace the first part with a new part
$message-&gt;replace_part( $root_part, $message-&gt;new_part(
to =&gt; 'scott@gossamer-threads.com',
from =&gt; 'alex@gossamer-threads.com',
'content-type' =&gt; 'text/plain',
body_data =&gt; 'Hi Scott, how are you?!'
);</pre>
<pre>
# Add a part at the end
my $end_part = $message-&gt;new_part(
'content-type' =&gt; 'image/gif',
body_path =&gt; 'myimage.jpg'
);
$message-&gt;add_part_end( $root_part, $end_part );</pre>
<pre>
# Move the first part in the top part to after the end part
$message-&gt;move_part_after( $root_part-&gt;parts-&gt;[0], $end_part );</pre>
<pre>
# Print the mime message
print $message-&gt;to_string;</pre>
<p>
</p>
<hr />
<h1><a name="description">DESCRIPTION</a></h1>
<p>GT::Mail::Message encapsolates a mime message which consists of
<a href="glist.cgi?do=admin_gtdoc&topic=/GT/Mail/Parts.html">the GT::Mail::Parts manpage</a> object. This module provides methods to change,
move, remove, and access these parts.</p>
<p>
</p>
<h2><a name="creating_a_new_gt__mail__message_object">Creating a new GT::Mail::Message object</a></h2>
<p>Usually you will get a GT::Mail::Message object by call the parse method
in <a href="glist.cgi?do=admin_gtdoc&topic=/GT/Mail/Parse.html">the GT::Mail::Parse manpage</a>.</p>
<pre>
my $message = $parser-&gt;parse;</pre>
<p>You may also call new on this class specifying the top level part and or
a debug level.</p>
<pre>
my $message = new GT::Mail::Message(
root_part =&gt; $part,
debug =&gt; 1
);</pre>
<p>
</p>
<h2><a name="creating_a_new_part">Creating a new Part</a></h2>
<p>You can create a part by calling new on <a href="glist.cgi?do=admin_gtdoc&topic=/GT/Mail/Parts.html">the GT::Mail::Parts manpage</a> directly</p>
<pre>
my $part = new GT::Mail::Parts;
$part-&gt;set( 'content-type' =&gt; 'image/gif' );
$part-&gt;body_path( 'myimage.gif' );</pre>
<p>or you can call a method in this module to get a new part</p>
<pre>
my $part = $message-&gt;new_part(
'content-type' =&gt; 'image/gif',
body_path =&gt; 'myimage.gif'
);</pre>
<p>This method is a wraper on a combination of <code>new()</code> and some other
supporting methods in <a href="glist.cgi?do=admin_gtdoc&topic=/GT/Mail/Parts.html">the GT::Mail::Parts manpage</a> such as body_path(). Anything
that is not <strong>body_path</strong>, <strong>body_data</strong>, or <strong>body_handle</strong> is treated
as header values.</p>
<p>
</p>
<h2><a name="manipulating_parts">Manipulating Parts</a></h2>
<p>A MIME message is just a format for storing a tree structure. We provide
tree-like methods to manipulate parts. All the method for manipulating
parts take the part <code>object(s)</code> as arguments. We do this so you do not need
to know how the tree is tracked internally.</p>
<p>
</p>
<h2><a name="accessing_parts">Accessing Parts</a></h2>
<p>More to come!</p>
<p>
</p>
<hr />
<h1><a name="copyright">COPYRIGHT</a></h1>
<p>Copyright (c) 2004 Gossamer Threads Inc. All Rights Reserved.
<a href="http://www.gossamer-threads.com/">http://www.gossamer-threads.com/</a>
</p>
<p>
</p>
<hr />
<h1><a name="version">VERSION</a></h1>
<p>Revision: $Id: Message.pm,v 1.14 2004/01/13 01:35:17 jagerman Exp $
</p>
<pre>
</pre>
</body>
</html>

View File

@ -0,0 +1,594 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>GT::Mail::POP3 - Receieve email through POP3 protocal</title>
<link rev="made" href="mailto:root@penguin.office.gossamer-threads.com" />
<style type="text/css">
/* $MVD$:fontset("Untitled Font Set 1","ARIEL","HELVETICA","HELV","SANSERIF") */
/* $MVD$:fontset("Arial","Arial") */
/* $MVD$:fontset("Arial Black","Arial Black") */
/* $MVD$:fontset("Algerian","Algerian") */
body {
background-color: white;
font-family: Verdana, Arial, sans-serif;
font-size: small;
color: black;
}
p {
background-color : white;
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
h1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
background-color : white;
color : maroon;
}
h2 {
font-family : Verdana, Arial, sans-serif;
font-size : medium;
font-weight : bold;
color : blue;
background-color : white;
}
h3 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
color : black;
background-color : white;
}
h4 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : maroon;
background-color : white;
}
h5 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : blue;
background-color : white;
}
h6 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : black;
background-color : white;
}
ul {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
ol {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
li {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
th {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
td {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dd {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dt {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
code {
font-family : Courier;
font-size : small;
color : black;
}
pre {
font-family : Courier;
font-size : small;
color : black;
}
.mvd-H1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : 14.0pt;
background-color : transparent;
background-image : none;
color : maroon;
}
.mvd-H2 {
font-family : Verdana, Arial, sans-serif;
font-size : 12.0pt;
color : blue;
}
p.indent {
font-family : "Verdana, Arial, sans-serif";
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
.mvd-P-indent {
font-family : Verdana, Arial, sans-serif;
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
pre.programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE-programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE {
font-size : 9.0pt;
}
p.note {
margin-left : 28.0pt;
}
.mvd-P-note {
margin-left : 28.0pt;
}
.mvd-H4 {
font-family : Verdana, Arial, sans-serif;
font-weight : normal;
font-size : 9.0pt;
color : black;
margin-left : 6.0pt;
margin-top : -14.0pt;
}
.mvd-P {
font-family : Verdana, Arial, sans-serif;
font-size : 10.0pt;
color : black;
}
.mvd-BODY {
font-family : Verdana, Arial, sans-serif;
background-color : white;
}
p.indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
.mvd-P-indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
</style>
</head>
<body style="background-color: white">
<p><a name="__index__"></a></p>
<!-- INDEX BEGIN -->
<ul>
<li><a href="#name">NAME</a></li>
<li><a href="#synopsis">SYNOPSIS</a></li>
<li><a href="#description">DESCRIPTION</a></li>
<ul>
<li><a href="#new__constructor_method">new - constructor method</a></li>
<li><a href="#connect__connect_to_the_pop_account">connect - Connect to the POP account</a></li>
<li><a href="#head_part__access_the_email_header">head_part - Access the email header</a></li>
<li><a href="#all_head_parts__access_all_email_headers">all_head_parts - Access all email headers</a></li>
<li><a href="#parse_message__access_an_email">parse_message - Access an email</a></li>
<li><a href="#message_save__save_an_email">message_save - Save an email</a></li>
<li><a href="#stat__do_a_stat_command">stat - Do a STAT command</a></li>
<li><a href="#list__do_a_list_command">list - Do a LIST command</a></li>
<li><a href="#rset__do_an_rset_command">rset - Do an RSET command</a></li>
<li><a href="#dele__do_a_dele_command">dele - Do a DELE command</a></li>
<li><a href="#quit__quit_the_connection">quit - Quit the connection</a></li>
<li><a href="#uidl__do_a_uidl_command">uidl - Do a UIDL command</a></li>
<li><a href="#count__get_the_number_of_messages">count - Get the number of messages</a></li>
<li><a href="#size__get_the_size_of_all_messages">size - Get the size of all messages</a></li>
<li><a href="#send__send_a_raw_command">send - Send a raw command</a></li>
<li><a href="#top__retrieve_the_header">top - Retrieve the header</a></li>
<li><a href="#retr__retrieve_an_email">retr - Retrieve an email</a></li>
</ul>
<li><a href="#requirements">REQUIREMENTS</a></li>
<li><a href="#copyright">COPYRIGHT</a></li>
<li><a href="#version">VERSION</a></li>
</ul>
<!-- INDEX END -->
<hr />
<p>
</p>
<h1><a name="name">NAME</a></h1>
<p>GT::Mail::POP3 - Receieve email through POP3 protocal</p>
<p>
</p>
<hr />
<h1><a name="synopsis">SYNOPSIS</a></h1>
<pre>
use GT::Mail::POP3;</pre>
<pre>
my $pop = GT::Mail::POP3-&gt;new(
host =&gt; 'mail.gossamer-threads.com',
port =&gt; 110,
user =&gt; 'someusername',
pass =&gt; 'somepassword',
auth_mode =&gt; 'PASS',
timeout =&gt; 30,
debug =&gt; 1
);</pre>
<pre>
my $count = $pop-&gt;connect or die $GT::Mail::POP3::error;</pre>
<pre>
for my $num (1 .. $count) {
my $top = $pop-&gt;parse_head($num);</pre>
<pre>
my @to = $top-&gt;split_field;</pre>
<pre>
if (grep /myfriend\@gossamer-threads\.com/, @to) {
$pop-&gt;message_save($num, '/keep/email.txt');
last;
}
}</pre>
<p>
</p>
<hr />
<h1><a name="description">DESCRIPTION</a></h1>
<p>GT::Mail::POP3 is a module to check an email account using the POP3 protocol.
Many of the methods are integrated with <a href="glist.cgi?do=admin_gtdoc&topic=/GT/Mail/Parse.html">the GT::Mail::Parse manpage</a>.</p>
<p>
</p>
<h2><a name="new__constructor_method">new - constructor method</a></h2>
<p>This method is inherited from <a href="glist.cgi?do=admin_gtdoc&topic=/GT/Base.html">the GT::Base manpage</a>. The argument to this method can be
in the form of a hash or hash ref. As a minimum 'user', 'pass', and 'host' must
be specified.</p>
<dl>
<dt><strong><a name="item_debug">debug</a></strong><br />
</dt>
<dd>
Sets the debugging level for this instance of GT::Mail::POP3.
</dd>
<p></p>
<dt><strong><a name="item_host">host</a></strong><br />
</dt>
<dd>
Sets the host to connect to for checking a POP account. This argument must be
provided.
</dd>
<p></p>
<dt><strong><a name="item_port">port</a></strong><br />
</dt>
<dd>
Sets the port on the POP server to attempt to connect to. This defaults to 110,
unless using SSL, for which the default is 995.
</dd>
<p></p>
<dt><strong><a name="item_ssl">ssl</a></strong><br />
</dt>
<dd>
Establishes the connection using SSL. Note that this requires Net::SSLeay of
at least version 1.06.
</dd>
<p></p>
<dt><strong><a name="item_user">user</a></strong><br />
</dt>
<dd>
Sets the user name to login with when connecting to the POP server. This must
be specified.
</dd>
<p></p>
<dt><strong><a name="item_pass">pass</a></strong><br />
</dt>
<dd>
Sets the password to login with when connection to the POP server. This must be
specified.
</dd>
<p></p>
<dt><strong><a name="item_auth_mode">auth_mode</a></strong><br />
</dt>
<dd>
Sets the authentication type for this connection. This can be one of two
values. PASS (the default) or APOP. If set to APOP, GT::Mail::POP3 will use
APOP to login to the remote server.
</dd>
<p></p>
<dt><strong><a name="item_timeout">timeout</a></strong><br />
</dt>
<dd>
Sets the connection timeout. This isn't entirely reliable as it uses alarm(),
which isn't supported on all systems. That aside, this normally isn't needed
if you want a timeout - it defaults to 30 on alarm()-supporting systems. The
main purpose is to provide a value of 0 to disable the <code>alarm()</code> timeout.
</dd>
<p></p></dl>
<p>
</p>
<h2><a name="connect__connect_to_the_pop_account">connect - Connect to the POP account</a></h2>
<pre>
$obj-&gt;connect or die $GT::Mail::POP3::error;</pre>
<p>This method performs the connection to the POP server. Returns the count of
messages on the server on success, and undefined on failure. Takes no arguments
and called before you can perform any actions on the POP server.</p>
<p>
</p>
<h2><a name="head_part__access_the_email_header">head_part - Access the email header</a></h2>
<pre>
# Get a parsed header part object for the first email in the list.
my $top_part = $obj-&gt;head_part(1);</pre>
<p>Instance method. The only argument to this method is the message number to get.
Returns a <a href="glist.cgi?do=admin_gtdoc&topic=/GT/Mail/Parts.html">the GT::Mail::Parts manpage</a> object containing only the parsed header of the
specified message.</p>
<p>
</p>
<h2><a name="all_head_parts__access_all_email_headers">all_head_parts - Access all email headers</a></h2>
<pre>
# Get all the head parts from all messages
my @headers = $obj-&gt;all_head_parts;</pre>
<p>Instance method. Gets all the headers of all the email's on the remote server.
Returns an array of the <a href="glist.cgi?do=admin_gtdoc&topic=/GT/Mail/Parts.html">the GT::Mail::Parts manpage</a> object. One object for each
email. None of the email's bodies are retrieved, only the head.</p>
<p>
</p>
<h2><a name="parse_message__access_an_email">parse_message - Access an email</a></h2>
<pre>
# Parse an email and get the GT::Mail object
my $mail = $obj-&gt;parse_message (1);</pre>
<p>Instance method. Pass in the number of the email to retrieve. This method
retrieves the specified email and returns the parsed GT::Mail object. If this
method fails you should check $GT::Mail::error for the error message.</p>
<p>
</p>
<h2><a name="message_save__save_an_email">message_save - Save an email</a></h2>
<pre>
open FH, '/path/to/email.txt' or die $!;</pre>
<pre>
# Save message 2 to file
$obj-&gt;message_save (2, \*FH);
close FH;</pre>
<p>- or -</p>
<pre>
$obj-&gt;message_save (2, '/path/to/email.txt') or die $GT::Mail::POP3::error;</pre>
<p>Instance method. This method takes the message number as it's first argument,
and either a file path or a file handle ref as it's second argument. If a file
path is provided the file will be opened to truncate. The email is then
retrieved from the server and written to the file.</p>
<p>
</p>
<h2><a name="stat__do_a_stat_command">stat - Do a STAT command</a></h2>
<pre>
# Get the number of messages on the server
my $count = $obj-&gt;stat;</pre>
<p>Instance method. Does a STAT command on the remote server. It stores the total
size and returns the count of messages on the server, if successful. Otherwise
returns undef.</p>
<p>
</p>
<h2><a name="list__do_a_list_command">list - Do a LIST command</a></h2>
<pre>
# At a list of messages on the server
my @messages = $obj-&gt;list;</pre>
<p>Instance method. Does a LIST command on the remote server. Returns an array of
the lines in list context and a single scalar that contains all the lines in
scalar context.</p>
<p>
</p>
<h2><a name="rset__do_an_rset_command">rset - Do an RSET command</a></h2>
<pre>
# Tell the server to ignore any dele commands we have issued in this
# session
$obj-&gt;rset;</pre>
<p>Instance method. Does an RSET command. This command resets the servers
knowledge of what should be deleted when QUIT is called. Returns 1 on success.</p>
<p>
</p>
<h2><a name="dele__do_a_dele_command">dele - Do a DELE command</a></h2>
<pre>
# Delete message 4
$obj-&gt;dele (4);</pre>
<p>Instance method. Does a DELE command. The only argument is the message number
to delete. Returns 1 on success.</p>
<p>
</p>
<h2><a name="quit__quit_the_connection">quit - Quit the connection</a></h2>
<pre>
# Close our connection
$obj-&gt;quit;</pre>
<p>Instance method. Sends the QUIT command to the server. The should should
disconnect soon after this. No more actions can be taken on this connection
until connect is called again.</p>
<p>
</p>
<h2><a name="uidl__do_a_uidl_command">uidl - Do a UIDL command</a></h2>
<pre>
# Get the uidl for message 1
my $uidl = $obj-&gt;uidl (1);</pre>
<pre>
# Get a list of all the uidl's and print them
$obj-&gt;uidl (sub { print @_ });</pre>
<pre>
# Get an array of all the uidl's
my @uidl = $obj-&gt;uidl;</pre>
<p>Instance method. Attempts to do a UIDL command on the remote server. Please be
aware support for the UIDL command is not very wide spread. This method can
take the message number as it's first argument. If the message number is given,
the UIDL for that message is returned. If the first argument is a code
reference, a UIDL command is done with no message specified and the code
reference is called for each line returned from the remote server. If no second
argument is given, a UIDL command is done, and the results are returned in a
has of message number to UIDL.</p>
<p>
</p>
<h2><a name="count__get_the_number_of_messages">count - Get the number of messages</a></h2>
<pre>
# Get the count from the last STAT
my $count = $obj-&gt;count;</pre>
<p>This method returns the number of messages on the server from the last STAT
command. A STAT is done on connect.</p>
<p>
</p>
<h2><a name="size__get_the_size_of_all_messages">size - Get the size of all messages</a></h2>
<pre>
# Get the total size of all messages on the server
my $size = $obj-&gt;size;</pre>
<p>This method returns the size of all messages in the server as returned by the
last STAT command sent to the server.</p>
<p>
</p>
<h2><a name="send__send_a_raw_command">send - Send a raw command</a></h2>
<pre>
# Send a raw command to the server
my $ret = $obj-&gt;send (&quot;HELO&quot;);</pre>
<p>This method sends the specified raw command to the POP server. The one line
return from the server is returned. Do not call this method if you are
expecting more than a one line response.</p>
<p>
</p>
<h2><a name="top__retrieve_the_header">top - Retrieve the header</a></h2>
<pre>
# Get the header of message 2 in an array. New lines are stripped
my @header = $obj-&gt;top (2);</pre>
<pre>
# Get the header as a string
my $header = $obj-&gt;top (2);</pre>
<p>Instance method to retrieve the top of an email on the POP server. The only
argument should be the message number to retrieve. Returns a scalar containing
the header in scalar context and an array, which is the scalar split on
\015?\012, in list context.</p>
<p>
</p>
<h2><a name="retr__retrieve_an_email">retr - Retrieve an email</a></h2>
<pre>
# Get message 3 from the remote server in an array. New lines are stripped
my @email = $obj-&gt;retr (3);</pre>
<pre>
# Get it as a string
my $email = $obj-&gt;retr (3);</pre>
<p>Instance method to retrieve an email from the POP server. The first argument to
this method should be the message number to retrieve. The second argument is an
optional code ref to call for each line of the message that is retrieved. If no
code ref is specified, this method will put the email in a scalar and return
the scalar in scalar context and return the scalar split on \015?\012 in list
context.</p>
<p>
</p>
<hr />
<h1><a name="requirements">REQUIREMENTS</a></h1>
<p><a href="glist.cgi?do=admin_gtdoc&topic=/GT/Socket/Client.html">the GT::Socket::Client manpage</a>
<a href="glist.cgi?do=admin_gtdoc&topic=/GT/Base.html">the GT::Base manpage</a>
<a href="glist.cgi?do=admin_gtdoc&topic=/GT/MD5.html">the GT::MD5 manpage</a> (for APOP authentication)</p>
<p>
</p>
<hr />
<h1><a name="copyright">COPYRIGHT</a></h1>
<p>Copyright (c) 2004 Gossamer Threads Inc. All Rights Reserved.
<a href="http://www.gossamer-threads.com/">http://www.gossamer-threads.com/</a></p>
<p>
</p>
<hr />
<h1><a name="version">VERSION</a></h1>
<p>Revision: $Id: POP3.pm,v 1.56 2004/03/19 00:36:16 brewt Exp $</p>
</body>
</html>

View File

@ -0,0 +1,420 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>GT::Mail::Parse - MIME Parse</title>
<link rev="made" href="mailto:root@penguin.office.gossamer-threads.com" />
<style type="text/css">
/* $MVD$:fontset("Untitled Font Set 1","ARIEL","HELVETICA","HELV","SANSERIF") */
/* $MVD$:fontset("Arial","Arial") */
/* $MVD$:fontset("Arial Black","Arial Black") */
/* $MVD$:fontset("Algerian","Algerian") */
body {
background-color: white;
font-family: Verdana, Arial, sans-serif;
font-size: small;
color: black;
}
p {
background-color : white;
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
h1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
background-color : white;
color : maroon;
}
h2 {
font-family : Verdana, Arial, sans-serif;
font-size : medium;
font-weight : bold;
color : blue;
background-color : white;
}
h3 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
color : black;
background-color : white;
}
h4 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : maroon;
background-color : white;
}
h5 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : blue;
background-color : white;
}
h6 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : black;
background-color : white;
}
ul {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
ol {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
li {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
th {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
td {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dd {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dt {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
code {
font-family : Courier;
font-size : small;
color : black;
}
pre {
font-family : Courier;
font-size : small;
color : black;
}
.mvd-H1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : 14.0pt;
background-color : transparent;
background-image : none;
color : maroon;
}
.mvd-H2 {
font-family : Verdana, Arial, sans-serif;
font-size : 12.0pt;
color : blue;
}
p.indent {
font-family : "Verdana, Arial, sans-serif";
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
.mvd-P-indent {
font-family : Verdana, Arial, sans-serif;
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
pre.programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE-programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE {
font-size : 9.0pt;
}
p.note {
margin-left : 28.0pt;
}
.mvd-P-note {
margin-left : 28.0pt;
}
.mvd-H4 {
font-family : Verdana, Arial, sans-serif;
font-weight : normal;
font-size : 9.0pt;
color : black;
margin-left : 6.0pt;
margin-top : -14.0pt;
}
.mvd-P {
font-family : Verdana, Arial, sans-serif;
font-size : 10.0pt;
color : black;
}
.mvd-BODY {
font-family : Verdana, Arial, sans-serif;
background-color : white;
}
p.indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
.mvd-P-indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
</style>
</head>
<body style="background-color: white">
<p><a name="__index__"></a></p>
<!-- INDEX BEGIN -->
<ul>
<li><a href="#name">NAME</a></li>
<li><a href="#synopsis">SYNOPSIS</a></li>
<li><a href="#description">DESCRIPTION</a></li>
<ul>
<li><a href="#new__constructor_method">new - Constructor method</a></li>
<li><a href="#parse__parse_an_email">parse - Parse an email</a></li>
<li><a href="#parse_head__parse_just_the_header_of_the_email">parse_head - Parse just the header of the email</a></li>
<li><a href="#size__get_the_size">size - Get the size</a></li>
<li><a href="#all_parts__get_all_parts">all_parts - Get all parts</a></li>
</ul>
<li><a href="#copyright">COPYRIGHT</a></li>
<li><a href="#version">VERSION</a></li>
</ul>
<!-- INDEX END -->
<hr />
<p>
</p>
<h1><a name="name">NAME</a></h1>
<p>GT::Mail::Parse - MIME Parse</p>
<p>
</p>
<hr />
<h1><a name="synopsis">SYNOPSIS</a></h1>
<pre>
use GT::Mail::Parse
my $parser = new GT::Mail::Parse (
naming =&gt; \&amp;name_files,
in_file =&gt; '/path/to/file.eml',
debug =&gt; 1
);</pre>
<pre>
my $top = $parser-&gt;parse or die $GT::Mail::Parse::error;</pre>
<pre>
- or -</pre>
<pre>
my $parser = new GT::Mail::Parse;
open FH, '/path/to/file.eml' or die $!;
my $top = $parser-&gt;parse (
naming =&gt; \&amp;name_files,
handle =&gt; \*FH,
debug =&gt; 1
) or die $GT::Mail::Parse::error;
close FH;</pre>
<pre>
- or -</pre>
<pre>
my $parser = new GT::Mail::Parse;</pre>
<pre>
my $top_head = $parser-&gt;parse_head (
naming =&gt; \&amp;name_files,
in_file =&gt; '/path/to/file.eml',
debug =&gt; 1
) or die $GT::Mail::Parse::error;</pre>
<p>
</p>
<hr />
<h1><a name="description">DESCRIPTION</a></h1>
<p>GT::Mail::Parse is a 100% rfc822 email MIME parser that supports unlimited
nested levels of MIME. Emails are parsed into <a href="glist.cgi?do=admin_gtdoc&topic=/GT/Mail/Parts.html">the GT::Mail::Parts manpage</a> objects. Each
part knows where it's body is and each part contains it's sub parts. See
<a href="glist.cgi?do=admin_gtdoc&topic=/GT/Mail/Parts.html">the GT::Mail::Parts manpage</a> for details on parts methods.</p>
<p>
</p>
<h2><a name="new__constructor_method">new - Constructor method</a></h2>
<p>This is the constructor method to get a GT::Mail::Parse object, which you
need to access all the methods (there are no Class methods). <code>new()</code> takes
a hash or hash ref as it's arguments. Each key has an accessor method by the
same name except debug, which can only be set by passing debug to new(), <code>parse()</code>
or parse_head().</p>
<dl>
<dt><strong><a name="item_debug">debug</a></strong><br />
</dt>
<dd>
Sets the debug level for this insance of the class.
</dd>
<p></p>
<dt><strong><a name="item_naming">naming</a></strong><br />
</dt>
<dd>
Specify a code reference to use as a naming convention for each part of the
email being parsed. This is useful to keep file IO down when you want the emails
seperated into each part as a file. If this is not specified GT::Mail::Parse
uses a default naming, which is to start at one and incriment that number for each
attachment. The attachments would go in the current working directory.
</dd>
<p></p>
<dt><strong><a name="item_in_file">in_file</a></strong><br />
</dt>
<dd>
Specify the path to the file that contains the email to be parsed. One of in_file
and handle must be specified.
</dd>
<p></p>
<dt><strong><a name="item_handle">handle</a></strong><br />
</dt>
<dd>
Specify the file handle or IO stream that contains the email to be parsed.
</dd>
<p></p></dl>
<dl>
<dt><strong><a name="item_attach_rfc822">attach_rfc822</a></strong><br />
</dt>
<dd>
By default, the parser will decode any embeded emails, and flatten out all the
parts. If you prefer to leave embeded emails unparsed, pass in 1 to this option
and the parser will treat it as an attachment.
</dd>
<p></p></dl>
<p>
</p>
<h2><a name="parse__parse_an_email">parse - Parse an email</a></h2>
<p>Instance method. Parses the email specified by either in_file or handle. Returns
the top level <a href="glist.cgi?do=admin_gtdoc&topic=/GT/Mail/Parts.html">the GT::Mail::Parts manpage</a> object. Any additional parameters passed in are
treated the same as if they were passed to the constuctor.</p>
<p>
</p>
<h2><a name="parse_head__parse_just_the_header_of_the_email">parse_head - Parse just the header of the email</a></h2>
<p>Instance method. This method is exactly the same as parse except only the top
level header is parsed and it's part object returned. This is useful to keep
overhead down if you only need to know about the header of the email.</p>
<p>
</p>
<h2><a name="size__get_the_size">size - Get the size</a></h2>
<p>Instance method. Returns the total size in bytes of the parsed unencoded email. This
method will return undef if no email has been parsed.</p>
<p>
</p>
<h2><a name="all_parts__get_all_parts">all_parts - Get all parts</a></h2>
<p>Instance method. Returns all the parts in the parsed email. This is a flatened
list of the objects. Somewhat similar to what MIME::Tools does. All the parts
still contain their sub parts.</p>
<p>
</p>
<hr />
<h1><a name="copyright">COPYRIGHT</a></h1>
<p>Copyright (c) 2004 Gossamer Threads Inc. All Rights Reserved.
<a href="http://www.gossamer-threads.com/">http://www.gossamer-threads.com/</a></p>
<p>
</p>
<hr />
<h1><a name="version">VERSION</a></h1>
<p>Revision: $Id: Parse.pm,v 1.79 2004/10/23 02:16:39 brewt Exp $</p>
</body>
</html>

View File

@ -0,0 +1,570 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>GT::Mail::Parts - Data storage class for MIME parts</title>
<link rev="made" href="mailto:root@penguin.office.gossamer-threads.com" />
<style type="text/css">
/* $MVD$:fontset("Untitled Font Set 1","ARIEL","HELVETICA","HELV","SANSERIF") */
/* $MVD$:fontset("Arial","Arial") */
/* $MVD$:fontset("Arial Black","Arial Black") */
/* $MVD$:fontset("Algerian","Algerian") */
body {
background-color: white;
font-family: Verdana, Arial, sans-serif;
font-size: small;
color: black;
}
p {
background-color : white;
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
h1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
background-color : white;
color : maroon;
}
h2 {
font-family : Verdana, Arial, sans-serif;
font-size : medium;
font-weight : bold;
color : blue;
background-color : white;
}
h3 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
color : black;
background-color : white;
}
h4 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : maroon;
background-color : white;
}
h5 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : blue;
background-color : white;
}
h6 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : black;
background-color : white;
}
ul {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
ol {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
li {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
th {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
td {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dd {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dt {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
code {
font-family : Courier;
font-size : small;
color : black;
}
pre {
font-family : Courier;
font-size : small;
color : black;
}
.mvd-H1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : 14.0pt;
background-color : transparent;
background-image : none;
color : maroon;
}
.mvd-H2 {
font-family : Verdana, Arial, sans-serif;
font-size : 12.0pt;
color : blue;
}
p.indent {
font-family : "Verdana, Arial, sans-serif";
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
.mvd-P-indent {
font-family : Verdana, Arial, sans-serif;
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
pre.programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE-programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE {
font-size : 9.0pt;
}
p.note {
margin-left : 28.0pt;
}
.mvd-P-note {
margin-left : 28.0pt;
}
.mvd-H4 {
font-family : Verdana, Arial, sans-serif;
font-weight : normal;
font-size : 9.0pt;
color : black;
margin-left : 6.0pt;
margin-top : -14.0pt;
}
.mvd-P {
font-family : Verdana, Arial, sans-serif;
font-size : 10.0pt;
color : black;
}
.mvd-BODY {
font-family : Verdana, Arial, sans-serif;
background-color : white;
}
p.indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
.mvd-P-indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
</style>
</head>
<body style="background-color: white">
<p><a name="__index__"></a></p>
<!-- INDEX BEGIN -->
<ul>
<li><a href="#name">NAME</a></li>
<li><a href="#synopsis">SYNOPSIS</a></li>
<li><a href="#description">DESCRIPTION</a></li>
<ul>
<li><a href="#effective_type__access_the_effective_mime_type">effective_type - Access the effective MIME type</a></li>
<li><a href="#get__access_header_tags_">get - Access header tags.</a></li>
<li><a href="#set__set_a_header_tag_">set - Set a header tag.</a></li>
<li><a href="#delete__remove_a_header_tag_">delete - Remove a header tag.</a></li>
<li><a href="#size__access_the_total_size_">size - Access the total size.</a></li>
<li><a href="#preamble__set_or_get_the_preamble_">preamble - Set or get the preamble.</a></li>
<li><a href="#epilogue__set_or_get_the_epilogue_">epilogue - Set or get the epilogue.</a></li>
<li><a href="#mime_type__set_or_get_the_mime_type_">mime_type - Set or get the MIME type.</a></li>
<li><a href="#is_multipart__see_if_you_have_a_multipart_part_">is_multipart - See if you have a multi-part part.</a></li>
<li><a href="#parts__access_sub_parts_">parts - Access sub parts.</a></li>
<li><a href="#multipart_boundary__set_or_get_the_multipart_boundary_">multipart_boundary - Set or get the multi-part boundary.</a></li>
<li><a href="#header_as_string__access_the_whole_header_">header_as_string - Access the whole header.</a></li>
<li><a href="#split_field__retrieve_the_emails_split_up_into_an_array_">split_field - Retrieve the emails split up into an array.</a></li>
<li><a href="#suggest_encoding__get_a_suggestion_for_encoding_">suggest_encoding - Get a suggestion for encoding.</a></li>
<li><a href="#recommended_filename__figure_out_the_file_name_">recommended_filename - Figure out the file name.</a></li>
<li><a href="#body_as_string__get_the_body_as_a_string_">body_as_string - Get the body as a string.</a></li>
<li><a href="#body_in__find_the_body_">body_in - Find the body.</a></li>
<li><a href="#body_data__get_the_in_memory_body_">body_data - Get the in memory body.</a></li>
<li><a href="#body_handle__get_an_io_handle_to_the_body_">body_handle - Get an IO handle to the body.</a></li>
<li><a href="#body_path__get_the_location_of_the_file_the_body_is_in_">body_path - Get the location of the file the body is in.</a></li>
</ul>
<li><a href="#copyright">COPYRIGHT</a></li>
<li><a href="#version">VERSION</a></li>
</ul>
<!-- INDEX END -->
<hr />
<p>
</p>
<h1><a name="name">NAME</a></h1>
<p>GT::Mail::Parts - Data storage class for MIME parts</p>
<p>
</p>
<hr />
<h1><a name="synopsis">SYNOPSIS</a></h1>
<pre>
use GT::Mail;</pre>
<pre>
my $mail = new GT::Mail;</pre>
<pre>
my $top_part = $mail-&gt;parse('/path/to/email');</pre>
<pre>
# Access the emails as an array
my @to = $top_part-&gt;split_field('to');
my @from = $top_part-&gt;split_field('from');</pre>
<pre>
# Access to the header fields
my $mailer = $top_part-&gt;get('X-Mailer');
my $subject = $top_part-&gt;get('Subject');</pre>
<pre>
# Access to this parts sub part
if ($top_part-&gt;is_multipart) {
my @parts = $top_parts-&gt;parts;
for my $part (@parts) {</pre>
<pre>
# Access parts of the header
print &quot;Filename: &quot;, $part-&gt;recommended_filename, &quot;\n&quot;;
print &quot;Part is multi-part\n&quot; if $part-&gt;is_multipart;</pre>
<pre>
# Get the body as a string
my $body = $part-&gt;body_as_string;
}
}</pre>
<pre>
# Change who it is to
$top_part-&gt;set('to', 'scott@gossamer-threads.com');</pre>
<pre>
# Remove the bcc line
$top_part-&gt;delete('bcc');</pre>
<p>
</p>
<hr />
<h1><a name="description">DESCRIPTION</a></h1>
<p>GT::Mail::Parts is a class to provide methods to change and
access a MIME messages. The object for this class is meant to
be istansiated from <a href="glist.cgi?do=admin_gtdoc&topic=/GT/Mail.html">the GT::Mail manpage</a>.</p>
<p>
</p>
<h2><a name="effective_type__access_the_effective_mime_type">effective_type - Access the effective MIME type</a></h2>
<pre>
my $type = $obj-&gt;effective_type;</pre>
<pre>
if ($type eq 'application/octet-stream') {
...
}</pre>
<p>This method returns the effective MIME Type of this objects part.</p>
<p>
</p>
<h2><a name="get__access_header_tags_">get - Access header tags.</a></h2>
<pre>
my $subj = $obj-&gt;get('Subject');</pre>
<pre>
# or if there is more than one
my @recv = $obj-&gt;get('Received');</pre>
<p>Used to access any of the tags in the header of the MIME part. If the
tag requested is not present returns false. The first argument to this
method is the name of he tag you want to extract. This is case insensitive.</p>
<p>
</p>
<h2><a name="set__set_a_header_tag_">set - Set a header tag.</a></h2>
<pre>
# Change who the email is to
$obj-&gt;set('to', 'scott@gossamer-threads.com');</pre>
<pre>
# Change the second Received tag
$obj-&gt;set('Received', 'from unknown', 1);</pre>
<p>Set any of the tags in the header. If the tag does not exist this will create
it. This method takes three arguments. The first is the name of the tag to
change or add, this is case insensitive. The second argument is the value for
the tag. The third zero based optional argument is the position. The position
will default to zero if it is not specified.</p>
<p>
</p>
<h2><a name="delete__remove_a_header_tag_">delete - Remove a header tag.</a></h2>
<pre>
# Delete who the message is from
$obj-&gt;delete('from');</pre>
<p>This method deletes the tag specified by the first argument from this MIME
part.</p>
<p>
</p>
<h2><a name="size__access_the_total_size_">size - Access the total size.</a></h2>
<pre>
my $size = $obj-&gt;size;</pre>
<p>This method returns the total size of this part. This includes the header and
the body.</p>
<p>
</p>
<h2><a name="preamble__set_or_get_the_preamble_">preamble - Set or get the preamble.</a></h2>
<pre>
# Retrieve the preamble
my $pre = $obj-&gt;preamble;</pre>
<pre>
# Set the preamble
$obj-&gt;preamble('This is a multi-part message in MIME format.');</pre>
<p>This is a set get method for the preamble. The preamble is the part after the
head but before the first MIME boundary. This method makes no since if this
is not a multi-part part.</p>
<p>
</p>
<h2><a name="epilogue__set_or_get_the_epilogue_">epilogue - Set or get the epilogue.</a></h2>
<pre>
# Retrieve the epilogue
my $ep = $obj-&gt;epilogue;</pre>
<pre>
# Set the epilogue
$obj-&gt;epilogue('This is my cool epilogue');</pre>
<p>This is a set get method for the epilogue. The epilogue is the part of the
MIME part after the MIME boundary and before the next head. This method makes
no since if this is not a multi-part part.</p>
<p>
</p>
<h2><a name="mime_type__set_or_get_the_mime_type_">mime_type - Set or get the MIME type.</a></h2>
<pre>
my ($type, $subtype) = split('/', $obj-&gt;mime_type);</pre>
<p>This method returns the MIME type of this part. You can pass in an argument
to change the MIME type as well. So you could do</p>
<pre>
$obj-&gt;mime_type('text/plain');</pre>
<p>This is probably not such a good idea unless you are constructing the email from
scratch.</p>
<p>
</p>
<h2><a name="is_multipart__see_if_you_have_a_multipart_part_">is_multipart - See if you have a multi-part part.</a></h2>
<pre>
if ($obj-&gt;is_multipart) {
# do some multi-part stuff
}</pre>
<p>Returns true is this part is a multi-part MIME part.</p>
<p>
</p>
<h2><a name="parts__access_sub_parts_">parts - Access sub parts.</a></h2>
<pre>
my @parts = $obj-&gt;parts;</pre>
<p>Returns the parts object this part contains. Returns false if this part does
no have any sub parts. The parts objects that returns are from this same class.
Any parts that are milti-part should contain parts.</p>
<p>
</p>
<h2><a name="multipart_boundary__set_or_get_the_multipart_boundary_">multipart_boundary - Set or get the multi-part boundary.</a></h2>
<pre>
my $boundary = $obj-&gt;multipart_boundary;</pre>
<p>This returns the multi-part boundary for this part. Setting this is never needed
and may be removed in the future. This method only makes since if you are working
with a multi-part pert.</p>
<p>
</p>
<h2><a name="header_as_string__access_the_whole_header_">header_as_string - Access the whole header.</a></h2>
<pre>
my $head = $obj-&gt;header_as_string;</pre>
<p>This method creates and returns the header for this part. The returned header should
be fully rfc822 compliant. Avoid calling this method more than once, as it will build
the header from an internal data structure each time.</p>
<p>
</p>
<h2><a name="split_field__retrieve_the_emails_split_up_into_an_array_">split_field - Retrieve the emails split up into an array.</a></h2>
<pre>
my @to = $obj-&gt;split_field; # Defaults to 'to'
my @bcc = $obj-&gt;split_field('bcc');</pre>
<p>This is mostly a utility method. It takes an option argument as to the field you want
the email address from (default is to), it then splits the emails on '\s*,\s*' that is
not inside quotes. Returns an array of the split up string.</p>
<p>
</p>
<h2><a name="suggest_encoding__get_a_suggestion_for_encoding_">suggest_encoding - Get a suggestion for encoding.</a></h2>
<pre>
my $encode = $obj-&gt;suggest_encoding;</pre>
<p>Returns a suggested encoding for the body of this message. This is useful to decide
what encoding you should use for the body when building an email. This is used in
<a href="glist.cgi?do=admin_gtdoc&topic=/GT/Mail/Parse.html">the GT::Mail::Parse manpage</a> to decide how to encode the message body.</p>
<p>
</p>
<h2><a name="recommended_filename__figure_out_the_file_name_">recommended_filename - Figure out the file name.</a></h2>
<pre>
my $file = $obj-&gt;recommended_filename;
if ($file) {
...
}</pre>
<p>This method tries to figure out the file name of this part. This does not make much
since if this part is not an attachment of some kind. Returns an empty string on
failure.</p>
<p>
</p>
<h2><a name="body_as_string__get_the_body_as_a_string_">body_as_string - Get the body as a string.</a></h2>
<p>This method returns the entire body of the MIME message as a string. You should not
use this method if the body could be large.</p>
<p>
</p>
<h2><a name="body_in__find_the_body_">body_in - Find the body.</a></h2>
<pre>
my $in = $obj-&gt;body_in;
my $body;</pre>
<pre>
if ($in eq 'MEMORY') {
$body = $obj-&gt;body_data;
}
elsif ($in eq 'HANDLE') {
$body = $obj-&gt;body_handle;
}
elsif ($in eq 'FILE') {
$body = $obj-&gt;body_path;
}</pre>
<p>This method returns the location of the body. The location can be one of three things:</p>
<dl>
<dt><strong><a name="item_memory">MEMORY</a></strong><br />
</dt>
<dd>
The body is in a string.
</dd>
<p></p>
<dt><strong><a name="item_handle">HANDLE</a></strong><br />
</dt>
<dd>
The body is in an IO handle.
</dd>
<p></p>
<dt><strong><a name="item_file">FILE</a></strong><br />
</dt>
<dd>
The body is in a file.
</dd>
<p></p></dl>
<p>You would use this to decide what method to use to access the body. If the MIME message
was parsed into GT::Mail::Parts using <a href="glist.cgi?do=admin_gtdoc&topic=/GT/Mail/Parser.html">the GT::Mail::Parser manpage</a> the body will always be in
a FILE.</p>
<p>
</p>
<h2><a name="body_data__get_the_in_memory_body_">body_data - Get the in memory body.</a></h2>
<p>This method returns the body if it is stored in memory. Returns undefined if the body is
not in memory.</p>
<p>
</p>
<h2><a name="body_handle__get_an_io_handle_to_the_body_">body_handle - Get an IO handle to the body.</a></h2>
<p>This method returns a handle to the body if the body is stored in a handle for this part.
Returns undefined if not.</p>
<p>
</p>
<h2><a name="body_path__get_the_location_of_the_file_the_body_is_in_">body_path - Get the location of the file the body is in.</a></h2>
<p>This method returns the file path to the file the body is located in if the body for this
part is stored in a file. Returns undefined if not.</p>
<p>
</p>
<hr />
<h1><a name="copyright">COPYRIGHT</a></h1>
<p>Copyright (c) 2004 Gossamer Threads Inc. All Rights Reserved.
<a href="http://www.gossamer-threads.com/">http://www.gossamer-threads.com/</a></p>
<p>
</p>
<hr />
<h1><a name="version">VERSION</a></h1>
<p>$Revision: 1.77 $</p>
</body>
</html>

View File

@ -0,0 +1,383 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>GT::Mail::Send - Module to send emails</title>
<link rev="made" href="mailto:root@penguin.office.gossamer-threads.com" />
<style type="text/css">
/* $MVD$:fontset("Untitled Font Set 1","ARIEL","HELVETICA","HELV","SANSERIF") */
/* $MVD$:fontset("Arial","Arial") */
/* $MVD$:fontset("Arial Black","Arial Black") */
/* $MVD$:fontset("Algerian","Algerian") */
body {
background-color: white;
font-family: Verdana, Arial, sans-serif;
font-size: small;
color: black;
}
p {
background-color : white;
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
h1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
background-color : white;
color : maroon;
}
h2 {
font-family : Verdana, Arial, sans-serif;
font-size : medium;
font-weight : bold;
color : blue;
background-color : white;
}
h3 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
color : black;
background-color : white;
}
h4 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : maroon;
background-color : white;
}
h5 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : blue;
background-color : white;
}
h6 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : black;
background-color : white;
}
ul {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
ol {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
li {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
th {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
td {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dd {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dt {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
code {
font-family : Courier;
font-size : small;
color : black;
}
pre {
font-family : Courier;
font-size : small;
color : black;
}
.mvd-H1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : 14.0pt;
background-color : transparent;
background-image : none;
color : maroon;
}
.mvd-H2 {
font-family : Verdana, Arial, sans-serif;
font-size : 12.0pt;
color : blue;
}
p.indent {
font-family : "Verdana, Arial, sans-serif";
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
.mvd-P-indent {
font-family : Verdana, Arial, sans-serif;
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
pre.programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE-programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE {
font-size : 9.0pt;
}
p.note {
margin-left : 28.0pt;
}
.mvd-P-note {
margin-left : 28.0pt;
}
.mvd-H4 {
font-family : Verdana, Arial, sans-serif;
font-weight : normal;
font-size : 9.0pt;
color : black;
margin-left : 6.0pt;
margin-top : -14.0pt;
}
.mvd-P {
font-family : Verdana, Arial, sans-serif;
font-size : 10.0pt;
color : black;
}
.mvd-BODY {
font-family : Verdana, Arial, sans-serif;
background-color : white;
}
p.indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
.mvd-P-indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
</style>
</head>
<body style="background-color: white">
<p><a name="__index__"></a></p>
<!-- INDEX BEGIN -->
<ul>
<li><a href="#name">NAME</a></li>
<li><a href="#synopsis">SYNOPSIS</a></li>
<li><a href="#description">DESCRIPTION</a></li>
<ul>
<li><a href="#new__constructor_method">new - Constructor method</a></li>
<li><a href="#smtp">smtp</a></li>
<li><a href="#sendmail">sendmail</a></li>
</ul>
<li><a href="#copyright">COPYRIGHT</a></li>
<li><a href="#version">VERSION</a></li>
</ul>
<!-- INDEX END -->
<hr />
<p>
</p>
<h1><a name="name">NAME</a></h1>
<p>GT::Mail::Send - Module to send emails</p>
<p>
</p>
<hr />
<h1><a name="synopsis">SYNOPSIS</a></h1>
<pre>
use GT::Mail::Send;
# $mail_object must be a GT::Mail object
my $send = new GT::Mail::Send (
mail =&gt; $mail_object,
host =&gt; 'smtp.gossamer-threads.com',
debug =&gt; 1
);</pre>
<pre>
$send-&gt;smtp or die $GT::Mail::Send::error;</pre>
<p>
</p>
<hr />
<h1><a name="description">DESCRIPTION</a></h1>
<p>GT::Mail::Send is an object interface to sending email over either
SMTP or Sendmail. This module is used internally to GT::Mail.</p>
<p>
</p>
<h2><a name="new__constructor_method">new - Constructor method</a></h2>
<p>Returns a new GT::Mail::Send object. You must specify either the smtp host
or a path to sendmail. This method is inherented from GT::Base. The arguments
can be in the form of a hash or hash ref.</p>
<dl>
<dt><strong><a name="item_debug">debug</a></strong><br />
</dt>
<dd>
Sets the debug level for this instance of GT::Mail::Send.
</dd>
<p></p>
<dt><strong><a name="item_mail">mail</a></strong><br />
</dt>
<dd>
Specify the mail object to use. This must be a GT::Mail object and must contain
an email, either passed in or parsed in.
</dd>
<p></p>
<dt><strong><a name="item_host">host</a></strong><br />
</dt>
<dd>
Specify the host to use when sending by SMTP.
</dd>
<p></p>
<dt><strong><a name="item_port">port</a></strong><br />
</dt>
<dd>
Specify the port to use when sending over SMTP. Defaults to 25.
</dd>
<p></p>
<dt><strong><a name="item_path">path</a></strong><br />
</dt>
<dd>
Specify the path to sendmail when sending over sendmail. If the binary passed in
does not exist, undef will be returned and the error set in GT::Mail::Send::error.
</dd>
<p></p>
<dt><strong><a name="item_flags">flags</a></strong><br />
</dt>
<dd>
Specify the flags used to call sendmail. Defaults to -t -oi -oeq, see the Sendmail
guilde for sendmail for more info on the parameters to sendmail.
</dd>
<p></p></dl>
<p>
</p>
<h2><a name="smtp">smtp</a></h2>
<p>Class or instance method. Sends the passed in email over SMTP. If called as a class
method, the parameters passed in will be used to call new(). Returns true on error,
false otherwise.</p>
<p>
</p>
<h2><a name="sendmail">sendmail</a></h2>
<p>Class or instance method. Send the passed in email to sendmail using the specified
path and flags. If called as a class method all additional arguments are passed to the
<code>new()</code> method. Returns true on success and false otherwise.</p>
<p>
</p>
<hr />
<h1><a name="copyright">COPYRIGHT</a></h1>
<p>Copyright (c) 2004 Gossamer Threads Inc. All Rights Reserved.
<a href="http://www.gossamer-threads.com/">http://www.gossamer-threads.com/</a></p>
<p>
</p>
<hr />
<h1><a name="version">VERSION</a></h1>
<p>Revision: $Id: Send.pm,v 1.53 2004/08/23 20:07:44 jagerman Exp $</p>
</body>
</html>