Email Newsttlers

teroristd

Registered
Здравейте, как мога да създам подобно нещо. Общо взето това което ми трябва е да изкарва всички имейл адреси от базата и да може да се изпрати едно съобщение до всички едновременно в хтмл формат. Също ако може да препоръчате някой безплатен хтмл редактор, с който да се пишат съобщенията. Мерси.
 
Код:
<?php
header("Content-Type: text/html; charset=UTF-8");
include("config.php"); //Конфигурационният файл

$content = ""; //Това ще е съдържанието на новината, която искаш да изпратиш :) 
$subject = "Заглавие на съобщението \r\n"; //Според това как ще изпращаш емайлите по такъв начин ще си нагласиш коя новина да ти изпраща и какво да е заглавието й...
$message = "
	<html>
	<body>
		$content
	</body>
	</html>
	";

$headers =	"From: your@email.dom" . "\r\n" . //Тук може да оправиш само your@email.dom другото не е за препоръчване да го пипаш ако не знаеш какво правиш :) 
            "Content-Type: text/html;charset=UTF-8\r\n".
            "Content-Transfer-Encoding: 8bit\r\n" .
			"MIME-Version: 1.0\r\n";

$query = "SELECT * FROM `emails`"; //Заявката, с която ще изкарваш емайлите
$result = mysql_query($query) OR die(mysql_error());

while ($row = mysql_fetch_array($result)) { //С цикъла изпращаш новината на всички емайли, които имаш в полето emails

$to = "{$row['email']} \r\n"; //До кой емайл ще изпращаш новината
$mail = mail($to, $subject, $message, $headers); //Функцията mail с която изпращаш емайла :) 
}
?>

Мисля, че ще ти свърши работа :)
 
Мерси много t0m3kk имаш точката :) ама ще ти я дам по-късно че може да изникнат някои въпроси.
 
може да питаш по всяко едно време, ако мога ще помогна :) най-добре на ЛС, защото по форума не гледам много, много :)
 
Не отдавна писах нещо подобно за себе си :) Ето ти го направо скрипта, който използвам аз.

Код:
<?php
ob_start();
set_time_limit(0);

/*
 * @@Author: DarkKiss <darkkiss [at] dreaming-bg [dot] com>
 * This script offers no support.
 */

class massMail
{
        // =========================================
        // Метода, по който ще извличаме e-mail адресите.
        // =========================================
        // 1 => От текстов файл.
        // 2 => От MySQL.
        // =========================================
        private $source = 2;
        
        private $sourceFile = 'emails.txt'; // Файла, от който ще черим информацията. Задължителен е само ако $source = 1.
        
        // =========================================
        // Настройки за достъп до MySQL.
        // =========================================
        // Задължителни са само ако $source = 2.
        // =========================================
        private
                $mysql_server = '127.0.0.1', // Сървъра, на който се намира MySQL сървъра ни.
                $mysql_username = 'root', // Потребителското име, което ще използваме за MySQL.
                $mysql_password = NULL, // Паролата. която ще използваме за MySQL.
                $mysql_database = 'test', // Името на база данните.
                $mysql_table = 'forum_members', // Името на таблицата.
                $mysql_field = 'email'; // Името на полето, където се съдържат e-mail адресите.
        
        // Създаваме масив съдържащ E-Mail адресите, които не искаме да получават съобщения.
        // Можете да допълвате списъка, като използвате посочените e-mail адреси за образец.
        private $skip = array
        (
                'nospam@yourdomain.com'
        );
        
        private
                $sleepMail = 1, // Какъв ще е интервала между отделните съобщения (в секунди)? Ще го използваме, за да избегнем претоварване на сървъра.
                $sleepCycle = 10, // Какъв ще е интервала между отделните цикли (в секунди)? Ще го използваме, за да избегнем претоварване на сървъра.
                $mailPerCycle = 20; // Колко съобщения искаме да се изпращат в един цикъл?
        
        private
                $mailSubject = 'Mass Email', // Темата на съобщението, което ще получават потребителите.
                $mailSender = 'do-not-reply@yourwebsite.com'; // От кой e-mail адрес ще бъде изпратено съобщението?
        
    // =========================================
    // КРАЙ НА КОНФИГУРАЦИЯТА
    // =========================================
    // Препоръчвам да не се редактира нищо по-долу, освен ако не знаете точно какво правите ;-)
    // =========================================
        
        private $emails = array(), $message;
        
        private function sleepBuffer($secs) 
        { 
                        echo str_repeat('.', 4096); 
                        echo '<br />';
                        ob_flush(); 
                        flush(); 
                        sleep($secs); 
        }
        
        public function __construct($message)
        {
                $this -> message = $message;
                switch($this -> source)
                {
                        case 1;
                                if(empty($this -> sourceFile))
                                {
                                        echo 'Моля задайте параметър за \$sourceFile.';
                                        exit;
                                }
                                
                                if(!file_exists($this -> sourceFile))
                                {
                                        printf('Не мога да открия файл <strong>%s</strong>.', $this -> sourceFile);
                                        exit;
                                }
                                
                                if(!is_readable($this -> sourceFile))
                                {
                                        printf('Нямам достатъчно права, за да прочета файл <strong>%s</strong>', $this -> sourceFile);
                                        exit;
                                }
                                
                                $this -> readFileContent();
                                break;
                        
                        case 2;
                                if(empty($this -> mysql_server) || empty($this -> mysql_username) || empty($this -> mysql_password) || empty($this -> mysql_database) || empty($this -> mysql_table) || empty($this -> mysql_field))
                                {
                                        echo 'Едно или повече задължителни полета за връзката с MySQL сървъра не са попълнени.';
                                        exit;
                                }
                                
                                $connect = mysql_connect($this -> mysql_server, $this -> mysql_username, $this -> mysql_password) or die (mysql_error());
                                $query = sprintf('SELECT DISTINCT %s FROM `%s`.`%s`', $this -> mysql_field, $this -> mysql_database, $this -> mysql_table);
                                $exec = mysql_query($query) or die (mysql_error());
                                $count = mysql_num_rows($exec);
                                
                                if($count == 0)
                                {
                                        echo 'Няма открит нито един валиден E-Mail адрес.';
                                        exit;
                                }
                                                                
                                while($row = mysql_fetch_assoc($exec))
                                {
                                        $email = trim(rtrim($email));
                                        if($this -> validateEmail($row[$this -> mysql_field]) === true)
                                                $emails[] = $row[$this -> mysql_field];
                                }
                                
                                $this -> emails = $emails;
                                break;
                }
                
                printf('Открити са <strong>%s</strong> валидни E-Mail адреса.', number_format(count($this -> emails)));
                $this -> sendMail();
        }
        
        private function validateEmail($email)
        {
                if((preg_match('/^[a-z0-9-_\.]+@{1}+[a-z0-9-]+\.[a-z]{2,4}$/i', $email) || preg_match('/^[a-z0-9-_\.]+@{1}+[a-z0-9]+\.[a-z0-9-_]+\.[a-z]{2,4}$/i', $email)) && !in_array($email, $this -> skip))
                        return true;
                else
                        return false;
        }
        
        private function readFileContent()
        {
                $fopen = fopen($this -> sourceFile, 'r');
                $fread = fread($fopen, filesize($this -> sourceFile));          
                $explode = explode("\n", $fread);
                $count = 0;
                $emails = array();
                
                foreach($explode as $email)
                {
                        $email = trim(rtrim($email));
                        if($this -> validateEmail($email) === true && !in_array($email, $emails))
                        {
                                $emails[] = $email;
                                $count++;
                        }
                }
                
                if($count == 0)
                {
                        echo 'Няма открит нито един валиден E-Mail адрес.';
                        exit;
                }
                
                $this -> emails = $emails;
        }
        
        private function sendMail()
        {
                $headers  = 'MIME-Version: 1.0' . "\r\n";
                $headers .= 'Content-type: text/html; charset=UTF-8' . "\r\n";
                $headers .= 'From: ' . $this -> mailSender . "\r\n";
                $i = 0;
                $n = 1;
                
                echo '<br /><br />';
                foreach($this -> emails as $emails)
                {
                        if($i == $this -> mailPerCycle)
                        {
                                $this -> sleepBuffer($this -> sleepCycle);
                                $i = 0;
                        }
                        
                        $status = (@mail(strtolower($emails), $this -> mailSubject, $this -> message, $headers) === true) ? '<span style="color:green; font-weight:bold">OK!</span>' : '<span style="color:red; font-weight: bold">Failed</span>';
                        printf('<span style="font-size: 16pt">%s.</span> %s %s<br />', $n, strtolower($emails), $status);
                        $this -> sleepBuffer($this -> sleepMail);
                        $i++; $n++;
                }
        }
}

if(isset($_POST['message']))
{
        $message = '<style type="text/css">
body
{
        color: 999;
}

.table
{
        width: 100%;
        border: 1px;
        border-style: solid;
        border-color: #99c;
        font-size: 11pt;
}

.head
{
        background-color: #99c;
        color: #FFF;
        font-weight: bold;
        text-align: center;
}

a
{
        color: 10c;
        font-weight: bold;
        text-decoration: none;
}

a:hover
{
        color: red;
        font-weight: bold;
        text-decoration: none;
}

hr
{
        color: #99c;
        background-color: #10c;
        height: 1px;
}
</style>

<table class="table" align="center">
        <tr><td class="head">Dreaming</td></tr>
        <tr><td><hr width="100%" /></td></tr>
        <tr>
                <td>
                        Здравейте,<br />
                        Това съобщение е автоматично генерирано от системата и се изпраща масово до всеки потребител.
                        <br />Моля не отговаряйте на него, то се изпраща единствено с информационна цел.
                </td>
        </tr>
        <tr><td><hr width="100%" /></td></tr>
        <tr>
                <td>
                        ' . nl2br($_POST['message']) . '
                </td>
        </tr>
</table>';
        $mail = new massMail($message);
}
else
        echo '
<form action="" method="POST">
<textarea name="message" style="width: 100%; height: 400px"></textarea><br />
<input type="submit" value="Изпрати съобщението" />
</form>';
?>
 
Редактор за съобщения най-добре TinyMCE, а за пращане на съобщения SwiftMailer, защото той ти гарантира изчистен HTML, писмото да бъде получено и да не е във SPAM/JUNK кутията. :)
 
Благодаря за отговорите приятели, давам точката на t0m3kk защото се отзова първи и му я обещах но оценявам и вашата помощ . За сега не мога да разбера дали ще изникнат проблеми защото съм на локлхост, но ако има ще отворя нова тема.
 

Back
Горе