[PHP][SQL]Jak zrobić automatyczne dodawanie email'a do bazy

Witam.

Z góry mówie że jestem zielony w PHP, chciałbym zrobić coś podobnego do rejestracji, niekoniecznie z Hashem ale jakimkolwiek potwierdzeniem.

Chodzi o to żeby po wysłaniu Email’a do firmy której chcę oferować uługi, mogli oni kliknąć w link, który dopisałby email tej firmy do bazy danych, a jeżeli nie chcieli by skorzystac z tych usług po np. 2 tygodniach zostaliby usunięci z bazy.

Jeżeli moglibyście to prosiłbym o gotowy plik lub wytłumaczenie co i jak.

Dzięki za wszystkie wypowiedzi. =D>

Zbyt skomplikowane jak na coś co można na poczekaniu tutaj napisać. Ogólnie polecam poszukanie skryptu listy mailingowej, subskrypcji. Zapewne jest tego w necie na pęczki.

Postaram się to opisać w najprostszy, możliwy sposób.

Tworzysz sobie w bazie tabele (w zależności co tam dodatkowego potrzebujesz) mniej więcej na wzór tego:

table.png

Tworzysz sobie formularz w html, gdzie podajesz załóżmy odbiorcę, temat i treść. Możesz to zautomatyzować i dla stałego tematu i treści wprowadzić jedynie adresy e-mail, do których ma zostać wysłana wiadomość.

Po wysłaniu formularza zapisujesz dane do tabeli subscriptions i wysyłasz wiadomość e-mail przy użyciu jakiegoś mechanizmu do obsługi maili. Jeżeli nie wiesz jak to w sieci jest tego sporo. Możesz to zrobić przy użyciu prostej funkcji mail w PHP lub pobrać coś bardziej zaawansowanego.

Do bazy zapisujesz email, dispatch_date, register_hash, unregister_hash. Założyłem dla tych hashy długość 32 znaki, więc tworząc skrót funkcją md5 możesz zapisać te wartości do tych pól. Dla tych hashy możesz przypisać wartość:

$register_hash = md5(time() . 'SECRET_REGISTER_HASH');

$register_hash = md5(time() . 'SECRET_UNREGISTER_HASH');

Po czym wysyłasz link do rejestracji, coś na wzór http://xxx.yy?register_hash={$hash}

i w PHP dla tej akcji, bierzesz zmienną $_GET[register_‘hash’], sprawdzasz czy w bazie istnieje taki skrót i jeżeli tak to aktualizujesz w tabeli pole register_date i is_active.

Potem przy wysyłce mailingu pobierasz listę adresów z wartością is_active = 1 i gotowe. Dobrym zwyczajem jest dołączanie linku rezygnacji, więc tu możesz wykorzystać unregister_hash i również w postaci takiego spreparowanego linka wysłać w treści wiadomości.

To możesz rozwiązać na mniej lub bardziej zaawansowane sposoby, ja przedstawiłem jedno z najprostszych rozwiązań.

Dzieki za odpowiedź hoobert. :smiley:

Teraz dla pewności, w phpMyAdmin mam do SQL wklepać to:

CREATE TABLE `Subskrybcje` (

`id` INT ,

`email` VARCHAR(90) ,

`dispatch_date` DATETIME

`register_hash` VARCHAR(32)

`register_date` DATETIME

`unregister_hash` VARCHAR(32)

`unregister_date` DATETIME

`is_active` TINYINT

) ENGINE = MYISAM ;

oraz screen:

http://images.tinypic.pl/i/00438/4jpt3t11tvt2.png

To myśle że dobrze zrozumiałem.

Ale mam problem ze stworzeniem formularza który automatycznie wysyłałby emaile. Dodam że posiadam już emaile do przyszłych klientów i chciałbym tylko na ich adres wysłać link w który wyglądałby tak napikon.xaa.pl?zgoda=tak/nie i tyle bez zbędnych żeczy, ale nie wiem jak się za to zabrać. Nie było by problemem bo mógłbym wysłać ofertę do wielu, ale problem leży w kontekście prawnym. Gdyby nie to:

to nie formularz wysyła maile, tylko skrypt, który przygotujesz. Przez formularz miałem na myśli jakieś pole typu textarea, w którym wpisałbyś adresy e-mail a po wysłaniu danych do serwera obsłużył to przez PHP. Mając te dane możesz poprzez iterację wykonać wysyłkę dla każdego adresu z osobna, np.:

$email_addresses = explode("\n",$_POST['email_addresses']);


$subject = 'the subject';

$message = 'hello';

$headers = 'From: webmaster@example.com' . "\r\n" .

    'Reply-To: webmaster@example.com' . "\r\n" .

    'X-Mailer: PHP/' . phpversion();


foreach($email_addresses as $k => $v)

{

   mail($v, $subject, $message, $headers);

}

Jest to najprostszy z możliwych sposobów. Funkcja mail() w tak surowej postaci korzysta z domyślnie skonfigurowanego konta e-mail, obsługiwanego przez PHP na Twojej maszynie. Dla bardziej zaawansowanej wysyłki polecam PHPMailer. Jeżeli podajesz link do rejestracji w treści wiadomości to też musisz mieć przygotowany skrypt obsługujący zapis takich klientów.

Nie wiem jak to planujesz rozwiązać, przypuszczam, że ta aplikacja nie korzysta z jakiegoś bardziej zaawansowanego mechanizmu, lub jakiegoś frameworka umożliwiającego określenie akcji dla danego modułu, więc po prostu możesz stworzyć plik rejestracja.php a link który wyślesz klientowi to http://xxx.yy/rejestracja.php?registration_hash={$hash}

a w pliku rejestracja.php połączysz się z bazą, pobierzesz prostym zapytaniem ilość rekordów zawierających registration_hash w polu registration_hash i jeżeli jest równe 1, wówczas wykonujesz proste zapytanie UPDATE, które aktualizuje wymagane wartości.

Wcześniej pisałem o tworzeniu hashy przy funkcji md5 zawierającej time() z jakimś kluczem. Jeżeli to będzie wysyłka masowa to lepiej połącz to jeszcze z jakąś unikatową wartością np. z mailem klienta, bo md5(time() . ‘COS_TAM’) zmieniać się będzie co 1 sekundę, a jak to zrobisz w jednej pętli to dla wielu rekordów wygeneruje się taki sam hash.

Co do pierwszej części Twojej wiadomości, to tak - tak ta tabela powinna wyglądać, jeżeli całkowicie przyjmiesz moje założenia.

Co do kwestii prawnych, to możliwe, że wysyłka do wielu adresatów oferty nie jest dozwolona ze względu na jawne przesłanie nagłówkiem adresów pozostałych adresatów. Sam nie chciałbym, żeby mój adres nagle zobaczyło 100 innych odbiorców. Zawsze można jednak wysłać wiadomość do siebie a dodać w ukrytej kopii adresy odbiorców, do których wiadomość ma dotrzeć. Nie jest to profesjonalne rozwiązanie, ale prawnie chyba nikt Ci niczego nie zarzuci.