Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Biblioteka sledzenia maila
Forum PHP.pl > Forum > PHP
rad11
Czy istnieje jakas biblioteka lub sposob aby sledzic status maila ? czy zostal otwarty/usuwaniety/spam?
Pyton_000
nie, możesz tylko wiedzieć czy został dostarczony i ew. potwierdzenie przeczytania które może wysłać odbierający.
rad11
Znalazlem niby taka opcje aby wyslac w naglowku maila:

http://help.mandrill.com/entries/21688056-...-click-tracking

  1. 'X-MC-Track', 'opens, clicks_htmlonly'


ale niby naglowek sie laduje ale nic sie nie dzieje moze ktos z was kiedys czarowal z takim czyms?
ikssde
Teoretycznie możesz sprawdzić czy wiadomość została otwarta przez wrzucenie w jej treści obrazka, którego odnośnik kieruje do skryptu i zawiera jakiś identyfikator tego maila. Następnie ten skrypt zapisuje sobie fakt otwarcia go w bazie danych i dodatkowo generuje obrazek 1px na 1px, tak, żeby to było niewidoczne.

Minus jest taki, że jak ktoś ma zablokowane wyświetlanie obrazków w mailu to ta metoda nie zadziała.

Innych metod nie ma.
markuz
Czytałem kiedyś o metodzie wstawiania pliku dźwiękowego - wtedy niektóre poczty które blokują obrazki mogą wczytać ten plik dźwiękowy - którego nie słychać głównie chodzi o wykonanie request`u na twój serwer.
rad11
Dzieki za podpowiedzi napewno przetestuje je.

Cytat
i dodatkowo generuje obrazek 1px na 1px


a po co juz po zapisie tworzyc ten obrazek?

Udalo mi sie zrobic akcje z tym obrazkiem tylko request jest dwa razy robiony pierwszy raz kiedy wysylam maila drugi raz kiedy osoba odczyta wiadomosc. Czyli 2 razy robi sie zapis do BD , czy da rade jakos ograniczyc to do 1 razu tylko wtedy kiedy uzytkownik odczyta wiadomosc?

Dodam ze probowalem porownac host z requestu ale tak nie dziala.

Moglbym tak robic ze kiedy przy wykonywaniu requestu beda dwa rekordy w bazie o takim samym kluczu to jeden rekord usuwac. Lub robic tak ze zapisywac dwa requesty w bazie co bedzie oznaczac odczytanie wiadomosci. Ale wolal bym to jakos zoptymalizowac jako zapisc kiedy tylko uzytkownik odczyta wiadomosc.

Jakies inne pomysly macie moze?
markuz
Na jakiej zasadzie to robisz? Może podzielisz się kodem?

Ja bym zrobił to tak:
1. Zapisuje w bazie id wiadomości oraz flagę odczytana na 0
2. Wysyłam email który ma w treści: <img src="twojastrona.pl/costam.php?id={id_wiadomosci}"/>
2. Przechwytuje request z costam.php i w bazie dla id = $_GET['id'] ustawiam flage odczytana na 1

Chcesz powiedzieć, że w punkcie 2 wysyła ci request do costam.php?
rad11
Dokladnie tak.

wysylka maila:

  1. $mail = new \PHPMailer;
  2. $mail->SMTPDebug = 2;
  3. $mail->isSMTP();
  4. $mail->Host = 'xxxx';
  5. $mail->SMTPAuth = true;
  6. $mail->Username = 'xxxx;
  7. $mail->Password = 'xxxx';
  8. $mail->SMTPSecure = 'tls';
  9. $mail->Port = 587;
  10. $mail->From = 'xxxx';
  11. $mail->FromName = 'Mailer';
  12. $mail->Subject = $mailing_title;
  13. $mail->addAddress(xxxx);
  14. $mail->isHTML(true);
  15. $mail->Subject = $title;
  16. $mail->Body = MailingActions::buildMailingTemplate($_POST['mailing']['template_mailing_id'], $mailing_content, $mailing_title, $mailing_template);
  17.  
  18. if (!$mail->send()){
  19. echo 'Message could not be sent.';
  20. echo 'Mailer Error: ' . $mail->ErrorInfo;
  21. } else {
  22. echo 'Message has been sent';
  23. }


zdjecie:

  1. <img src="'.$_SERVER['HTTP_ORIGIN'].'/static_local/script.php?uniqid='.$uniqid.'" style="display:none;" />


script.php

  1. if ($_GET['uniqid']) {
  2. $array = Model::factory('Mailings')->create();
  3. $array->title = 'xxx';
  4. $array->save();
  5. }
markuz
A wyświetlasz gdzieś tą wiadomość? W jaki sposób ją wysyłasz? Normalna funkcja mail() nie powinna wczytywać treści takiego email tylko go wysłać. Pokaż kod.
rad11
Probowalem wyslac audio ale wogole nie laduje tagu audio do wiadomosci co moze byc przyczyna ?
Raito
W 6 linii masz niedomknięty apostrof.
rad11
To akurat jest blad przy kopiowaniu.
trueblue
Cytat(rad11 @ 15.03.2015, 17:43:36 ) *
Probowalem wyslac audio ale wogole nie laduje tagu audio do wiadomosci co moze byc przyczyna ?

Klient pocztowy może modyfikować źródło html.
rad11
Eh to dupa ... a da sie przed tym obronic w jakis sposob ?
trueblue
Nie da się.
Najpewniejszą metodą zliczania otwarć jest użycie <img>. Oczywiście najpewniejszą pod względem nieusunięcia tagu z kodu, bo wyświetlenie/zliczenie, zależy od tego czy użytkownik pobierze obrazki.
rad11
No wlasnie wiem wiekszosc klientow pocztowych ma wylaczone pokazywanie obrazkow i mozna wlaczyc jedynie poprzez pozwolenie pokazywania obrazkow.

Jak juz jestem w temacie jak sprawdzic czy email zostal dostarczony ? Poniewaz ponizszy kod pomimo wpisania takiego emaila fdafadsf25r34faeswfr2rtqewrgf34@o2.pl zwraca true i nie mam jak przechwycic zwrotu do nadawcy ?

  1. if (!$mail->send()) {
  2. var_dump($mailing);
  3. $this->updateMailingRecipientToNSend($mailing);
  4. echo 'Message could not be sent.';
  5. echo 'Mailer Error: ' . $mail->ErrorInfo;
  6. } else {
  7. $mailing = $this->InsertMailingRecipient($insert_mailing, $_SESSION['permanent_variables']['userId'], $key);
  8. echo 'Message has been sent';
  9. }
johny_s
Na adres z którego wysłałeś powinieneś dostać info, że delikwent nie istnieje, ale to zależy od konfiguracji serwera
rad11
No wlasnie dostaje emaila, ale chce to dostac juz po uruchomieniu $mail->send(); da rade? potrzebuje to oznaczyc w bazie.
johny_s
nie, bo mail jest wysłany prawidłowo, jedynie dorobić jakiś mechanizm który pobierze sobie maile i posprawdza na taką ewentualność
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.