我正在处理一个群发邮件脚本,该脚本会向特定数据库中的每个电子邮件ID发送一封电子邮件。 但是有一些问题。
就像我有以下数据库:
id email link
1 a@bc.com bc.com
2 b@cd.com cd.com
并假设邮件内容为:'测试此脚本'
脚本完美地向a@bc.com发送电子邮件,但第二次发送电子邮件,即发送到b@cd.com,内容加倍。
我的意思是第二个收件人会收到这样的电子邮件:
测试此脚本
测试此脚本
第三个收件人收到一封内容重复三次的电子邮件,第四个收件人收到四次,依此类推。
该脚本从数据库中的电子邮件字段中获取电子邮件地址,并向其发送电子邮件。
我的代码:
<?
include "header.php";
include "config2.php";
$subject="Massmail";
$headers .= "Content-type:text/html;charset=iso-8859-1" . "\r\n";
mysql_connect($server, $db_user, $db_pass)
or die ("Database CONNECT Error");
$resultquery = mysql_db_query($database, "select * from $table");
while ($query = mysql_fetch_array($resultquery))
{
$mailto=$query[$table_email];
$domain=$query[$table_link];
$domain2 = str_replace(array('http://','HTTP://','Http://'), '',$domain);
$handle = fopen("http://$domain2","r") or die("Unable to open link ( $domain ). <a href='javascript:history.go(-1);'>Go back</a> and please try again ");
$contents = '';
while (!feof($handle)) {
$contents .= fread($handle, 8192);
$contents = str_replace('window.location = "/abc.html"','window.location = ""',$contents);
$contents = mb_convert_encoding($contents, "HTML-ENTITIES", "auto");
}
$i = md5(uniqid(rand(), true)) . '.' . html;
$fh = fopen("/home/host/public_html/content/$i", "w");
fwrite($fh, $contents);
fclose($fh);
$filename = '/files/$i';
$message1 .= "Testing Mail Script Version 2";
mail($mailto, $subject, $message1, $headers, "-f" . 'noreply@domain.com');
echo 'Mail sent to '.$mailto.'<br>';
sleep($seconds);
}
include "footer.php";
?>
我试图回复必须发送的邮件,我明白了:
To: a@bc.com
Subject: Massmail
Message:
Testing mail script
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
to: b@cd.com
Subject: Massmail
Message:
Testing mail scriptTesting mail script
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
非常感谢您的帮助。提前致谢
答案 0 :(得分:0)
同意。听起来你的循环功能不正常?如果您无法发布完整代码,请尝试为我们发布抽象来诊断您的问题。
如果你不能,我会根据你拥有的电子邮件地址来调查循环,而不是一些任意的计数器。这可能会帮助你。
答案 1 :(得分:0)
假设这是你的桌子。使用id,电子邮件,链接,消息结构为:
id email message
1 a@test.com hello, how are you doing..
2 b@test.com hey, dude this is me..
3 c@test.com we are sending you this...
现在,我们假设您有100
条记录。我要做的是(假设$result
是一个mysql数组,返回mysql
ex SELECT * FROM mail...
的所有结果)
我会尝试:
for($i=0; $i <= count($result); $i++){
$send = mail($result['to'], $result['subject'],
$result['message'], $result['headers']);
if(!$send){
echo 'e-mail, sending has stopped';
break;
}
else{
echo 'all e-mails are sent successfully'; }
}
答案 2 :(得分:0)
在代码行中:$ message1。=“测试邮件脚本版本2”;句点是连接的,因此每次循环时,都会再次复制该消息。
答案 3 :(得分:0)
没关系,我修好了。 @Pirion的帖子帮助了我。我改变了
$message1 .= "Testing Mail Script Version 2";
到
$message = "Testing Mail Script Version 2";
一切都很完美。非常感谢你帮助我。