Jak wysłać ze strony WWW e-mail z dowolnym załącznikiem, PHP Skrypty


[PHP] Jak wysłać ze strony WWW e-mail z dowolnym załącznikiem?

0x01 graphic

Chcesz wysłać ze strony WWW list za pomocą funkcji mail() ale powinien on zawierać nie tylko standardową treść lecz także dowolny załącznik lub wiele załączników, (grafikę, dokument Worda). Dzięki takiemu rozwiązaniu możesz stworzyć np. automat, który wyśle komuś list z wybranym przez formularz załącznikiem albo autoresponder wysyłający ofertą firmy.

0x01 graphic

Aby wysyłać listy z załącznikami należy zamieścić w nim stosowne nagłówki MIME, a same załączniki odpowiednio zakodować, np. za pomocą standardu base64. Oto gotowy kod programu wysyłającego listy z załącznikiem:

<?

srand((double)microtime()*1000000);

$znacznik = md5(uniqid(rand()));

// dane o odbiorcy, nadawcy i załączniku

$odbiorca="odbiorca@adres.pl";

$tytul="Masz list...";

$nadawca_imie = "Janko Nadawca";

$nadawca_email = "janko@nadawca.pl";

$plik = "logo.gif";

$typpliku = "image/gif";

$nazwapliku="mojelogo.gif";

// treść listu

$tresclistu = "

Witaj,

wysyłam Ci list z załącznikiem!

";

// definicja nagłówków

$naglowki = "From: $nadawca_imie <$nadawca_email>\n";

$naglowki .= "MIME-Version: 1.0\n";

$naglowki .= "Content-Type: multipart/mixed;\n";

$naglowki .= "\tboundary=\"___$znacznik==\"";

// nagłówki listu

$tresc="--___$znacznik==\n";

$tresc .="Content-Type: text/plain; charset=\"iso-8859-2\"\n";

$tresc .="Content-Transfer-Encoding: 8bit\n";

$tresc .="\n$tresclistu\n";

// nagłówki i obsługa załącznika

$tresc .="--___$znacznik==\n";

$tresc .="Content-Type: $typpliku\n";

$tresc .="Content-Disposition: attachment;\n";

$tresc .=" filename=\"$nazwapliku\"\n";

$tresc .="Content-Transfer-Encoding: base64\n\n";

$f = fopen($plik,"r");

$dane = fread($f,filesize($plik));

fclose($f);

$tresc .= chunk_split(base64_encode($dane));

$tresc .="--___$znacznik==--\n";

// wysłanie listu

mail($odbiorca,$tytul,$tresc,$naglowki);

?>

Na początek warto wygenerować znacznik, który pozwala oddzielić poszczególne części listu - tekst od załącznika. Może to być dowolny ciąg znaków, ja przyjąłem losową wartość. Musi się pojawić w liście ponieważ w ten sposób program pocztowy dowie się, gdzie zaczynają się i kończą poszczególne części listu (a może on zawierać wiele załączników).

Teraz trzeba wypełnić informacje o odbiorcy listu (konieczny jest adres e-mail), nadawcy (wpisz swoje dane) i załączniku. Załącznik składa się z trzech pól - $plik określa położenie pliku na dysku, $typpliku to typ MIME różny dla różnych aplikacji (dla GIFa będzie to właśnie image/gif, dla innych patrz na dole porady - jest link do artykułu o typach MIME) i $nazwapliku pod którą zobaczy plik odbiorca w załączniku.

Nagłówków dokładnie omawiać nie będę bo możnaby o nich napisać grubą książkę - stosowne RFC na ten temat również znajdziesz na dole porady. Ważne jest jednak aby określić typ listu multipart/mixed - czyli w wielkim skrócie ma to być tekst i załączniki, a następnie podać dla dwóch części listu ich typ i sposób kodowania.

Część tekstowa będzie typu text/plain a więc zawierać będzie czysty tekst w standardzie iso-8859-2 zakodowany za pomocą 8 bitów, czyli pełnego ASCII.

Część z załącznikiem będzie typu takiego jaki podajesz na początku programu, w tym przykładzie to image/gif. Określamy też, że jest to załącznik kodowany za pomocą standardu base64. Podczas tworzenia załącznika pobierany jest plik i kodowany właśnie do tego standardu.

Na samym końcu, gdy mamy już zbudowaną całą treść listu następuje wysyłka. Odbiorca otrzyma list z załączonym plikiem, tak jak chcieliśmy.

A oto wersja skryptu do wysyłania dowolnej ilości załączników. Wystarczy je umieścić w tablicy $pliki, gdzie znakiem | są oddzielone nazwy plików na dysku, ich typy MIME i nazwy plików wodoczne w mailu.

<?

srand((double)microtime()*1000000);

$znacznik = md5(uniqid(rand()));

// dane o odbiorcy, nadawcy i załączniku

$odbiorca="odbiorca@adres.pl";

$tytul="Masz list...";

$nadawca_imie = "Janko Nadawca";

$nadawca_email = "janko@nadawca.pl";

$pliki[]="1.gif|image/gif|obraz1.gif";

$pliki[]="2.gif|image/gif|obraz2.gif";

$pliki[]="3.gif|image/gif|obraz3.gif";

// treść listu

$tresclistu = "

Witaj,

wysyłam Ci list z załącznikami!

";

// definicja nagłówków

$naglowki = "From: $nadawca_imie <$nadawca_email>\n";

$naglowki .= "MIME-Version: 1.0\n";

$naglowki .= "Content-Type: multipart/mixed;\n";

$naglowki .= "\tboundary=\"___$znacznik==\"";

// nagłówki listu

$tresc="--___$znacznik==\n";

$tresc .="Content-Type: text/plain; charset=\"iso-8859-2\"\n";

$tresc .="Content-Transfer-Encoding: 8bit\n";

$tresc .="\n$tresclistu\n";

// nagłówki i obsługa załączników

foreach($pliki as $plik) {

$p = explode("|", $plik);

$tresc .="\n--___$znacznik==\n";

$tresc .="Content-Type: $p[1]\n";

$tresc .="Content-Disposition: attachment;\n";

$tresc .=" filename=\"$p[2]\"\n";

$tresc .="Content-Transfer-Encoding: base64\n\n";

$f = fopen($p[0],"r");

$dane = fread($f,filesize($p[0]));

fclose($f);

$tresc .= chunk_split(base64_encode($dane));

}

$tresc .="--___$znacznik==--\n";

// wysłanie listu

mail($odbiorca,$tytul,$tresc,$naglowki);

?>



Wyszukiwarka

Podobne podstrony:
Jak pobrać zawartość strony WWW korzystając z biblioteki CURL, PHP Skrypty
Jak pobrać zawartość strony WWW korzystając z biblioteki CURL, PHP Skrypty
Jak zmienić tło strony w zależności od aktualnej godziny, PHP Skrypty
zatruty dzień, Scenariusz pochodzi ze strony www
informacje ze strony www gegrus pl
GRY ZE STRONY WWW GRY HARCERSKIE WEBPARK PL
Pojęcia pracy ludzkiej ze strony www [ www potrzebujegotowki pl ]
Roksana Kopańska wiersze ze strony www opoka org pl
Jak wypisać na ekranie w PHP zawartość dowolnej tabeli, PHP Skrypty
jak wyliczyc kiedy nastapi wschod i zachod slonca dla dowolnego dnia, PHP Skrypty
jak przeliczyc biorytm dowolnego dnia, PHP Skrypty
jak samodzielnie obliczyc numer dnia w dowolnym roku, PHP Skrypty
Jak uzyskać kolejny numer (id) ostatnio wstawionego rekordu, PHP Skrypty
jak przeslac dane z pol tekstowych do innych stron, PHP Skrypty
Jak wypisać wszystkie anagramy podanego wyrazu (permutacja ciągu, PHP Skrypty
Jak sprawdzić czy domena istnieje i do kogo należy, PHP Skrypty

więcej podobnych podstron