|
Posted by Steve on 03/24/07 17:18
"Webmaster of campbarbee.com" <@> wrote in message
news:UYudncfMqq3d0pjbnZ2dnUVZ_rWnnZ2d@comcast.com...
| >
| > csv and xls are text files. xls is a stylization for xml (which is
probably
| > what you meant). as it is, there are hundreds of examples on the
net...and,
| > this sounds a lot like a spamming enterprise.
|
|
|
| Hi Steve,
|
| Actually, it's for the annual group of kids at a Christian Church Camp
| who want to leave their email addresses for their friends.
|
| Go to www.campbarbee.com and click on the "Email Addresses" link and
| you'll see the CGI script that I want to replace with something a
| little more modern before my hosting service does away with their
| support for CGI sometime this summer.
|
| Any suggestions about where I can find a few of those hundreds of
| examples on the net that you wrote about? I would really like to see a
| few of them before our host dumps CGI support.
well, make it hundreds of examples plus one. rather than give a lecture on
how to google and given that you refrained quite nicely from firing back
with 'fuck off', here's what i've been using for years. i'm sure your love
of spammers has fostered your understanding of my reluctance to further the
cause.
here are some supporting files (assumes php 5)...you'll need to clean up the
text-wrapping, and i typed the example at the bottom without testing...you
may get syntax errors from php if i forgot something.
==== cvs.class.php
<?
class csv
{
private $_records = array();
private function __clone(){}
function __construct($path, $delimiter = '", "', $lineTerminator = "\n",
$firstRowHeader = true)
{
$fileHandle = fopen($path, 'r');
$records = explode($lineTerminator, fread($fileHandle,
filesize($path)));
fclose($fileHandle);
$recordCount = count($records);
for ($i = 0; $i < $recordCount; $i++)
{
$record = substr($records[$i], 1, -1);
$records[$i] = explode($delimiter, $record);
}
$columns = array();
$columnCount = count($records[0]);
for ($i = 0; $i < $columnCount; $i++)
{
$columns[$i] = $firstRowHeader ? strtoupper($records[0][$i]) : $i;
}
for ($record = ($firstRowHeader ? 1 : 0); $record < $recordCount;
$record++)
{
for ($column = 0; $column < $columnCount; $column++)
{
$this->_records[$record][$columns[$column]] =
$records[$record][$column];
}
}
}
function records(){ return $this->_records; }
}
?>
====== email.class.php
<?
class email
{
static function send(
$to ,
$from ,
$cc = '' ,
$bcc = '' ,
$subject ,
$text = '' ,
$html = '' ,
$companyName = '' ,
$logo = null ,
$dropDirectory = '' ,
$exec = '' ,
$execOptions = ''
)
{
$messageHtml = $html;
$html = '
<html>
<style>
body
{
background-color : white;
color : black;
font-family : verdana, tahoma, arial, times new
roman, sans-serif;
font-size : 8pt;
margin : 0px;
text-align : left;
}
</style>
<body>
';
if (isset($logo))
{
$image = file_get_contents($logo);
$image = chunk_split(base64_encode($image));
$html .= '
<img alt="' . $companyName . '" border="0px"
src="cid:logo" style="float:right;">
<br>
<br>
<br>
<br clear="all">
';
}
if ($messageHtml == ''){ $messageHtml = '<html><body>' . $text; }
$html .= $messageHtml . '</body></html>';
if ($text == ''){ $text = $html; }
$boundry = '----=' . md5(uniqid(rand()));
$related = '----=' . md5(uniqid(rand()));
$mail = "MIME-Version: 1.0\r\n";
$mail .= "TO: " . $to . "\r\n";
$mail .= "FROM: " . $from . "\r\n";
$mail .= "CC: " . $cc . "\r\n";
$mail .= "BCC: " . $bcc . "\r\n";
$mail .= "Subject: " . $subject . "\r\n";
$mail .= "Content-Type: multipart/related;
boundary=\"$related\"\r\n\r\n\r\n";
$mail .= "--$related\r\n";
$mail .= "Content-Type: multipart/alternative;
boundary=\"$boundry\"\r\n\r\n\r\n";
$mail .= "--$boundry\r\n";
$mail .= "Content-Type: text/plain; charset=\"iso-8859-1\"\r\n";
$mail .= "Content-Transfer-Encoding: 8bit\r\n\r\n";
$mail .= $text . "\r\n\r\n";
$mail .= "--$boundry\r\n";
$mail .= "Content-Type: text/html; charset=\"iso-8859-1\"\r\n";
$mail .= "Content-Transfer-Encoding: 8bit\r\n\r\n";
$mail .= $html . "\r\n\r\n";
$mail .= "--$boundry--\r\n\r\n";
$mail .= "--$related\r\n";
$mail .= "Content-Type: image/jpeg\r\n";
$mail .= "Content-ID: logo\r\n";
$mail .= "Content-Disposition: attachment;
filename=\"logo.jpg\"\r\n";
$mail .= "Content-Transfer-Encoding: base64\r\n\r\n";
$mail .= $image . "\r\n\r\n";
$mail .= "--$related--\r\n\r\n";
$mail .= "-- End --\r\n";
$fileName = $dropDirectory . strtoupper(md5(uniqid(rand()))) . '.eml';
file_put_contents($fileName, $mail);
if (!$exec){ return $mail; }
exec($exec . $fileName . $execOptions);
@unlink($fileName);
return $mail;
}
}
?>
====== now to put it all together ...
====== assumes window env using iis smtp.
====== assumes 1st row has field names and that
====== one of them is named 'email'. otherwise
====== access the address based on it's ordinal
====== field position, i.e. $records[3];
<?
require_once 'csv.class.php;
require_once 'email.class.php';
$admin = 'some.one@example.com';
$company = 'some enterprise';
$dropDirectory = 'c:/inetpub/mailroot/pickup/'; // php needs write perm.
$exec = ''; // *nix (using sendmail) - '/usr/sbin/sendmail -ti < '
$fileDb = 'data/some.csv';
$logo = 'images/my.email.logo.jpg';
$message = 'hello world';
$options = ''; // *nix - any additional args for sendmail
$subject = 'test email';
$csv = new csv($fileDb);
foreach ($csv->records() as $record)
{
email::send(
$record['EMAIL'] ,
$admin ,
'' ,
'' ,
$subject ,
$message ,
'' ,
$company ,
$logo ,
$dropDirectory ,
$exec ,
$options
);
}
?>
[Back to original message]
|