Mail siuntimo sistema

Iš Žinynas.
Jump to navigation Jump to search

Š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