rad11
12.03.2015, 11:08:07
Czy istnieje jakas biblioteka lub sposob aby sledzic status maila ? czy zostal otwarty/usuwaniety/spam?
Pyton_000
12.03.2015, 11:20:31
nie, możesz tylko wiedzieć czy został dostarczony i ew. potwierdzenie przeczytania które może wysłać odbierający.
rad11
12.03.2015, 12:57:22
Znalazlem niby taka opcje aby wyslac w naglowku maila:
http://help.mandrill.com/entries/21688056-...-click-tracking'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
12.03.2015, 15:01:18
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
12.03.2015, 15:19:44
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
13.03.2015, 14:04:21
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
13.03.2015, 14:12:43
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
13.03.2015, 14:14:16
Dokladnie tak.
wysylka maila:
$mail = new \PHPMailer;
$mail->SMTPDebug = 2;
$mail->isSMTP();
$mail->Host = 'xxxx';
$mail->SMTPAuth = true;
$mail->Username = 'xxxx;
$mail->Password = 'xxxx';
$mail->SMTPSecure = 'tls';
$mail->Port = 587;
$mail->From = 'xxxx';
$mail->FromName = 'Mailer';
$mail->Subject = $mailing_title;
$mail->addAddress(xxxx);
$mail->isHTML(true);
$mail->Subject = $title;
$mail->Body = MailingActions::buildMailingTemplate($_POST['mailing']['template_mailing_id'], $mailing_content, $mailing_title, $mailing_template);
if (!$mail->send()){
echo 'Message could not be sent.';
echo 'Mailer Error: ' . $mail->ErrorInfo;
} else {
echo 'Message has been sent';
}
zdjecie:
<img src="'.$_SERVER['HTTP_ORIGIN'].'/static_local/script.php?uniqid='.$uniqid.'" style="display:none;" />
script.php
if ($_GET['uniqid']) {
$array = Model::factory('Mailings')->create();
$array->title = 'xxx';
$array->save();
}
markuz
13.03.2015, 14:17:54
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
15.03.2015, 17:43:36
Probowalem wyslac audio ale wogole nie laduje tagu audio do wiadomosci co moze byc przyczyna ?
Raito
15.03.2015, 17:51:40
W 6 linii masz niedomknięty apostrof.
rad11
15.03.2015, 19:06:15
To akurat jest blad przy kopiowaniu.
trueblue
15.03.2015, 19:09:28
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
15.03.2015, 19:17:41
Eh to dupa ... a da sie przed tym obronic w jakis sposob ?
trueblue
15.03.2015, 19:21:40
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
16.03.2015, 12:06:26
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 ?
if (!$mail->send()) {
$this->updateMailingRecipientToNSend($mailing);
echo 'Message could not be sent.'; echo 'Mailer Error: ' . $mail->ErrorInfo; } else {
$mailing = $this->InsertMailingRecipient($insert_mailing, $_SESSION['permanent_variables']['userId'], $key);
echo 'Message has been sent'; }
johny_s
16.03.2015, 12:10:54
Na adres z którego wysłałeś powinieneś dostać info, że delikwent nie istnieje, ale to zależy od konfiguracji serwera
rad11
16.03.2015, 12:12:07
No wlasnie dostaje emaila, ale chce to dostac juz po uruchomieniu $mail->send(); da rade? potrzebuje to oznaczyc w bazie.
johny_s
16.03.2015, 12:15:14
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.