我有一个页面,允许用户通过输入他们的电子邮件地址订阅我的邮件列表。在他们单击SUBMIT按钮后,电子邮件地址POST到txt文件,该文件每次有人订阅时自动填充。这个页面非常好。
我的问题是成功向该txt文件中的电子邮件地址列表发送电子邮件。我测试了代码但它仍然停留在“发送消息...”但没有任何事情发生。
我该如何解决这个问题?
<?
error_reporting(1);
//#############################################################
//################# CONFIGURATION ##########################
//#############################################################
// choose a password
$my_password="1234";
// the email from which emails are sent
$from_email="Name <name@gmail.com>";
// Your replay to email (whatever you want).
$replyto="name@gmail.com";
// A message to be attached to the bottom of the message
// We recommend to add a link to subscription page
$message_at_bottom="
------------------------------------------------------------
P.D.: To remove from this list go to...
http://www.domain.com/Dating/dwh-emaillist.php/
";
$emails_file="emaillist-XXXXXXXXX.txt";
//#############################################################
//############### END CONFIGURATION ########################
//#############################################################
// IF INFO IS NOT POSTED, PRINT THE FORM AND DIE
if (!$_POST["message"]){
print_form();
die();
}
// IF INFO IS POSTED YOU WILL BE HERE
// Check whether the password is correct
// (only webmaster is supposed to know the password, which has been specified above)
if ($_POST["p"]!=$my_password){die("Incorrect password");}
// Get the subject of message
$subject =$_POST["subject"];
// Get the body of message
$message=$_POST["message"];
// Add to body of message the bottom
$message.=$message_at_bottom;
// Read the file with emails to variable $emails_file
$emails_file=file_get_contents($emails_file);
// Extract list of emails to array $emails_array
preg_match_all("/<.{0,100}?>/", $emails_file, $emails_array);
// Start output
print "<b>Sending messages...</b>";
// Send email to each email
foreach ($emails_array[0] as $email){
// remove "<" and ">" from each email
$email=substr($email,1,strlen($email)-2);
// Next line is the one sending the email: the key command of this script
mail ($email, $subject, $message,"From: $from_email\nReply-To: $replyto\nContent- Type: text/plain");
// Each time an email is send, output it
print "<br>$email\n";
// After sending each email, send previous line (the email) to the browser
flush();
}
?>
<?php
// THIS FUNCTION WILL SHOW THE FORM
// MODIFY IT AS REQUIRED
function print_form(){
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta content="text/html; charset=ISO-8859-1" http-equiv="content-type">
<title>My email list</title>
</head>
<body style="background-color: rgb(255, 255, 255);">
<center>
<h2>Form to send email to the mailing list</h2>
<table style="font-family: times new roman;" border="0" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td style="vertical-align: top;">
<form method=POST action="dwh-emaillist-sendmessage.php">
Subject
<br><input type=text name=subject size=40>
<br>Message
<br><textarea name=message cols=50 rows=8></textarea>
<br>Password <input type=password name=p size=10>
<br><input type=submit value=Send>
</form>
</td>
</tr>
</tbody>
</table>
</center>
</body>
</html>
<? } ?>
答案 0 :(得分:0)
foreach循环需要以下形式:
foreach ($array as $value) { ... }
因此,你不应该在$emails_array
中提供一个密钥,而是整个数组
这意味着什么
foreach ($emails_array[0] as $email){ ... }
应该成为
foreach ($emails_array as $email){ ... }
答案 1 :(得分:-1)
不确定您是否正确阅读文件 - 我从未见过这样做过。
这种方式应该有效:
$i=1;
$file = fopen($emails_file, "r") or exit("Unable to open file!");
while(!feof($file)) {
$email=fgets($file);
$email=trim($email);
// remove "<" and ">" from each email
$email=substr($email,1,strlen($email)-2);
// Next line is the one sending the email: the key command of this script
mail ($email, $subject, $message,"From: $from_email\nReply-To: $replyto\nContent- Type: text/plain");
// Each time an email is send, output it
print $i . ") sending message to: " . $email . "\n";
if( ($i % 10)==0 ) { sleep(1); }
$i++;
}
fclose($file);