2013-07-12 2 views
0

У меня есть страница, которая позволяет пользователям подписаться на мой список рассылки, введя их адрес электронной почты. После того, как они нажимают кнопку SUBMIT, POST-адреса электронной почты отправляются в txt-файл, который автоматически заполняется каждый раз, когда кто-то подписывается. Эта страница работает отлично.Отправка нескольких электронных писем из файла с использованием формы PHP

Моя проблема заключается в отправке сообщения электронной почты в список адресов электронной почты в этом файле txt. Я проверил код, но он застрял в «Отправка сообщений ...», но ничего не происходит.

Как исправить это?

<? 
error_reporting(1); 
//############################################################# 
//################# CONFIGURATION ########################## 
//############################################################# 

// choose a password 
$my_password="1234"; 
// the email from which emails are sent 

$from_email="Name <[email protected]>"; 
// Your replay to email (whatever you want). 
$replyto="[email protected]"; 
// 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

Почему вы закрываете '' и _then_, отображая форму? –

+0

'foreach ($ emails_array [0] как $ email)' и почему вы используете '$ emails_array [0]'? Наверняка это должно быть '$ emails_array'? –

+0

теги тела и html - это только опечатки. [0] для $ emails_array - это то, что он считывает все электронные письма в файле. –

ответ

-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); 
+0

Это не работает. Он гласит: «невозможно открыть файл!» –

+0

@JosanIracheta Вероятно, потому, что он использует '$ emails_file' в качестве строки для расположения файла. В вашем коде вы используете его как содержимое самого файла. –

+0

Правильно. Если $ emails_file содержит полный путь к файлу, который содержит список адресов электронной почты, тогда это должно работать (при отсутствии ограничений на доступ). – mti2935

0

в цикле, цикл требует эту форму:

foreach ($array as $value) { ... } 

Поэтому вы не должны быть поставляя один ключ в $emails_array, но и весь массив.
Значение этого

foreach ($emails_array[0] as $email){ ... } 

должен стать

foreach ($emails_array as $email){ ... } 

Читайте на PHP's foreach loop.

Смежные вопросы