Mail siuntimo sistema: Skirtumas tarp puslapio versijų

Iš Žinynas.
Jump to navigation Jump to search
(straipsnis apie masinį el. laiškų siuntimą.)
 
(Jokio skirtumo)

Dabartinė 14:09, 4 spalio 2017 versija

Š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