我需要找到一种方法从群发邮件php脚本中删除订阅者 这是脚本:
<?php
$thisfile=basename(__FILE__, ".php");
$path = GSPLUGINPATH.'gs_massmail/lang/';
$filenames = getFiles($path);
foreach ($filenames as $file) {
if($file == $LANG.'.php')
$language_file = $file;
}
if($language_file == FALSE)
$language_file = 'en_US.php';
require_once $path.$language_file;
add_action('plugins-sidebar','createSideMenu',array($thisfile, 'Mass Mail'));
function get_mass_mail_form(){
global $i18n;
?>
<form action="<?php get_page_url(); ?>" method="post" class="contactform" >
<?php set_mass_mail_page(); ?>
<p>
<input type="text" class="text" name="massmail[email]" value="e-mail" onFocus="doClear(this)" onBlur="doDefault(this)" />
</p>
<p><input type="submit" class="submit" value="<?php echo $i18n['MM_SUBSCRIBE']?>" id="add-receiver" name="add-receiver" /></p>
</form>
<?php
}
function show_editor(){
global $i18n, $HTMLEDITOR;
?>
<h3><?php echo $i18n['MM_SENDMAIL']?></h3>
<form method="post" class="sendmassmail">
<p>
<b><?php echo $i18n['MM_SUBJECT']?></b>
<br />
<input type="text" id="subject" name="subject" size="70"/>
</p>
<p>
<textarea id="post-content" rel="<?php echo $i18n['LABEL_PAGEBODY']; ?>" name="post-content"></textarea>
</p>
<p><input class="submit" type="submit" name="submitted" value="<?php echo $i18n['MM_SENDMAILTOALL']?>" /> <?php echo $i18n['OR']; ?> <a class="cancel" href="pages.php?cancel"><?php echo $i18n['CANCEL']; ?></a></p>
</form>
<?php
if (defined('GSEDITORHEIGHT')) { $EDHEIGHT = GSEDITORHEIGHT .'px'; } else { $EDHEIGHT = '500px'; }
if (defined('GSEDITORLANG')) { $EDLANG = GSEDITORLANG; } else { $EDLANG = 'en'; }
if (defined('GSEDITORTOOL')) { $EDTOOL = GSEDITORTOOL; } else { $EDTOOL = 'basic'; }
if ($EDTOOL == 'advanced') {
$toolbar = "
['Bold', 'Italic', 'Underline', 'NumberedList', 'BulletedList', 'JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock', 'Table', 'TextColor', 'BGColor', 'Link', 'Unlink', 'Image', 'RemoveFormat', 'Source'],
'/',
['Styles','Format','Font','FontSize']
";
} else {
$toolbar = "['Bold', 'Italic', 'Underline', 'NumberedList', 'BulletedList', 'JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock', 'Link', 'Unlink', 'Image', 'RemoveFormat', 'Source']";
}
?>
<?php if ($HTMLEDITOR != '') { ?>
<script type="text/javascript" src="template/js/ckeditor/ckeditor.js"></script>
<script type="text/javascript">
var editor = CKEDITOR.replace('post-content', {
skin : 'getsimple',
forcePasteAsPlainText : true,
language : '<?php echo $EDLANG; ?>',
defaultLanguage : '<?php echo $EDLANG; ?>',
entities : true,
uiColor : '#FFFFFF',
height: '<?php echo $EDHEIGHT; ?>',
toolbar :
[
<?php echo $toolbar; ?>
]
//filebrowserBrowseUrl : '/browser/browse.php',
//filebrowserImageBrowseUrl : '/browser/browse.php?type=Images',
//filebrowserWindowWidth : '640',
//filebrowserWindowHeight : '480'
});
</script>
<?php
}
}
function setup_mass_mail(){
global $emailadresses;
global $_POST, $i, $b, $i18n;
$xmlfile = GSDATAPATH."other/massmail.xml";
set_mass_mail_css();
$v = getXML($xmlfile);
if(isset($_POST['submitted'])){
if(strlen($_POST['subject']) == 0 || strlen($_POST['post-content']) == 0)
$err[] = $i18n['MM_SUBJECTANDMESSAGE'];
if(count($err) == 0){
echo "<h3>".$i18n['MM_EMAILSTATUS']."</h3>";
$server_name = getenv ("SERVER_NAME"); // Server Name
$request_uri = getenv ("REQUEST_URI"); // Requested URI
$from = 'noreply@'.substr($server_name, 4, strlen($server_name));
if(isset($_POST['subject']))
$subject = $_POST['subject']; //htmlentities($_POST['subject'], ENT_QUOTES, 'UTF-8');
else
$subject = $i18n['MM_NEWSLETTERFROM'].$server_name;
$headers = "From: ".$from."\r\n";
$headers .= "Return-Path: ".$from."\r\n";
$headers .= "Content-type: text/html\r\n";
if(get_magic_quotes_gpc())
$body = stripslashes($_POST['post-content']); //htmlentities($_POST['post-content'], ENT_QUOTES, 'UTF-8');
else
$body = $_POST['post-content'];
foreach ($v as $row => $value) {
if(mail($value->email,$subject,$body,$headers))
$i++;
else
$b++;
}
echo '<p class="ok">'.$i18n['MM_MAILWASSENTTO'].' ('.$i.' '.$i18n['MM_OF'].' '.($b+$i).')<p>';
} else {
echo '<p class="error">'.implode(".<br />", $err).'</p>';
}
}
echo "<h3>".$i18n['MM_SUBSCRIBERS']."</h3>";
if(file_exists($xmlfile) ) {
echo '<table cellspacing="0" cellpadding="0">
<tr>
<td>
'.$i18n['MM_DATE'].'
</td>
<td>
'.$i18n['MM_EMAIL'].'
</td>
</tr>
';
foreach ($v as $row => $value) {
$emailadresses .= $value->email.';';
echo '<tr>';
echo '<td>'.date('Y-m-d', (int)$value->date).'</td>';
echo '<td>'.$value->email.'</td>';
echo '</tr>';
}
echo '</table>';
echo '<p><b>'.$i18n['MM_COMMASEPARATED'].':</b> <br />'.$emailadresses;
show_editor();
} else {
echo $i18n['MM_NOREGSUBSCRIBERS'];
}
}
function set_mass_mail_css(){
echo '
<!-- CSS for Mass Mail plugin -->
<style type="text/css">
p.ok {
color: #3dc32b;
}
p.error {
color: #FF0000;
}
</style>';
}
function set_mass_mail_page(){
global $email;
global $i18n;
if (isset($_POST['add-receiver'])) {
set_mass_mail_css();
$xmlfile = GSDATAPATH."other/massmail.xml";
$email = $_POST['massmail']['email'];
$err = array();
if(!check_email_address($_POST['massmail']['email'])){
$err[] = $i18n['MM_EMAILWRONGFORMAT'];
} else {
if(file_exists($xmlfile) ) {
$v = getXML($xmlfile);
foreach ($v as $row) {
if($row->email == $_POST['massmail']['email']){
$err[] = $i18n['MM_EMAILALLREADYREG'];
break;
}
}
}
}
if(count($err) == 0){
if (!file_exists($xmlfile) ) {
$xml = @new SimpleXMLExtended('<?xml version="1.0" encoding="UTF-8"?><item></item>');
} else {
$xmldata = file_get_contents($xmlfile);
$xml = new SimpleXMLExtended($xmldata);
}
$thislog = $xml->addChild('entry');
$thislog->addChild('date', time());
$thislog->addChild('email', $email);
$xml->asXML($xmlfile);
echo '<p class="ok">'.$i18n['MM_YOUARENOWSUBSCRIBER'].'</p>';
} else {
echo '<p class="error">'.implode(".<br />", $err).'</p>';
}
}
}
?>
感谢
答案 0 :(得分:0)
圣洁的莫莉。
您应该能够通过记事本或任何其他文本编辑器编辑其创建的其他/ massmail.xml文件。
如果您希望以编程方式编辑它(不是真正的单词),我相信您可以使用SimpleXMLExtended类遍历每个XML节点(如代码所示)。如果可能,您应该考虑逐节点读取它,这样整个文件就不会加载到内存中。
作为旁注:我强烈建议不要使用XML来存储邮件列表。如果您使用MySQL(或SQLite,如果您坚持将其存储在文件中)等数据库,则管理起来会更容易,更有效。