Mail siuntimo sistema
Šis straipsnis apie masinį el. laiškų siuntimą bei scriptai skirti tiktai pažintiniams ir edukaciniams tikslams. Mes neatsakome už kitokį (blogą ar gerą) straipsnio panaudojimą.
Reikalavimai sistemai:
- MySQL 5.x
- PHP 5.x
- PHP moduliai, pear install Mail Mail_Mime
- Sistemos prieiga su shell bash palaikymu
- Veikianti smtp serverio prieiga (tinka bet koks ISP paštas)
MySQL duombazės lentelės struktūra:
CREATE TABLE IF NOT EXISTS mailai (
id INT(11) NOT NULL AUTO_INCREMENT,
mail TEXT DEFAULT NULL,
status VARCHAR(200) DEFAULT NULL,
country VARCHAR(2) DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB
El. Pašto adresams naudojamas šis scriptas, kuris paima iš dokumento adresai.txt, eile surašytus adresus ir importuoja į MySQL lentelę.
#!/bin/bash
inputfile="adresai.txt"
country='lt';
cat $inputfile | while read mails; do
echo "INSERT INTO mailai (mail, country) VALUES ('$mails','$country');"
done | mysql mailas;
Žemiau esantis scriptas skirtas siūsti el. laiškus, gavėjams iš duombazės lentelės.
<?php
//error_reporting(E_ALL ^ E_NOTICE ^ E_DEPRECATED ^ E_STRICT);
set_include_path("." . PATH_SEPARATOR . ($UserDir = dirname($_SERVER['DOCUMENT_ROOT'])) . "/pear/php" . PATH_SEPARATOR . get_include_path());
require_once "Mail.php";
require_once "config.php";
$query = "select id, mail, status from mailai where country = 'lt'";
$result = mysql_query($query, $con);
$emails = array();
while($row=mysql_fetch_assoc($result))
{
$emails[]=$row['mail'];
}
$count = file_get_contents("count.txt");
for($i=$count;$i<count($emails);$i++)
{
$to = $emails[$i];
$message = file_get_contents("mailas.html"); // this will get the HTML sample template sample.html
$headers = array ('From' => $from, 'To' => $to, 'Subject' => $subject, 'MIME-Version' => 1, 'Content-type' => 'text/html;charset=UTF-8', 'Reply-To' => $from);
$smtp = Mail::factory('smtp', array ('host' => $host, 'port' => '25', 'auth' => true, 'username' => $username, 'password' => $password));
$mail = $smtp->send($to, $headers, $message);
if (PEAR::isError($mail)) {
$file = fopen("notmailsentlist.txt","a+");
fwrite($file, $to.",\r\n");
fclose($file);
} else {
$file = fopen("mailsentlist.txt","a+");
fwrite($file, $to.",\r\n");
fclose($file);
}
if(($i-$count)>=100) // this will send 100 mails from database per execution
{
$filec = fopen("count.txt",'w'); // store current count to count.txt
fwrite($filec, $i);
fclose($filec);
break;
}
}//for end
$filec = fopen("count.txt",'w'); // store fine count to count.txt this will be used as a start point of next execution
fwrite($filec, $i);
fclose($filec);
?>
Pastarajį scriptą reikią užmauti ant crontab, kad pasileistų kas 5-10min. Scriptas savo statusą bei išsiųstų laiškų kiekį išsaugo, naujai paleistas pratesia darbą. Taip pat susikurkite mailas.html failą kuriame parašysite norimo siųsti laiško turinį. Nepamirškite pakoreguoti apačioje esančio nustatymų failo config.php
<?php
$con = mysql_connect("localhost","root","passwordas"); // replace dbuser, dbpass with your db user and password
mysql_select_db("mailas", $con); // replace dbname with your database name
// smtp mailo setupas
$host = "mail.000.lt";
$username = "000@000.lt";
$password = "000";
$subject = 'I just noticed you on Facebook group'; // Kokia laiško tema
$from = "000@000.lt";
?>
Scrapinam mailus[keisti]
Mailams išgauti naudojami įvairūs triukai ir t.t. Čia aprašytas keletas.
Adresų išgavimas iš svetainės[keisti]
wget -q -r -l 5 -O - www.adresas.lt | grep -E -o "\b[a-zA-Z0-9.-]+@[a-zA-Z0-9.-]+\.[a-zA-Z0-9.-]+\b"
Išgavimas iš teksto ar kito materialo[keisti]
grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" materialas.txt | sort | uniq > pasto_adresai.txt