Documentation

  • Premiers pas

    Premiers pas

    Ce Que Vous Devez Savoir

    Critsend est un relais SMTP. Le service est simple à implémenter au sein de votre infrastructure.
    Nous allons plus loin que tous les autres en fournissant une vraie vision sur votre délivrabilité.
    Nous surveillons vos envois et vous fournissons des solutions à vos éventuels problèmes de délivrabilité.
    Nous allons d'importantes campagnes de newsletter, à l’email transactionnel.
    Nous refusons les spams, ceux ci sont monitorés par nos outils. Nous tolérons jusqu’à 10 Mo par email.
    Nos serveurs sont prévus pour conserver les connexions persistantes.
    Nous vous laissons la possibilité d’ajouter tout header commençant par un X-***.
    Nous traitons l’encodage à la volée de vos campagnes.

  • Tags

    Tags

    Ce Que Vous Devez Savoir

    You can add “Tags” to your emails, this will allow you to segment your sending, as for exemple separate an confirmation email from a registering email, or even men from women recipient…
    Si vous souhaitez mettre plusieurs tags, il vous suffit de les séparer par des virgules.
    Pour cela, vous avez deux possibilités:
        1. Ajouter un contenu à votre sujet de mail (Attention le contenu de votre sujet et du tag ne doit pas dépasser 254 caractères): Ajouter un [tag:xxxxxxx] à votre sujet , ex : Bienvenu [tag: register, homme]
        2. Ajouter un header a votre email , sous la forme d’un X-Tag: Ajouter un nouveau header à votre email: X-Tag: register, homme
    Notre système détectera alors vos tags, et les compilera pour vous, vous les retrouverez dans nos services: webhooks, log et analytics.

  • Configurer son SMTP

    Configurer son SMTP (Simple Mail Transfer Protocol)

    Ce Que Vous Devez Savoir

    Nos serveurs gèrent les connexions sécurisées sur le protocole smtp, vous avez donc le choix d’utiliser les ports suivants en fonction de vos infrastructures.
    Hôte: smtp.critsend.com
    Port: 25, 2525, 587
    Port sécurisé: 465
    Nous supportons le protocole ESMTP avec l’encription TLS. Vous pouvez vous connecter sur le port 25,587 et utiliser l’ESMTP en TLS ou le port sécurisé pour vos envois via SSL.
    Vous voyez c’est simple!
    Si vous souhaitez envoyez des emails, vous pouvez avoir accès à nos extraits de code (https://github.com/critsend/smtp-relay-snippets)

    ASP.net

    API d’envoi

    Téléchargez simplement notre connecteur .Net Connector: .Net Connector.
    Ou directement utilisez la version compilée: .Net compiled Connector

    Relais SMTP

    Voici un exemple de code, vous permettant d’utiliser nos services.
    MailMessage message = new MailMessage();
    message.From = new MailAddress("[email protected]");
    message.To.Add(new MailAddress("[email protected]"));
    message.To.Add(new MailAddress("[email protected]"));
    message.To.Add(new MailAddress("[email protected]"));
    message.Subject = "Subject goes here";
    message.Body = "The message goes here";
    SmtpClient client = new SmtpClient();
    client.Send(message);


    System.Net.Mail lira la configuration SMTP depuis le fichier « web.config ». Voici un exemple de configuration:

    <system.net>
    <mailSettings>
    <smtp from="[email protected]">
    <network host="smtp.critsend.com" port="587" userName="YourCritSendUsername"
    password="YourCritSendPassword" defaultCredentials="false" />
    </smtp>
    </mailSettings>
    </system.net>

  •     JAVA

    Configurer son SMTP

    Java

    API d’envoi
    Téléchargez simplement notre connecteur: Java Connector.
    Ou directement utilisez la version compilé .Net Compiled Connector.
    Voici un code d’exemple.

    /*
    * This class is just here for demo purposes.
    */
    package net.mxm.connector.test;

    import java.util.logging.Level;
    import java.util.logging.Logger;
    import net.mxm.connector.ArrayEmail;
    import net.mxm.connector.CampaignParameters;
    import net.mxm.connector.Content;
    import net.mxm.connector.Email;
    import net.mxm.connector.MxmConnect;
    import net.mxm.connector.MxmConnectConfigurationException;
    import net.mxm.connector.MxmConnectException;

    /**
    * @author nico toper
    * @date 2010-10-20
    */
    public class MxmTest extends Thread {
        public MxmConnect mxm = null;
        public int res[] = new int[20];
        public MxmTest() throws MxmConnectException {
        //mxm = new MxmConnect();
        for (int i = 0; i < res.length; i++) {
            res[i] = 0;
        }
    }

    @Override
    public void run() {
        for (int i = 0; i < 2000; i++) {
            try {
                try {
                    long fStart = System.currentTimeMillis();
                    this.sendEmail();
                    //System.out.println("Time for this mail: " + ( System.currentTimeMillis() - fStart) );
                    } catch (MxmConnectException ex) {
                        Logger.getLogger(MxmTest.class.getName()).log(Level.SEVERE, null, ex);
                    }
                } catch (MxmConnectConfigurationException ex) {
                    Logger.getLogger(MxmTest.class.getName()).log(Level.SEVERE, null, ex);
                }
        }
    }

    void testOthers() throws MxmConnectException, MxmConnectConfigurationException {
        MxmConnect mxm2 = new MxmConnect("", "");
        //  mxm2.createTag("test");
        // mxm2.createTag("test2");
        String[] t = mxm2.listAllTags();
        for (int i = 0; i < t.length; i++) {
            System.out.println(t[i]);
        }
        // System.out.println(mxm2.deleteTag("test2"));
    }

    private String makeRandom() {
        Double r = new Double(Math.random() * 1000000);
        return r.toString(r);
    }

    protected void sendEmail() throws MxmConnectConfigurationException, MxmConnectException {
        MxmConnect mxm2 = new MxmConnect("", "");
        //MxmConnect mxm2 = mxm ;
        // mxm2.setFastDelivery(true);
        CampaignParameters cp = new CampaignParameters();
        cp.setMailFrom("[email protected]");
        cp.setMailFromFriendly("FriendlyName");
        cp.setReplyTo(this.makeRandom());
        cp.setReplyToFiltered(false);
        String tags[] = { "test" };
        cp.setTags(tags);
        Content c = new Content();
        //c.setSubject(this.makeRandom());
        //c.setText(this.makeRandom());
        c.setSubject("Your Subject");
        c.setText("test");
        StringBuffer sb = new StringBuffer();
        String r = this.makeRandom();
        for (int i = 0; i < 2000; i++) {
            sb.append(r);
        }

        c.setHtml(sb.toString());
        Email e = new Email();
        e.setEmail("[email protected]");
        ArrayEmail ae = new ArrayEmail();
        ae.addEmail(e);
        String host = mxm2.getHost();
        System.out.println(host);
        System.out.println(mxm2.sendCampaign(c, cp, ae));
        //System.gc();
    }

    //This is the entry point for test.
    public static void main(String[] args) throws MxmConnectException, MxmConnectConfigurationException {
        //HeapMonitor h = new HeapMonitor();
        //h.start();
        for (int i = 0; i < 1; i++) {
            MxmTest mxm = new MxmTest();
            for (int j = 0; j < 100000; j++) {
                mxm.sendEmail();
                System.out.println("ok");
                for (int x = 0; x < mxm.res.length; x++) {
                    System.out.println(x + ": " + mxm.res[x]);
                }
            }
        }
    }

    Voici un autre exemple de code, vous permettant d’utiliser nos services SMTP:

    import java.io.*;
    import java.net.InetAddress;
    import java.util.Properties;
    import java.util.Date;
    import javax.mail.*;
    import javax.mail.internet.*;
    import com.sun.mail.smtp.*;

    public class Distribution {
        public static void main(String args[]) throws Exception {
            Properties props = System.getProperties();
            props.put("mail.smtps.host","smtp.critsend.com");
            props.put("mail.smtps.auth","true");
            Session session = Session.getInstance(props, null);
            Message msg = new MimeMessage(session);
            msg.setFrom(new InternetAddress("[email protected]"));
            msg.setRecipients(Message.RecipientType.TO,InternetAddress.parse("[email protected]", false));
            msg.setSubject("Your subject here "+System.currentTimeMillis());
            msg.setText("Your content here");
            msg.setHeader("X-Mailer", "Header");
            msg.setSentDate(new Date());
            SMTPTransport t = (SMTPTransport)session.getTransport("smtps");
            t.connect("smtp.critsend.com", "YourCritSendUsername", "YourCritSendPassword");
            t.sendMessage(msg, msg.getAllRecipients());
            System.out.println("Response: " + t.getLastServerResponse());
            t.close();
        }
    }
  •     PHP

    Configurer son SMTP

    PHP

    API d’envoi
    Téléchargez simplement notre connecteur: PHP Connector.
    Voici un code d’exemple.

    $content = array('subject'=> 'My subject', 'html'=> 'my html' , 'text' =>'my test');
    $param = array('tag'=>array('invoice1'), 'mailfrom'=> '[email protected]', 'mailfrom_friendly'=> 'Nicolas Toper', 'replyto'=>'[email protected]', 'replyto_filtered'=> 'true');
    $emails[0] = array('email'=>'[email protected]', 'field1'=> 'test');

    try {
        echo $j;
        print_r($mxm->sendCampaign($content, $param, $emails));
    } catch (MxmException $e) {
        echo $e->getMessage();
    }
  •     Python

    Configurer son SMTP

    Python

    API d’envoi
    Vous pouvez simplement télécharger notre connecteur Python: Python Connector.
    Relais SMTP
    Voici un code d’exemple.

    import smtplib

    #your critsend's credentials
    critsend_user = 'YOUR CRITSEND USERNAME'
    critsend_password = 'YOUR CRITSEND PASSWORD'

    sender = "YOUR NAME "
    recipients = ['RECIPIENT EMAIL']
    subject = "My subject"content = """My email message"""

    message = ("From: %s\r\nTo: %s\r\nSubject: %s\r\n%s" % (sender, ", ".join(recipients), subject, content))

    try:
        server = smtplib.SMTP("smtp.critsend.com", 587)
        server.ehlo()
        server.starttls()
        server.ehlo
        server.login(critsend_user, critsend_password)
        server.sendmail(sender, recipients, message)
        print "Successfully sent email"
    except SMTPException:
        print "Error: unable to send email"
  •     Ruby

    Configurer son SMTP

    Ruby

    API d’envoi
    Veuillez télécharger notre connecteur: http://rubygems.org/gems/MxmConnect
  •     Relais SMTP

    Configurer son SMTP

    Relais SMTP

    Voici un autre exemple de code, vous permettant d’utiliser nos services SMTP.

    #Put in a file like config/initializers/critsend.rb

    ActionMailer::Base.smtp_settings = {
        :address => "smtp.critsend.com",
        :port => 587,
        :authentication => :plain,
        :user_name => "YOUR_CRITSEND_USERNAME",
        :password => "YOUR_CRITSEND_PASSWORD",
        :enable_starttls_auto => false
    }

    ActionMailer::Base.delivery_method = :smtp
  • Configuration de votre domaine

    Configuration de votre domaine

    Configuration DKIM

    Configurer votre DKIM est très important, c’est une sécurité d’envoi pour vos emails, nous les signons pour vous dans notre système. Cela permet aux FAIs de vous reconnaître et garantir une réputation sur vos envois.
    Supposons que vous utilisiez 'example.com' en tant que domaine.

    1) Commencez par ajouter un enregistrement CNAME avec le nom et la valeur suivants.
    Adresse, Nom ou Hôte: critsend2._domainkey.example.com
    Valeur: dkim.critsend.com.
    Veuillez noter que votre nom de domaine peut parfois être ajouté automatiquement à ce champ. Dans ce cas, vous devrez supprimer 'example.com' dans le champ d'adresse.
    Si votre hébergeur ne vous permet pas de faire un CNAME , vous pouvez ajouter un champ TXT de la même manière mais avec une valeur:
    Adresse, Nom ou Hôte: critsend2._domainkey.example.com
    Value: k=rsa\; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCvEpIr9ILg7iXsdMlMst5sCK+MDc4GQDaZDmgLLHHVNn952Jh4zmB1Qp+fBSUzVfcU/qW4hicOMJKRe0bo8nIB/Gvh3CtJuyAFizXCUjDtn2V4t5rg2OEpVkEXHkwUoW43Z5753Q62flW2wb3zuEqoO5fWLUt4rcIqatE+O8zmSwIDAQAB

    2) Dans votre compte Critsend, accédez à 'Compte -> Paramètres de messagerie' et recherchez la ligne 'Signed-by Domain'.

    La valeur correspondante sera utilisée par les fournisseurs d'email pour vérifier un enregistrement DKIM approprié. Par exemple, si vous avez utilisé 'example.com' à l'étape 1, vous devez entrer 'example.com' dans ce champ.
    Avertissement: La procédure de vérification DKIM de Hotmail nécessite que le domaine d'adresse 'Expéditeur' soit le même que le domaine de signature DKIM. Donc, si votre domaine de signature est 'example.com', votre adresse 'Expéditeur' devrait ressembler à '[email protected]'.
    Si vous n'avez pas encore configuré votre SPF, nous vous recommandons de le faire immédiatement.

    3) Testez vos paramètres

    Une fois que vous avez configuré votre DKIM, vous pouvez le tester ici. Use 'critsend2' as Selector and your own domain name as Domain Name (Wait 4 hours for DNS propagation though.)

  •     Configuration DKIM

    Configuration de votre domaine

    Configuration DKIM

    Configurer votre DKIM est très important, c’est une sécurité d’envoi pour vos emails, nous les signons pour vous dans notre système. Cela permet aux FAIs de vous reconnaître et garantir une réputation sur vos envois.
    Supposons que vous utilisiez 'example.com' en tant que domaine.

    1) Commencez par ajouter un enregistrement CNAME avec le nom et la valeur suivants.
    Adresse, Nom ou Hôte: critsend2._domainkey.example.com
    Valeur: DKIM.critsend.com
    Veuillez noter que votre nom de domaine peut parfois être ajouté automatiquement à ce champ. Dans ce cas, vous devrez supprimer 'example.com' dans le champ d'adresse.
    Si votre hébergeur ne vous permet pas de faire un CNAME , vous pouvez ajouter un champ TXT de la même manière mais avec une valeur:
    Adresse, Nom ou Hôte: critsend2._domainkey.example.com
    Value: k=rsa\; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCvEpIr9ILg7iXsdMlMst5sCK+MDc4GQDaZDmgLLHHVNn952Jh4zmB1Qp+fBSUzVfcU/qW4hicOMJKRe0bo8nIB/Gvh3CtJuyAFizXCUjDtn2V4t5rg2OEpVkEXHkwUoW43Z5753Q62flW2wb3zuEqoO5fWLUt4rcIqatE+O8zmSwIDAQAB

    2) Dans votre compte Critsend, accédez à 'Compte -> Paramètres de messagerie' et recherchez la ligne 'Signed-by Domain'.

    La valeur correspondante sera utilisée par les fournisseurs d'email pour vérifier un enregistrement DKIM approprié. Par exemple, si vous avez utilisé 'example.com' à l'étape 1, vous devez entrer 'example.com' dans ce champ.
    Avertissement: La procédure de vérification DKIM de Hotmail nécessite que le domaine d'adresse 'Expéditeur' soit le même que le domaine de signature DKIM. Donc, si votre domaine de signature est 'example.com', votre adresse 'Expéditeur' devrait ressembler à '[email protected]'.
    Si vous n'avez pas encore configuré votre SPF, nous vous recommandons de le faire immédiatement.

    3) Testez vos paramètres

    Une fois que vous avez configuré votre DKIM, vous pouvez le tester ici. Use 'critsend2' as Selector and your own domain name as Domain Name (Wait 4 hours for DNS propagation though.)

  •     Configuration SPF

    Configuration de votre domaine

    Configuration SPF

    Ajouter la sécurité SPF dans vos DNS permet d’informer les FAIs que Critsend est autorisé à envoyer des emails pour votre compte. Cette opération est en deux étapes qui ne prendra pas beaucoup de temps.
    Supposons que vous utilisiez 'example.com' en tant que domaine.

    1) Ajoutez l'enregistrement TXT suivant à votre domaine: Adresse, Nom ou Hôte: example.com
    Valeur TXT: v=spf1 mx include:messaging-master.com ~all
    Si vous avez déjà des enregistrements SPF configurés pour votre domaine, ajoutez simplement: 'include: messaging-master.com' à votre entrée existante.

    2) Dans votre compte Critsend, allez dans 'Compte -> Paramètres de messagerie' et trouvez la ligne 'On Behalf of Addresses'..
    Entrez une adresse e-mail par défaut du domaine que vous venez de mettre à jour à l'étape 1, par exemple '[email protected]'. Important: Vous pouvez avoir plusieurs domaines dans ce champ, mais vous ne pouvez ajouter qu'une seule adresse au nom de domaine. Séparez chaque adresse de différents domaines avec une virgule.
    Notez également que ce n'est pas la même chose que votre adresse Mail-From: ou From: et que cela n'a aucune incidence sur votre adresse Mail-From: ou From: de quelque manière que ce soit. Il ne sera utilisé par les fournisseurs d'email pour vérifier un enregistrement SPF TXT approprié.

    3) Testez vos paramètres
    Une fois que vous avez configuré votre SPF, vous pouvez tester votre domaine ici. Lorsque vous cliquez sur 'Get SPF record', vous devriez voir 'messaging-master.com' dans les résultats. (Attendez 4 heures pour la propagation DNS.)

  • Envoyer des emails

    Envoyer des emails

    Avec Python:

    import smtplib
    server = smtplib.SMTP('smtp.critsend.com')
    server.login(‘MYLOGIN’, MyPass) server.sendmail(‘[email protected]’, ‘[email protected]’, ‘Hello there’)
  •     Envoi à l'échelle

    Envoyer des emails

    Envoi à l'échelle

    CritSend peut recevoir plus de 3 millions de courriels par heure. Nous pouvons augmenter ou diminuer cette capacité aussi rapidement que nécessaire car notre système est entièrement distribué et réparti partout dans le monde. Nous sommes en mesure d'envoyer vos courriels dans les deux minutes à condition que votre réputation auprès des FAI soit suffisante.
    Si vous voulez envoyer à l'échelle et rapide, voici quelques conseils:
    SMTP est très verbeux et lent. C'est parce que le protocole nécessite beaucoup d'allers-retours entre le client et le serveur. Pour accélérer les choses, la solution évidente et efficace consiste à utiliser le multithreading et le multitraitement.
    Idéalement, essayez de frapper un serveur différent à chaque fois (en résolvant encore et encore 'smtp.critsend.com', soyez prudent - certains frameworks le mettront en cache et se résoudront sur les mêmes serveurs).
    Réutiliser les connexions si possible pour éviter un aller-retour pour l'authentification.
    Parfois, la préparation de courriels à envoyer (par exemple, générer du contenu, encodage) peut prendre un certain temps. Cela aide à les préparer bien à l'avance avant d'envoyer.
    N'hésitez pas à nous contacter sur [email protected] si vous avez besoin d'aide.

  • Statistiques et Big Data

    Statistiques et Big Data

    Nous recueillons des statistiques sur vos livraisons auxquelles vous pouvez accéder à tout moment:
    Analytique https://account.critsend.com/analytics/delivery vous présente une vue agrégée de vos statistiques. Cela vous permet de repérer et de résoudre tous les problèmes.
    Log https://account.critsend.com/logs/index are a detailed view of your deliveries. If you pass us a X-uid or some tags, we will put them here. We keep data for 15 days.
    L'API Webhooks est la même que le Log, sauf que nous envoyons toutes ces données dans une requête HTTP. https://account.critsend.com/delivery/event_api
    Voici la liste complète des événements que nous suivons avec leur définition.
    Nous suivons tous les événements en:
    Destinataire de votre email
    FAI: Domaine de votre destinataire. Par exemple, notre domaine d'entreprise est mxmtech.
    Délai de livraison: Nous notons chaque email entrant.
    Nom d'hôte: Le nom de la machine qui a livré votre email.
    X-UID: Il s'agit de toute chaîne de caractères (<755 caractères) que vous avez transmise dans vos e-mails sous la forme d'un en-tête X-UID.
    Tags: Passed in X-Tags (or in [Tags:…] in the subjet. It’s a comma separated lists.
    String Supplémentaire: C'est là que nous mettons des informations supplémentaires telles que le code d'erreur SMTP et le message.
    Les événements que nous suivons:
    Ouverture: Nous enregistrons toutes les ouvertures atomiques, seulement lorsqu'un utilisateur affiche les images. Habituellement, nous enregistrons moins ouvert que notre concurrence, en raison de nos systèmes étant configurés pour enregistrer l'ouverture une fois la requête terminée.
    Rapport de spam: Se produit quand un abonné marque votre email comme spam, auquel cas nous l'ajoutons à notre base de données de suppression. Nous sommes avertis quand cela arrive avec Outlook, Yahoo (si vous nous avez demandé d'authentifier votre DKIM), AOL et tous les FBL exploités par Return Path.
    Bounce: Quand un email a été refusé, nous essayons de le renvoyer jusqu'à 12 heures. Tous les codes d'erreur sont enregistrés pendant cet événement avec la réponse du serveur SMTP. Le code d'erreur SMTP est de 4XX qui indique généralement des erreurs temporaires.
    Échec permanent: Se produit lorsque nous savons que le code SMTP est de la forme 5XX. Nous ne signalons pas à cette étape, les adresses sont des adresses invalides.
    Envoyé: Nous avons envoyé l'email au serveur SMTP.
    Filtré: L'email est dans notre base de données de suppression (todo put link) et nous l'avons filtré. L'email n'a pas été envoyé.
    Bloqué: Le serveur SMTP a rejeté l'e-mail. Habituellement, cela arrive parce que l'IP est sur la liste noire ou parce que le contenu est vu comme spam. Lorsque vous verrez cet événement, vous pouvez nous contacter à l'adresse [email protected] pour des explications supplémentaires. # Email envoyé à spambox.
    Reçu: Cet événement signifie que nous avons reçu une demande d'envoi de votre part.
    Erreur: Nous n'avons pas pu livrer votre email. Parce que nous aimons la transparence, vous verrez la piletrace Python. Si vous les voyez, s'il vous plaît contactez-nous car c'est très rare.
    Clic: Le destinataire a cliqué sur votre email. Le string supplémentaire contiendra le lien cliqué.
    DT_ATOMIC_OPEN = 24 => Premier événement d'ouverture
    #Isp accepted with response code
    DT_ISP_ACCEPTED = 29 => Confirmation d'acceptation du FAI (avec information)
    #Isp deferred code
    DT_ISP_DEFERRED = 30 => Email différé par FAI
    #Temp new arrival replace code 12 using on production
    DT_ARRIVED = 31 => Critsend confirmation d'entrée

  • Base de données de suppression

    Base de données de suppression

    Lorsqu'un utilisateur signale que votre courrier électronique est un spam, qu'il se désinscrit ou que l'e-mail rebondit trop de fois, nous l'ajoutons à notre liste de suppression. De cette façon, vous n'avez rien à faire. Les prochaines livraisons par e-mail seront considérées comme filtrées dans vos analyses.
    Voici une description des cas spécifiques où nous ajouterons une adresse à cette liste:
    L'utilisateur marque votre adresse e-mail comme spam: Nous sommes notifiés par les FAI.
    Nous le marquons comme tel dans notre DB de suppression.
    Ces utilisateurs sont automatiquement filtrés.
    Utilisateur désinscrit: lorsque l'utilisateur se désinscrit de vos livraisons, il est automatiquement ajouté à cette base de données.
    L'adresse électronique est mis en liste blacklist: Nous pouvons mettre un e-mail à votre disposition suite à une réclamation que nous avons reçue ou un e-mail que vous avez ajouté.
    Email refusé: Quand un email est refusé, nous l'ajoutons à un pool partagé d'adresses refusées. Ces adresses resteront pendant 6 mois et seront ensuite supprimées au hasard. Nous attendons des retours réguliers pendant trois semaines et pas de livraison réussie. Cette partie est au-dessus de l'état de l'art. Nous avons mené quelques études et découvert qu'il offre une meilleure délivrabilité pour nos clients.
    Par défaut, le tag est activé par compte. Si vous utilisez le tag, vous pouvez activer une option permettant de filtrer ces e-mails par tag plutôt que par compte..
    Vous pouvez vérifier le statut d'une adresse donnée ici https://account.critsend.com/delivery/filters, et vous pouvez supprimer / ajouter cette adresse.

  • Délivrabilité

    Délivrabilité

    La délivrabilité est l'action de s'assurer que vos emails se retrouvent dans une boîte de réception. Nous surveillons vos livraisons à la volée en dupliquant une partie du contenu à certaines de nos adresses de test (cela s'appelle l'adresse de semence, l'algorithme exact fait partie de notre sauce secrète). Lorsque nous détectons qu'un flux spécifique arrive en spambox, nous vous contactons habituellement (parfois nous ne le faisons pas si nous pensons que les choses reviendront à la normale par eux-mêmes, en cas de doute, contactez nous, nous aimons interagir avec nos clients).
    Habituellement, un atterrissage de spam a trois sources:
    Réputation IP: Cela arrive encore, même si cela devient de moins en moins important ces derniers temps. Lorsqu'une adresse IP spécifique envoie un spam, certains serveurs SMTP bloquent la source du spam au niveau IP. Les listes de blocage sont les mêmes. Habituellement, nous sommes informés d'un tel problème, mais vous pouvez nous contacter à [email protected]. Nous avons des outils à nos côtés pour détecter les blocs et agir sur eux. Si vous utilisez un cluster dédié, indiquez-nous si vous souhaitez en bénéficier.
    Contenu: Pour certaines raisons, votre email déclenchera un filtre anti-spam. Par exemple, si vous êtes une pharmacie légitime envoyant un ordre de réception de Viagra du Nigeria, vous aurez du mal à vous poser dans la boîte de réception.
    Rapport de spam: Lorsque trop d'utilisateurs (&gt; 0,1%) signalent votre adresse e-mail comme spam, vos livraisons seront envoyées dans le courrier indésirable. Habituellement, les filtres anti-spam utilisent un élément de votre livraison et l'ajoutent à leur liste de blocage.

  •     Event API

    Event API

    Overview
    The Event API allows users to setup web services to receive event notifications about their emails and their recipients from CritSend.
    You can enable the Event API by specifying a target URL in the ‘Event API’ section under the ‘Mail Settings’ tab. In the same section, you will be able to choose which categories you wish to enable (see the categories below).
    A HTTP POST will be issued to the URL you’ve specified at a fixed interval (e.g. 5 minutes) with all the events we received in the meantime. The POST request payload describes the collection of events using the Webhooks model, and consists of a UTF8-encoded JSON array of JSON objects (events) in the following format:
    [{
    "category": "hard_bounce",
    "date": "2011-09-02T14:39:53",
    "recipient": "[email protected]",
    "mx": "example.com",
    "tags": ["default", "tag1"],
    "uid": "CC27F483098347ECB693EC7A1CAF45E9"
    },
    {
    "category": "blocked",
    "date": "2011-09-02T14:55:53",
    "recipient": "[email protected]",
    "mx": "example.com",
    "tags": ["default", "tag2"],
    "uid": "A5DA637119D041BABAE316D3E908FF0A"
    },
    ... ]


    While we will make a best effort to promptly deliver all Webhooks events, messages may not arrive in order of commit. If we fail to reach the specified URL, we will retry several times over a 7-days period. This allows your services to be down for short maintenance windows and still receive all messages. Web services should respond to the POST request with a 2XX response code to indicate successful delivery. Redirects (3XX response codes) are not followed, and no further delivery attempts will be made. Server errors (5xx response codes) are treated as failures and will be retried. All other response codes will be ignored.

    Event API format
    The payload’s event JSON object contains the following items:
    The list of event categories is:

    • open: When the recipient opens an email. Counted only for HTML emails and image-view-enabled recipients.
    • click: When the recipient clicks a link in your email.
    • unsubscribed: When the recipient unsubscribed from your email traffic.
    • bounce: When we receive a bounce (either soft or hard) for an email. Future emails to that address *will be* delivered.
    • hard_bounce: Deprecated in favour of ‘bounce’.
    • soft_bounce: Deprecated in favour of ‘bounce’.
    • blocked: When we receive a notification from a recipient’s servers that an email of yours has been blocked for spam or content reasons. Future emails to that address *will be* delivered.
    • spam_report: When a user has reported an email of yours as Spam to an ISP within our Feedback Loop. Future emails to that address will *not* be delivered.
    • filtered: When we filter an email of yours and it is not sent out (due to various reasons, for example; we have received too many permanent failures for the address or it has been unsubscribed or it has sent a spam report etc).
    • error: When there is an email’s structure or other internal error.
    • new_failed_address: When we filter an email address after receiving too many permanent failures for it. Future emails to that address will *not* be delivered.
    • filtered_address: Deprecated in favour of ‘new_failed_address’
    • blacklisted_address: When a user blacklists an address from here. Future emails to that address will *not* be delivered.
    • unblacklisted_address: When a user removes an address from their blacklist. Future emails to that address *will be* delivered.
    • freed_address: When we remove an email address during our periodic failed addresses’ assessment and cleanup procedure (failed addresses are those we have received too many permanent failures for). Future emails to that address *will be* delivered.
    Note 1: The event’s JSON representation fields should not be considered as fixed. Later on, new JSON fields may be added.
    Note 2: All deprecated events will stop being sent by 1st March 2013. Until then, we will send both the old (deprecated) and the new events.
    Errors: If there are errors decoding your tags or other you have returned you will recieve the following error in the form of JSON:
    [{
    "error": "Invalid Character",
    },
    ... ]


    Authentication
    You will find your unique Webhooks ‘secret key’, in the ‘Event API’ section under the ‘Mail Settings’ tab. This key is used to seed the HMAC-SHA256 algorithm. Each POST request contains header called X-Critsend-Webhooks-Signature used to authenticate the payload. This header’s value is a 64-character hexadecimal string. To verify the Webhook request is originating from CritSend you encode the payload with the HMAC-SHA256 algorithm (using your Webhooks ‘secret key’ as a key and SHA256 digest mode) and compare the resulting hexdigest to the X-Critsend-Webhooks-Signature header’s value (signature).

    Authentication in Python
    import hmac, hashlib
    def is_authenticated(your_webhooks_key, your_request_json_payload, x_critsend_webhooks_signature):
        my_signature = hmac.new(key=your_webhooks_key, msg=your_request_json_payload, digestmod=hashlib.sha256).hexdigest()
        return x_critsend_webhooks_signature == my_signature


    Authentication in PHP:
    function is_authenticated($your_webhooks_key, $your_request_json_payload, $x_critsend_webhooks_signature) {
        $my_signature = hash_hmac("sha256", $your_request_json_payload, $your_webhooks_key);
        return $x_critsend_webhooks_signature == $my_signature;
    }


    Example in PHP:
    $our_webhooks_key = "xxxxxxxxxxxxxxx";
    $critsend_signature = $_SERVER["HTTP_X_CRITSEND_WEBHOOKS_SIGNATURE"];
    $json_payload = file_get_contents('php://input');
    # Check if payload is valid
    if($critsend_signature != hash_hmac("sha256", $json_payload, $our_webhooks_key)) {
        throw exception("Invalid payload according to our webhooks key");
    }
    $events = json_decode($json_payload);
    foreach($events as $event) {
        switch($event["category"]) {
            case "open":
                event_open($event);
                break;
            case "click":
                event_click($event);
                break;
            case "unsubscribed":             event_unsubscribe($event);
                break;
            case "hard_bounce":
                event_hard_bounce($event);
                break;
            case "soft_bounce":
                event_soft_bounce($event);
                break;
            case "blocked":
                event_blocked($event);
                break;
            case "spam_report":
                event_spam_report($event);
                break;
            case "filtered":
                event_filtered($event);
                break;
            case "error":
                event_error($event);
                break;
            default:
                throw exception("Invalid category");
            }
    }