[PHP] Jak wysłać list do grup dyskusyjnych USENET?
Chcesz wysłać list do dowolnej grupy dyskusyjnej na Usenecie.
Jeżeli chcesz wysłać na grupę dyskusyjną list, możesz to zrobić oczywiście za pomocą programu pocztowego. Ale nie zawsze program rozwiązuje sprawę, szczególnie wtedy gdy wysłanie listu musi być zautomatyzowane lub wykonywane okresowo.
Napiszmy prosty skrypt, który wyśle list na wybraną grupę dyskusyjną w Usenecie. Przygotuj sobie nazwę grupy (pl.test będzie do testów najlepsza) i serwer news (jeżeli korzystasz z łącza TP SA, będzie to np. news.tpi.pl).
<?
$h["from"] = "Imie Nazwisko <adres@email.pl>";
$h["subject"] = "Tytuł listu";
$h["custom_headers"][] = "Newsgroups: pl.test";
$b[0]["type"] = "text";
$b[0]["subtype"] = "plain";
$b[0]["charset"] = "iso-8859-2";
$b[0]["contents.data"] =
"
Cześć!
Treść listu...
Pozdrawiam
";
$list=imap_mail_compose($h,$b);
$f=fsockopen("news.tpi.pl",119);
fputs($f,"POST\r\n");
fputs($f,"$list");
fputs($f,".\r\n");
fclose($f);
?>
Do skomponowania listu, a więc przygotowania nagłówków i treści wykorzystamy funkcję imap_mail_compose() aby nie tworzyć nagłówka ręcznie. W tym celu w php.ini odznaczony powinien być moduł extension=php_imap.dll.
W tablicy $h (headers) umieścimy dane nagłówkowe, a więc nadawcę, tytuł listu i dodatkowy nagłówek (custom_headers) określający grupę, do której zostanie wysłana wiadomość.
W tablicy $b (body) znajduje się treść listu (contents.data) oraz trzy parametry określające typ danych jako czysty tekst (text/plain) i kodowanie polskich znaków (iso-8859-2). Gdy list nie zawiera polskich znaków, nie musisz określać kodowania.
Tak przygotowane nagłówki trafiają następnie do funkcji imap_mail_compose(), która "produkuje" na podstawie tablic gotową treść listu:
From: Imie Nazwisko <adres@email.pl>
Subject: Tytuł listu
MIME-Version: 1.0
Content-Type: TEXT/plain; CHARSET=iso-8859-2
Newsgroups: pl.test
Cześć!
Treść listu...
Pozdrawiam
Jak widzisz, nie ma tu żadnych czarów i równie dobrze możesz taki nagłówek i treść wpisać "ręcznie" bez korzystania z funkcji imap. Tak spreparowana treść trafia do zmiennej $list.
Teraz pozostało tylko nawiązać połączenie z serwerem news na porcie 119, a następnie wysłać na port polecenie POST i treść listu zakończonego kropka, która oznacza koniec transmisji. I już. List został wysłany, możesz wejść do grupy pl.test i zobaczyć jak wygląda.