Dazoot Software

RSS 2.0
Catalin Constantin in Deliverability, Newsletters | Niciun comentariu

Newsman ESP – Ip Monitoring Tool

Când trimiți un newsletter și majoritatea recipienților îl primesc în folderul Junk sau Bulk, ceva nu a mers bine și trebuie să iei măsuri. Motivul pentru care mesajul este plasat în Junk/Bulk diferă de la caz la caz. Mai jos enumăr câteva motive:
1. Content invalid sintactic (bad HTML is not good)
2. Bad IP Reputation (providerul tău curent îți garanteaza IP dedicat pentru livrarea newsletterelor ? Daca NU, atunci ai o problemă)
3. Spammy keywords (fie în subject fie în body-ul mesajului)
4. Rată mare de Spam complaints (providerul tău curent îți procesează și Spam Complaints ? Daca NU, atunci ai o problemă și mai mare)

Oricare ar fi motivul pentru care mesajul tău a ajuns în Junk, daca nu știi ce se întâmpla cu mesajele tale nu ai cum să iei măsuri să îți îmbunătățești rata de penetrarea a Inbox-ului (deliverability).

La Newsman.ro am introdus recent în Panoul de Administrarea al listelor, un tool de monitorizare a IP-urilor dedicate (per client).
Monitorizarea reputației IP-ului este activată implicit pentru orice client Newsman.ro.
Vrei să știi ce se întâmplă cu emailurile tale după ce sunt trimise? Try us out. Comentează la acest post sau contactează-ne prin email și după o lună de zile îți trimitem un raport detaliat al monitorizării IP-urilor tale.

Screenshot mai jos:
IpMonitor Newsman

Etichete: , , , , , ,
Catalin Constantin in IT news, Shopping online | Niciun comentariu

BricoMall.ro – locul al treilea la “User’s Choice” la Gala Premiilor eCommerce 2009

Cel mai asteptat eveniment al anului pentru comerciantii online din Romania, Gala Premiilor eCommerce a avut loc marti, 20 octombrie, la hotelul Ramada Bucharest Park.

CIMG0102

Dupa o serie de prezentari si seminarii despre tot ceea ce presupune o afacere de comert online in Romania, a avut loc momentul cel mai asteptat al serii : decernarea premiilor.

Intr-o atmosfera destinsa, organizatorii au prezentat intai un colaj de filmulete inregistrate in momentul testarii site-urilor inscrise, cu focus pe diferitele erori de functionare descoperite de catre testarii GPeC, iar momentul cel mai amuzant al serii a fost decernarea Verzei editiei, site-ului care a obtinut cel mai mic punctaj.

In total au participat un numar de 63 de magazine online, care au fost supuse la 96 de criterii de jurizare si multe teste de uzabilitate, de catre 2 jurii in paralel, cu 21 de jurati de specialitate si 5 jurati consumatori.

CIMG0130

Profitind astfel de aceasta ocazie buna pentru orice magazin online de a-si testa propriile defecte atat in ceea ce priveste interfata web, cat si in ceea ce priveste modul de interactie cu clientii, BricoMall.ro s-a clasat pe locul al treilea la categoria sa (« Acasa ») cu un total de 787 de puncte obtinute.

CIMG0133

In acelasi timp, la categoria premiilor “User’s Choice” – Start Up, din partea consumatorilor, BricoMall s-a clasat din nou pe locul 3, cu un total insumat de 41 de puncte.

CIMG0136

Desi suntem incantati de clasarea BricoMall.ro in primele 3 pozitii, la ambele sectiuni la care a participat, speram sa putem invata din propriile lipsuri, pentru a imbunatati astfel experienta de shopping online a clientilor nostri.

Etichete: , , , , ,
Catalin Constantin in How to, IT news | Niciun comentariu

Prezentare Newsman la OBF Pitesti 2009

În data de 29 septembrie 2009, la Hotel Campus (sala de conferinţe), Pitesti, a avut loc a doua editie a Online Business Forum, eveniment ce se doreşte a fi doar primul pas al unei serii de conferinţe pe termen lung, dedicate utilizării instrumentelor online în afaceri.

Picture 1253

In program a fost inclusa si o prezentare sustinuta de NewsMan: „Emailing pentru Publisheri și E-Commerce”, ce contine o lista cu principalele puncte ce trebuie atinse si de care trebuie tinut cont in momentul in care te decizi sa iti incluzi in modelul tau de business marketarea prin intermediul newsletterelor, si modul in care NewsMan le trateaza.

image001

Descarca gratuit prezentarea in format ppt:

newsmannou-091022033927-phpapp02-thumbnail-2
„Emailing pentru Publisheri și E-Commerce”

Pentru orice informatii referitoare la modalitati de trimitere a newsletterelor cu ajutorul NewsMan va rugam sa ne contactati.

Picture 1257

Picture 1252

Etichete: ,
Catalin Constantin in Code, How to | Niciun comentariu

Procesare bounce-uri in real time

De multe ori este important ca lista de utilizatori ai unui site sau de abonati la un newsletter sa fie “clean”. Prin clean ma refer in primul rand la eliminarea adreselor inexistente.
Conform RFC, erorile de tip 5.1.1 reprezinta erori permanente (Bad destination mailbox address). Daca toti ar fi RFC Compliant, totul ar fi foarte simplu, dar din pacate multe servere de mail (SMTP) au propriile error codes. Noi la Newsman.ro incercam sa “construim” o lista de mesaje de eroare parsabile care identifica o adresa de mail inexistenta. Solutia noastra este listata mai jos. Folosim Python, dar in mod sigur mesajele RAW email pot fi parsate si in alte limbaje de programare. De exemplu in PHP5 mesajele email pot fi parsate foarte bine si rapid folosind libraria Zend.

Python Bounce Detector:

import email, re
 
NO_USER_FOUND_MSGS = [
    "user unknown", # web.de
    "unknown local part", # web.de
    "user is unknown", # gmx.de
    "MAILBOX NOT FOUND", # aol.com
    "But, your recipient never logged onto their free AIM Mail account.", # aim.com by AOL
    re.compile("554 delivery error\: dd.*cannot be delivered.*disabled or discontinued.*yahoo", re.I), # yahoo
    re.compile("554 delivery error\: dd This user doesn\'t have a.*yahoo", re.I), # yahoo
    "Requested action not taken: mailbox unavailable", # hotmail
    "550 unrouteable address", # freenet.de
    "sorry, that mailbox isn't in my list of allowed mailboxes", # cabanova.com
    "551 not our customer", # att.net
    "Addressee unknown", # sbcglobal.net
    "user not found", # mail.ru
    "invalid mailbox", # mail.ru
    "No such user.", # k.ro
    "DOESN'T EXIST", # k.ro
    "no such mailbox", # qmail
    "No Such User", # text
    "No Such mailbox", # text
    "Unknown user", # easynet, text
    "Unknown mailbox", # text
    "Invalid recipient", # text
    "Recipient unknown", # text
    "No such email", # text, apropo.ro
    "No such mail", # text
    "unknown recipient", # text
    "No such person at this address", # as.ro
    "#5.1.0 Address rejected", # text
    re.compile("55\d sorry, no mailbox", re.I), # text, qmail
    "invalid address", # text
    "User account is unavailable", # text
    "Recipient not found", # text
    "User account is unavailable", # text
    "does not exist", # text
    "No account by that name here", # text
    "Mailbox is inactive", # text
    "Nonexistent user", # text
    "no mailbox here by that name", # text
    "mail not found", # text
    "Mailbox disabled", # text
    "No such recipient", # text
    "5.1.1", # text - freemail.hu
    ]
   
 
class NoDeliveryStatusException(Exception):
    pass
 
class WrongDeliveryStatusException(Exception):
    pass
   
class BounceParser:   
    def __init__(self, raw_msg=None):
        self.matched_msg = None
        if raw_msg is not None:
            self.parse(raw_msg)
   
    def parse(self, raw_msg):
        self._parsed = False
       
        self.status = None
        self.diagnostic_message = None
        self.action = None
       
        self.msg = email.message_from_string(raw_msg)
        self.dsmsg = None
        for part in self.msg.get_payload():
            if type(part) is str:
                raise NoDeliveryStatusException("No message/delivery-status part found.")
            if part.get_content_type() == "message/delivery-status":
                self.dsmsg = part
                break
        if self.dsmsg is None:
            raise NoDeliveryStatusException("No message/delivery-status part found.")
       
        if not self.dsmsg.is_multipart():
            self.status = self.dsmsg.get("Status", None)
            self.diagnostic_message = self.dsmsg.get("Diagnostic-Code", None)
            self.action = self.dsmsg.get("Action", None)
        else:
            for part in self.dsmsg.get_payload():
                if part.has_key("Status"):
                    self.status = part.get("Status")
                if part.has_key("Diagnostic-Code"):
                    self.diagnostic_message = part.get("Diagnostic-Code", None)
                if part.has_key("Action"):
                    self.action = part.get("Action", None)
       
        if self.status is None:
            raise WrongDeliveryStatusException("No Status: found in message/delivery-status part.")
        if self.action is None:
            raise WrongDeliveryStatusException("No Action: found in message/delivery-status part.")
        if self.diagnostic_message is not None:
            self.diagnostic_message = self.diagnostic_message.replace("\r", "").replace("\t", " ").replace("\n", " ")
       
        self._parsed = True
    
    def isParsed(self):
        return self._parsed
 
    def isFailed(self):
        return self.action.lower() == "failed"
    
    def is5xx(self):
        return self.status.find("5.") == 0
   
    def is4xx(self):
        return self.status.find("4.") == 0
   
    def getDiagnosticMessage(self):
        return self.diagnostic_message
   
    def isNoUserFound(self):
        if not self.isFailed():
            return False
       
        if not self.is5xx():
            return False
       
        if self.status == "5.1.1":
            # @see <a href="http://rfc.sunsite.dk/rfc/rfc2034.html">http://rfc.sunsite.dk/rfc/rfc2034.html</a>
            # 5.1.1 is always no such user / mailbox
            return True
       
        if self.diagnostic_message is None:
            # Missing diagnostig message =&gt; no can do parse :D
            return False
           
        diagnostic_message = self.diagnostic_message.lower().strip()
        for m in NO_USER_FOUND_MSGS:
            if type(m) is str:
                if diagnostic_message.find(m.lower()) != -1:
                    self.matched_msg = m
                    return True
            else:
                if m.search(diagnostic_message):
                    return True
       
        return False
   
    def getAction(self):
        return self.action
       
    def getStatus(self):
        return self.status
       
    def getMatchedMsg(self):
        return self.matched_msg

Catalin Constantin in Shopping online | Niciun comentariu

Brico Interactive, in parteneriat cu Dazoot Software, lanseaza BricoMall.ro si BricoUtil.ro

bricomall
Brico Interactive, in parteneriat cu Dazoot Software, lanseaza BricoMall.ro si BricoUtil.ro, pentru a veni in intampinarea dorintelor clientilor sai, oferind tot ce au acestia nevoie in orice proiect de amenajare interioara sau exterioara.

100% dedicata comercializării produselor de bricolaj, constructii si din alte domenii adiacente, echipa Brico Interactive a decis sa adopte o platforma de shop online cat mai performanta si mai sigura pentru clientii sai, astfel incat oricine sa poata cauta si compara cu usurinta, sa se poata documenta si sa poata cumpara fără să se deplaseze din confortul casei sau al biroului.

Prezentand o gama larga de produse decorative, feronerie, utilaje pentru constructii, unelte si scule, inclusiv echipamente de masura si control, echipamente de protectie, dar si obiecte de uz general in gradina sau produse sanitare, in total aproximativ 10 000 de produse, BricoMall.ro pune la dispozitie si o serie de facilitati tuturor utilizatorilor sai, pentru obtinerea tuturor informatiilor necesare achizitionarii produselor de care clientii nostri au cu adevarat nevoie:

- functia de cautare a produselor este complexa, fiindu-i adaugat un modul de sugerare a termenilor;

- structurate pe categorii bine definite, produsele si modul de prezentate a acestora sugereaza eficienta, informare si simplitate;

- pentru cazurile in care utilizatorii sunt indecisi sau doresc sa obtina o imagine mai buna asupra performantelor anumitor produse, exista functia de comparare a acestora, astfel incat sa existe, intotdeauna, posibilitatea achizitionarii unui produs care sa indeplineasca toate conditiile cerute de client.

Prin varietatea de produse prezentate si numarul mare al acestora, orice client poate gasi in BricoMall.ro orice isi doreste. Clientii BricoMall.ro variaza de la simpli proprietari de apartamente, care incep un nou proiect de amenajare a propriei locuinte, si au nevoie de diferite produse din aceste domenii, pentru care BricoMall.ro ofera tot suportul necesar, fie specialisti in domeniul constructiilor, care gasesc in BricoMall.ro o modalitate ieftina si usoara de a isi achizitiona toate cele necesare lor.

Pentru completarea magazinului online BricoMall, a fost dezvoltat si blog-ul BricoUtil.ro, cu scopul prezentarii mai detaliate, testarii si chiar recomandarii pentru anumite sarcini a produselor comercializate de Brico Interactive.

In paralel, sunt prezentate saptamanal idei si solutii pentru cele mai ambitioase proiecte ale tale.

Cu atatea informatii din Gradinarit si Amenajari ecologice, Decoratiuni interioare, precum si din alte domenii asemanatoare, consultarea BricoUtil.ro este aproape mandatorie pentru oricine care incepe sau este in cursul de a desfasura un proiect de amenajari interioare sau exterioare.

Daca proiectul tau are nevoie de materiale sau utilaje, unelte sau decoratiuni, idei sau pareri, Brico Interactiva va ofera solutiile: la doar un click distanta, BricoMall.ro si BricoUtil.ro, magazin online si blog de produse de bricolaj.

Etichete: , ,
Pagina:12»