Sophie

Sophie

distrib > Fedora > 14 > x86_64 > media > updates > by-pkgid > ec5844e219498f2057da8f8f3070d4a1 > files > 283

ghc-MissingH-devel-1.1.0.3-2.fc14.i686.rpm

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<!-- Generated by HsColour, http://www.cs.york.ac.uk/fp/darcs/hscolour/ -->
<title>src/Network/Email/Sendmail.hs</title>
<link type='text/css' rel='stylesheet' href='hscolour.css' />
</head>
<body>
<pre><a name="line-1"></a><span class='hs-comment'>{-# LANGUAGE CPP #-}</span>
<a name="line-2"></a><span class='hs-comment'>{- arch-tag: Sendmail utility
<a name="line-3"></a>Copyright (C) 2004-2005 John Goerzen &lt;jgoerzen@complete.org&gt;
<a name="line-4"></a>
<a name="line-5"></a>This program is free software; you can redistribute it and/or modify
<a name="line-6"></a>it under the terms of the GNU General Public License as published by
<a name="line-7"></a>the Free Software Foundation; either version 2 of the License, or
<a name="line-8"></a>(at your option) any later version.
<a name="line-9"></a>
<a name="line-10"></a>This program is distributed in the hope that it will be useful,
<a name="line-11"></a>but WITHOUT ANY WARRANTY; without even the implied warranty of
<a name="line-12"></a>MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
<a name="line-13"></a>GNU General Public License for more details.
<a name="line-14"></a>
<a name="line-15"></a>You should have received a copy of the GNU General Public License
<a name="line-16"></a>along with this program; if not, write to the Free Software
<a name="line-17"></a>Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
<a name="line-18"></a>-}</span>
<a name="line-19"></a>
<a name="line-20"></a><span class='hs-comment'>{- |
<a name="line-21"></a>   Module     : Network.Email.Sendmail
<a name="line-22"></a>   Copyright  : Copyright (C) 2004-2005 John Goerzen
<a name="line-23"></a>   License    : GNU GPL, version 2 or above
<a name="line-24"></a>
<a name="line-25"></a>   Maintainer : John Goerzen &lt;jgoerzen@complete.org&gt;
<a name="line-26"></a>   Stability  : provisional
<a name="line-27"></a>   Portability: portable
<a name="line-28"></a>
<a name="line-29"></a>This Haskell module provides an interface to transmitting a mail message.
<a name="line-30"></a>
<a name="line-31"></a>This is not compatible with Windows at this time.
<a name="line-32"></a>
<a name="line-33"></a>Written by John Goerzen, jgoerzen\@complete.org
<a name="line-34"></a>-}</span>
<a name="line-35"></a>
<a name="line-36"></a><span class='hs-cpp'>#if (defined(mingw32_HOST_OS) || defined(mingw32_TARGET_OS) || defined(__MINGW32__))</span>
<a name="line-37"></a><span class='hs-keyword'>module</span> <span class='hs-conid'>Network</span><span class='hs-varop'>.</span><span class='hs-conid'>Email</span><span class='hs-varop'>.</span><span class='hs-conid'>Sendmail</span>
<a name="line-38"></a><span class='hs-keyword'>where</span>
<a name="line-39"></a><span class='hs-cpp'>#else</span>
<a name="line-40"></a><span class='hs-keyword'>module</span> <span class='hs-conid'>Network</span><span class='hs-varop'>.</span><span class='hs-conid'>Email</span><span class='hs-varop'>.</span><span class='hs-conid'>Sendmail</span><span class='hs-layout'>(</span><span class='hs-varid'>sendmail</span><span class='hs-layout'>)</span>
<a name="line-41"></a><span class='hs-keyword'>where</span>
<a name="line-42"></a>
<a name="line-43"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>System</span><span class='hs-varop'>.</span><span class='hs-conid'>Cmd</span><span class='hs-varop'>.</span><span class='hs-conid'>Utils</span>
<a name="line-44"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>System</span><span class='hs-varop'>.</span><span class='hs-conid'>Directory</span>
<a name="line-45"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>System</span><span class='hs-varop'>.</span><span class='hs-conid'>IO</span>
<a name="line-46"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>System</span><span class='hs-varop'>.</span><span class='hs-conid'>IO</span><span class='hs-varop'>.</span><span class='hs-conid'>Error</span>
<a name="line-47"></a>
<a name="line-48"></a><a name="sendmails"></a><span class='hs-definition'>sendmails</span> <span class='hs-keyglyph'>::</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>String</span><span class='hs-keyglyph'>]</span>
<a name="line-49"></a><span class='hs-definition'>sendmails</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyglyph'>[</span><span class='hs-str'>"/usr/sbin/sendmail"</span><span class='hs-layout'>,</span>
<a name="line-50"></a>             <span class='hs-str'>"/usr/local/sbin/sendmail"</span><span class='hs-layout'>,</span>
<a name="line-51"></a>             <span class='hs-str'>"/usr/local/bin/sendmail"</span><span class='hs-layout'>,</span>
<a name="line-52"></a>             <span class='hs-str'>"/usr/bin/sendmail"</span><span class='hs-layout'>,</span>
<a name="line-53"></a>             <span class='hs-str'>"/etc/sendmail"</span><span class='hs-layout'>,</span>
<a name="line-54"></a>             <span class='hs-str'>"/usr/etc/sendmail"</span><span class='hs-keyglyph'>]</span>
<a name="line-55"></a>
<a name="line-56"></a><a name="findsendmail"></a><span class='hs-definition'>findsendmail</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>IO</span> <span class='hs-conid'>String</span>
<a name="line-57"></a><span class='hs-definition'>findsendmail</span> <span class='hs-keyglyph'>=</span>
<a name="line-58"></a>    <span class='hs-keyword'>let</span> <span class='hs-varid'>worker</span> <span class='hs-conid'>[]</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>return</span> <span class='hs-str'>"sendmail"</span>
<a name="line-59"></a>        <span class='hs-varid'>worker</span> <span class='hs-layout'>(</span><span class='hs-varid'>this</span><span class='hs-conop'>:</span><span class='hs-varid'>next</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span>
<a name="line-60"></a>            <span class='hs-keyword'>do</span>
<a name="line-61"></a>            <span class='hs-varid'>e</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>doesFileExist</span> <span class='hs-varid'>this</span>
<a name="line-62"></a>            <span class='hs-keyword'>if</span> <span class='hs-varid'>e</span> <span class='hs-keyword'>then</span>
<a name="line-63"></a>               <span class='hs-keyword'>do</span>
<a name="line-64"></a>               <span class='hs-varid'>p</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>getPermissions</span> <span class='hs-varid'>this</span>
<a name="line-65"></a>               <span class='hs-keyword'>if</span> <span class='hs-varid'>executable</span> <span class='hs-varid'>p</span> <span class='hs-keyword'>then</span>
<a name="line-66"></a>                  <span class='hs-varid'>return</span> <span class='hs-varid'>this</span>
<a name="line-67"></a>                  <span class='hs-keyword'>else</span> <span class='hs-varid'>worker</span> <span class='hs-varid'>next</span>
<a name="line-68"></a>               <span class='hs-keyword'>else</span> <span class='hs-varid'>worker</span> <span class='hs-varid'>next</span>
<a name="line-69"></a>        <span class='hs-keyword'>in</span>
<a name="line-70"></a>        <span class='hs-varid'>worker</span> <span class='hs-varid'>sendmails</span>
<a name="line-71"></a>
<a name="line-72"></a><a name="sendmail"></a><span class='hs-comment'>{- | Transmits an e-mail message using the system's mail transport agent.
<a name="line-73"></a>
<a name="line-74"></a>This function takes a message, a list of recipients, and an optional sender,
<a name="line-75"></a>and transmits it using the system's MTA, sendmail.
<a name="line-76"></a>
<a name="line-77"></a>If @sendmail@ is on the @PATH@, it will be used; otherwise, a list of system
<a name="line-78"></a>default locations will be searched.
<a name="line-79"></a>
<a name="line-80"></a>A failure will be logged, since this function uses 'System.Cmd.Utils.safeSystem'
<a name="line-81"></a>internally.
<a name="line-82"></a>
<a name="line-83"></a>This function will first try @sendmail@.  If it does not exist, an error is
<a name="line-84"></a>logged under @System.Cmd.Utils.pOpen3@ and various default @sendmail@ locations
<a name="line-85"></a>are tried.  If that still fails, an error is logged and an exception raised.
<a name="line-86"></a>
<a name="line-87"></a> -}</span>
<a name="line-88"></a><span class='hs-definition'>sendmail</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Maybe</span> <span class='hs-conid'>String</span>                <span class='hs-comment'>-- ^ The envelope from address.  If not specified, takes the system's default, which is usually based on the effective userid of the current process.  This is not necessarily what you want, so I recommend specifying it.</span>
<a name="line-89"></a>         <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>String</span><span class='hs-keyglyph'>]</span>                    <span class='hs-comment'>-- ^ A list of recipients for your message.  An empty list is an error.</span>
<a name="line-90"></a>         <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>String</span>                      <span class='hs-comment'>-- ^ The message itself.</span>
<a name="line-91"></a>         <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-conid'>()</span>
<a name="line-92"></a><span class='hs-definition'>sendmail</span> <span class='hs-keyword'>_</span> <span class='hs-conid'>[]</span> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>fail</span> <span class='hs-str'>"sendmail: no recipients specified"</span>
<a name="line-93"></a><span class='hs-definition'>sendmail</span> <span class='hs-conid'>Nothing</span> <span class='hs-varid'>recipients</span> <span class='hs-varid'>msg</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>sendmail_worker</span> <span class='hs-varid'>recipients</span> <span class='hs-varid'>msg</span>
<a name="line-94"></a><span class='hs-definition'>sendmail</span> <span class='hs-layout'>(</span><span class='hs-conid'>Just</span> <span class='hs-varid'>from</span><span class='hs-layout'>)</span> <span class='hs-varid'>recipients</span> <span class='hs-varid'>msg</span> <span class='hs-keyglyph'>=</span>
<a name="line-95"></a>    <span class='hs-varid'>sendmail_worker</span> <span class='hs-layout'>(</span><span class='hs-layout'>(</span><span class='hs-str'>"-f"</span> <span class='hs-varop'>++</span> <span class='hs-varid'>from</span><span class='hs-layout'>)</span> <span class='hs-conop'>:</span> <span class='hs-varid'>recipients</span><span class='hs-layout'>)</span> <span class='hs-varid'>msg</span>
<a name="line-96"></a>
<a name="line-97"></a><a name="sendmail_worker"></a><span class='hs-definition'>sendmail_worker</span> <span class='hs-keyglyph'>::</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>String</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>String</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-conid'>()</span>
<a name="line-98"></a><span class='hs-definition'>sendmail_worker</span> <span class='hs-varid'>args</span> <span class='hs-varid'>msg</span> <span class='hs-keyglyph'>=</span>
<a name="line-99"></a>    <span class='hs-keyword'>let</span> <span class='hs-varid'>func</span> <span class='hs-varid'>h</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>hPutStr</span> <span class='hs-varid'>h</span> <span class='hs-varid'>msg</span>
<a name="line-100"></a>        <span class='hs-keyword'>in</span>
<a name="line-101"></a>        <span class='hs-keyword'>do</span>
<a name="line-102"></a>        <span class='hs-comment'>--pOpen WriteToPipe "/usr/sbin/sendmail" args func</span>
<a name="line-103"></a>        <span class='hs-varid'>rv</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>try</span> <span class='hs-layout'>(</span><span class='hs-varid'>pOpen</span> <span class='hs-conid'>WriteToPipe</span> <span class='hs-str'>"sendmail"</span> <span class='hs-varid'>args</span> <span class='hs-varid'>func</span><span class='hs-layout'>)</span>
<a name="line-104"></a>        <span class='hs-keyword'>case</span> <span class='hs-varid'>rv</span> <span class='hs-keyword'>of</span>
<a name="line-105"></a>            <span class='hs-conid'>Right</span> <span class='hs-varid'>x</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>return</span> <span class='hs-varid'>x</span>
<a name="line-106"></a>            <span class='hs-conid'>Left</span> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyword'>do</span>
<a name="line-107"></a>                      <span class='hs-varid'>sn</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>findsendmail</span>
<a name="line-108"></a>                      <span class='hs-varid'>r</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>pOpen</span> <span class='hs-conid'>WriteToPipe</span> <span class='hs-varid'>sn</span> <span class='hs-varid'>args</span> <span class='hs-varid'>func</span>
<a name="line-109"></a>                      <span class='hs-varid'>return</span> <span class='hs-varop'>$!</span> <span class='hs-varid'>r</span>
<a name="line-110"></a>
<a name="line-111"></a><span class='hs-cpp'>#endif</span>
<a name="line-112"></a>
</pre></body>
</html>