contenido/classes/class.newsletter.php
Code: Alles auswählen
$headers = 'From: ' . $from . "\n";
Code: Alles auswählen
$headers = 'From: '.$realname.' <' . $from . ">\n";
Code: Alles auswählen
$headers = 'From: ' . $from . "\n";
Code: Alles auswählen
$headers = 'From: '.$realname.' <' . $from . ">\n";
- am fehlenden Feld für den Namen. Das könntest Du natürlich nachbauen: DB-Tabelle erweitern und die o.ä. Dateien ändern.da pro Newsletter nur der Absender (i.A. als E-Mail) gespeichert wird
Code: Alles auswählen
$messageHTML2 = str_replace("MAIL_NAME", "$name", $messageHTML);
$messageHTML2 = str_replace("MAIL_UNSUBSCRIBE", "<a href=\"".$path."unsubscribe=".$key."\">".$path."unsubscribe=".$key."</a>", $messageHTML2);
$messageHTML2 = str_replace("MAIL_CHANGE", "<a href=\"".$path."change=".$key."\">".$path."change=".$key."</a>", $messageHTML2);
$messageHTML2 = str_replace("MAIL_STOP", "<a href=\"".$path."stop=".$key."\">".$path."stop=".$key."</a>", $messageHTML2);
$messageHTML2 = str_replace("MAIL_GOON", "<a href=\"".$path."goon=".$key."\">".$path."goon=".$key."</a>", $messageHTML2);
$boundary = md5(uniqid(time()));
$headers = 'From: ' . $from . "\n";
$headers .= 'To: ' . $to . "\n";
$headers .= 'Return-Path: ' . $from . "\n";
$headers .= 'MIME-Version: 1.0' ."\n";
$headers .= 'Content-Type: multipart/alternative; boundary="' . $boundary . '"' . "\n\n";
$headers .= $message2."\n\n".$foot . "\n";
$headers .= '--' . $boundary . "\n";
$headers .= 'Content-Type: text/plain; charset=ISO-8859-1' ."\n";
$headers .= 'Content-Transfer-Encoding: 8bit'. "\n\n";
$headers .= $message2."\n\n".$foot . "\n";
$headers .= '--' . $boundary . "\n";
$headers .= 'Content-Type: text/HTML; charset=ISO-8859-1' ."\n";
$headers .= 'Content-Transfer-Encoding: 8bit'. "\n\n";
$headers .= $messageHTML2."<p>".$foot."</p></body></html>\n";
$headers .= '--' . $boundary . "--\n";
$mailOk=mail('', $subject,'', $headers);
if ($mailOk) {
$result[] = $name . " (" . $to . "): " . i18n("Sent successfully");
} else {
$result[] = $name . " (" . $to . "): " . sprintf(i18n("Newsletter to %s could not be sent"), $to);
}
Code: Alles auswählen
<?php
/*****************************************
* File : $RCSfile: class.newsletter.php,v $
* Project : Contenido
* Descr : Newsletter recipient class
* Modified : $Date: 2005/12/04 14:25:47 $
*
* © four for business AG, www.4fb.de, generated by HerrB (01.08.2004)
*
* $Id: class.newsletter.php,v 1.7 2005/12/04 14:25:47 timo.hummel Exp $
******************************************/
cInclude("classes", "class.properties.php");
cInclude("classes", "class.newsletter.recipients.php");
cInclude("classes", "class.newsletter.groups.php");
cInclude("classes", "class.phpmailer.php");
/**
* Newsletter management class
*/
class NewsletterCollection extends ItemCollection
{
/**
* Constructor Function
* @param none
*/
function NewsletterCollection()
{
global $cfg;
parent :: ItemCollection($cfg["tab"]["news"], "idnews");
$this->_setItemClass("Newsletter");
}
/**
* Loads an item by its ID (primary key)
* @param $itemID integer Specifies the item ID to load
*/
function loadItem($itemID)
{
$item = new Newsletter();
$item->loadByPrimaryKey($itemID);
return ($item);
}
/**
* Creates a new newsletter
* @param $name string specifies the newsletter name
*/
function create($name)
{
global $client, $lang, $auth;
$item = parent :: create();
/* Check if the newsletter name already exists */
$this->select("idclient='$client' AND idlang='$lang' AND name='".urlencode($name)."'");
if ($this->next())
{
return $this->create($name."_".substr(md5(rand()), 0, 10));
}
$item->set("idart", 0);
$item->set("idclient", $client);
$item->set("idlang", $lang);
$item->set("name", $name);
$item->set("created", date("Y-m-d H:i:s"), false);
$item->set("author", $auth->auth["uid"]);
/* subject, message, newsfrom, newsdate, lastmodified not set*/
$item->store();
return $item;
}
/**
* Duplicates the newsletter specified by $itemID
* @param $itemID integer specifies the newsletter id
*/
function duplicate($itemID)
{
global $client, $lang, $auth;
$base = new Newsletter();
$base->loadByPrimaryKey($itemID);
$item = parent :: create();
$item->set("idart", 0);
$item->set("idclient", $client);
$item->set("idlang", $lang);
$item->set("welcome", 0);
$item->set("name", $base->get("name")."_".substr(md5(rand()), 0, 10));
$item->set("subject", $base->get("subject"));
$item->set("message", $base->get("message"));
$item->set("newsfrom", $base->get("newsfrom"));
$item->set("newsdate", date("Y-m-d H:i:s"), false);
$item->set("author", $auth->auth["uid"]);
$item->set("created", date("Y-m-d H:i:s"), false);
$item->store();
return $item;
}
}
/**
* Single Newsletter Item
*/
class Newsletter extends Item
{
/**
* Constructor Function
* @param string $table The table to use as information source
*/
function Newsletter()
{
global $cfg;
parent :: Item($cfg["tab"]["news"], "idnews");
}
function store()
{
global $auth;
$this->set("modified", date("Y-m-d H:i:s"), false);
$this->set("modifiedby", $auth->auth["uid"]);
parent :: store();
}
/**
* Sends a newsletter
* @param $idcatart integer specifies id of the 'BlackBox'-acrticle containing the 'BlackBox'-module for management
* @param $destination string specifies, who will receive the newsletter ("all", "default" = defaultgroup,
* "selection" = selected groups, "single" = one recepient [e.g. Welcome-Newsletter])
* @param $to array specifies, which group of recipients shall receive the
* newsletter ("all", "default" = defaultgroup, "4,5,6" = group IDs)
* @param $chunksize integer specifies size of chunks when sending in chunks, 0 = don't send in chunks
* @param $chunk integer specifies current chunk number when sending in chunks
* result array array of recipient names/e-mails
*/
function send($idcatart, $destination = "other", $to = "", $chunksize = 0, $chunk = 0)
{
global $cfg, $cfgClient, $client, $lang, $auth;
// Not used: $recipients = new RecipientCollection;
switch ($destination)
{
case "all" :
$recipients = new RecipientCollection;
$recipients->select("deactivated='0' AND confirmed='1' AND idclient='$client' AND idlang='$lang'");
break;
case "default" :
/* Not used: The following query would work, but on the wrong object (RecipientGroupMemberCollection, not RecipientCollection).
* It would be possible to get the needed object using fetchObject, but only as single items, not as
* RecipientCollection-object-list - If I have understood anything correctly... HerrB */
/* $recipients = new RecipientGroupMemberCollection;
$recipients->link('RecipientCollection');
$recipients->link('RecipientGroupCollection');
$recipients->setWhere('RecipientCollection.idclient',$client);
$recipients->setWhere('RecipientCollection.idlang',$lang);
$recipients->setWhere('RecipientCollection.deactivated','0');
$recipients->setWhere('RecipientCollection.confirmed','1');
$recipients->setWhere('RecipientGroupCollection.defaultgroup','1');
$recipients->setWhere('RecipientGroupCollection.idclient',$client);
$recipients->setWhere('RecipientGroupCollection.idlang',$lang);
$recipients->query(); */
// The following needs a hack in genericdb (flexSelect)
$recipients = new RecipientCollection;
$recipients->flexSelect("distinct", $cfg["tab"]["news_groups"]." AS groups, ".$cfg["tab"]["news_groupmembers"]." AS groupmembers ", "recipientcollection.idclient = '".$client."' AND "."recipientcollection.idlang = '".$lang."' AND "."recipientcollection.deactivated = '0' AND "."recipientcollection.confirmed = '1' AND "."recipientcollection.idnewsrcp = groupmembers.idnewsrcp AND "."groupmembers.idnewsgroup = groups.idnewsgroup AND "."groups.defaultgroup = '1' AND groups.idclient = '".$client."' AND "."groups.idlang = '".$lang."'");
break;
case "selection" :
$recipients = new RecipientCollection;
if (is_array($to) && count($to) > 0)
{
$groups = "'";
foreach ($to as $group)
{
if ($groups != "'")
{
$groups .= "','";
}
/* SQL-Injection - not used
$group = str_replace (";","",$group);
$group = str_replace ("--","",$group);
$group = str_replace ("'","",$group);
$group = htmlentities($group); */
$groups .= urlencode($group);
}
$groups .= "'";
// The following needs a hack in genericdb (flexSelect)
$recipients->flexSelect("distinct", $cfg["tab"]["news_groupmembers"]." AS groupmembers ", "recipientcollection.idclient = '".$client."' AND "."recipientcollection.idlang = '".$lang."' AND "."recipientcollection.deactivated = '0' AND "."recipientcollection.confirmed = '1' AND "."recipientcollection.idnewsrcp = groupmembers.idnewsrcp AND "."groupmembers.idnewsgroup IN (".$groups.")");
} else
{
$destination = "other";
}
break;
case "single" :
$recipients = new RecipientCollection;
if (is_numeric($to))
{
$recipients->select("idnewsrcp = '".$to."'");
} else
{
$destination = "other";
}
break;
default :
$destination = "other";
}
unset ($result);
$result = array ();
if ($destination == "other")
{
$result[] = 0;
$result[] = i18n("No recipients found");
} else
{
$recipientcount = $recipients->count();
if ($recipientcount == 0)
{
$result[] = 0;
$result[] = i18n("No recipients found");
} else
{
$from = $this->get("newsfrom");
$subject = $this->get("subject");
$message = $this->get("message");
$messageHTML = $this->get("messageHTML");
/* Not used, old functionality
$date = $this->get("newsdate");
$dateday = strftime("%d.%m.%Y", strtotime($date));
$time = strftime("%H:%M", strtotime($date)); */
$dateday = strftime("%d.%m.%Y"); // Format should be replaced by a user variable...
$time = strftime("%H:%M"); // Format should be replaced by a user variable...
$message = str_replace("MAIL_NUMBER", "$recipientcount", $message);
$message = str_replace("MAIL_DATE", "$dateday", $message);
$message = str_replace("MAIL_TIME", "$time", $message);
$messageHTML = str_replace("MAIL_NUMBER", "$recipientcount", $messageHTML);
$messageHTML = str_replace("MAIL_DATE", "$dateday", $messageHTML);
$messageHTML = str_replace("MAIL_TIME", "$time", $messageHTML);
$messageHTML = str_replace("\"upload", "\"".$cfgClient[$client]["htmlpath"]["frontend"]."/upload", $messageHTML);
$messageHTML = "<html><head><link rel=\"stylesheet\" type=\"text/css\" href=\"".$cfgClient[$client]["htmlpath"]["frontend"]."/css/newsletter.css\" /></head><body>".$messageHTML;
// Preventing double lines in mail, you may wish to disable this function on windows servers
if (!getSystemProperty("newsletter", "disablernreplacement"))
{
$message = str_replace("\r\n", "\n", $message);
}
$path = $cfgClient[$client]["path"]["htmlpath"]."front_content.php?changelang=".$lang."&idcatart=".$idcatart."&";
$counter = 0;
if ($chunksize == 0)
{
$lowborder = 0;
$highborder = $recipientcount +1;
} else
{
$lowborder = $chunksize * $chunk;
$highborder = $lowborder + $chunksize;
}
if ($lowborder >= $recipientcount)
{
$result[] = 0;
$result[] = i18n("No (more) recipients found");
} else
{
$result[] = $recipientcount;
while (($recipient = $recipients->next()) && $counter < $highborder)
{
if ($chunksize == 0 || $counter >= $lowborder)
{
$to = $recipient->get("email");
$name = $recipient->get("name");
if (empty ($name))
{
$name = $to;
}
$key = $recipient->get("hash");
if (strlen($key) == 30)
{ // Prevents sending without having a key
$message2 = str_replace("MAIL_NAME", "$name", $message);
$message2 = str_replace("MAIL_UNSUBSCRIBE", $path."unsubscribe=".$key, $message2);
$message2 = str_replace("MAIL_CHANGE", $path."change=".$key, $message2);
$message2 = str_replace("MAIL_STOP", $path."stop=".$key, $message2);
$message2 = str_replace("MAIL_GOON", $path."goon=".$key, $message2);
$messageHTML2 = str_replace("MAIL_NAME", "$name", $messageHTML);
$messageHTML2 = str_replace("MAIL_UNSUBSCRIBE", "<a href=\"".$path."unsubscribe=".$key."\">".$path."unsubscribe=".$key."</a>", $messageHTML2);
$messageHTML2 = str_replace("MAIL_CHANGE", "<a href=\"".$path."change=".$key."\">".$path."change=".$key."</a>", $messageHTML2);
$messageHTML2 = str_replace("MAIL_STOP", "<a href=\"".$path."stop=".$key."\">".$path."stop=".$key."</a>", $messageHTML2);
$messageHTML2 = str_replace("MAIL_GOON", "<a href=\"".$path."goon=".$key."\">".$path."goon=".$key."</a>", $messageHTML2);
$boundary = md5(uniqid(time()));
$headers = 'From: ' . $from . "\n";
$headers .= 'To: ' . $to . "\n";
$headers .= 'Return-Path: ' . $from . "\n";
$headers .= 'MIME-Version: 1.0' ."\n";
$headers .= 'Content-Type: multipart/alternative; boundary="' . $boundary . '"' . "\n\n";
$headers .= $message2."\n\n".$foot . "\n";
$headers .= '--' . $boundary . "\n";
$headers .= 'Content-Type: text/plain; charset=ISO-8859-1' ."\n";
$headers .= 'Content-Transfer-Encoding: 8bit'. "\n\n";
$headers .= $message2."\n\n".$foot . "\n";
$headers .= '--' . $boundary . "\n";
$headers .= 'Content-Type: text/HTML; charset=ISO-8859-1' ."\n";
$headers .= 'Content-Transfer-Encoding: 8bit'. "\n\n";
$headers .= $messageHTML2."<p>".$foot."</p></body></html>\n";
$headers .= '--' . $boundary . "--\n";
$mailOk=mail('', $subject,'', $headers);
if ($mailOk) {
$result[] = $name . " (" . $to . "): " . i18n("Sent successfully");
} else {
$result[] = $name . " (" . $to . "): " . sprintf(i18n("Newsletter to %s could not be sent"), $to);
}
} else
{
$result[] = $name." (".$to."): ".sprintf(i18n("Newsletter to %s could not be sent (recipient has an incompatible or empty key)."), $to);
}
}
$counter ++;
}
}
}
}
return $result;
}
}
?>