Contourner le filtre de spam de Gmail (courriers envoyés avec PHP depuis un hôte partagé)

TL;DR: les Mails envoyés depuis un hébergement partagé (comme un domaine pas cher de Unoeuro ou One.com) finissez dans le spam. Comment réparer?


j'ai créé un système de courrier électronique, qui a d'abord généré un fichier PDF (en utilisant FPDF), après quoi il a envoyé le fichier PDF en pièce jointe avec le Swiftmailer de PHP. Cet e-mail a été envoyé à 130 personnes (un " de la facture). Mais il a atterri dans le filtre de spam pour presque tout le monde. J'ai essayé D'ajuster SwiftMailers l'en-tête paramètres, mais sans succès. Même les mails que je n'avais pas envoyés auparavant (testé minutieusement). C'était ma première installation:

function sendMailEt($toEmail, $toName, $invoiceNumber){

require_once('includes/lib/swift_required.php');

$transport = Swift_SmtpTransport::newInstance('mailout.one.com', 25)
  ->setUsername('EMAIL-ACCOUNT1@THE-DOMAIN.DK')
  ->setPassword('THE-PASSWORD')
  ;    

$mailer = Swift_Mailer::newInstance($transport);

$message = Swift_Message::newInstance('FROM COMPANY')
      ->setSubject('Thanks for signing up - COMPANY')
  ->setFrom(array('EMAIL-ACCOUNT1@THE-DOMAIN.DK' => 'Company name'))
  ->setTo(array($toEmail => $toName))
      ->setBody('A brief body, that explains that this is an invoice and that it has to be paid within 5 days. (written in danish)')
      ->addPart('A brief body, that explains that this is an invoice and that it has to be paid within 5 days. (written in danish)', 'text/html')

   ->attach(Swift_Attachment::fromPath('/URL-TO-THE-PDF-FILE.pdf'))
  ;

$result = $mailer->send($message);
}

j'ai aussi essayé d'envoyer les e-mails avec le natif de PHP mail()-fonction, et puis tout simplement lien à la facture (http://www.company-domain-name.dk/invoice/base64_encoded-name.pdf)... Même résultat (spam).

j'ai essayé d'écrire toute l'en-tête moi-même. J'ai lu un grand nombre de forums sur ce que les en-têtes devraient inclure, mais ils ont tous écrit des choses différentes. J'ai donc essayé un peu différent des choses (à la fois des e-mails que j'avais envoyés auparavant et des e-mails que je n'avais pas)... Même résultat (spam).

puis j'ai essayé d'écrire l'en-tête exactement comme MailChimps le fait, dans leur en-tête. Ce qui m'a conduit à ceci:

 $headers = "Reply-To: Company name <UNUSED-EMAIL-ACCOUNT-FROM-DOMAIN@DOMAIN-NAME.DK>rn"; 
 $headers .= "Return-Path: Company name <UNUSED-EMAIL-ACCOUNT-FROM-DOMAIN@DOMAIN-NAME.DK>rn"; 
 $headers .= "From: Message from Company name <UNUSED-EMAIL-ACCOUNT-FROM-DOMAIN@DOMAIN-NAME.DK>rn"; 
 $headers .= "MIME-Version: 1.0rn";
 $headers .= "Sender: Message from Company name <UNUSED-EMAIL-ACCOUNT-FROM-DOMAIN@DOMAIN-NAME.DK>rn";
 $headers .= "Content-type: text/plain; charset="utf-8"; rn";
 $headers .= "X-Mailer: PHP". phpversion() ."rn";

Et puis j'ai envoyer le mail comme ceci:

mail($toName . '<'.$toEmail.'>', utf8_decode('Faktura på depositumet'), utf8_decode($someMessage), $headers);

... Même résultat (spam).

L'espace est avec One.com, donc je ne peux pas utiliser PHPmailer (puisque cela doit être installé, et cela ne peut pas être fait sur one.com ' s serveurs). Et Je Je ne peux pas définir un FPS avec One.com.

Tout ce que je veux, c'est pouvoir envoyer des e-mails qui ne vont pas au spam.

Voici mes questions:

  1. est-ce parce que mon en-tête est éteint, ou est-ce quelque chose de plus profond?

  2. est-ce que le filtre Gmail-spam bannit les comptes de messagerie uniques (tels que this@example.com) ou interdit-il des domaines entiers (tels que @example.com)?

  3. peut-on obtenir un courriel sur la liste noire dans la liste blanche en quelque sorte?

* ajout 1 *

Ok... Maintenant, j'ai essayé un certain nombre de choses:

  • j'ai essayé d'ajouter le chemin de retour de LoneWolfPR, comme recommandé, et cela n'a pas aidé.
  • j'ai contacté One.com (la société d'accueil), et confirmé avec eux, qu'il n'est pas possible de fixer un SPF-record ou un DKIM-record. Il n'est pas encore.
  • j'ai envisagé de mettre en place un lien "désinscription", avec un lien vers un site Web avec un formulaire, mais je n'ai pas cru cette approche. Je veux dire - les factures sont envoyées tout le temps, avec des e-mails. Et pourquoi devriez-vous être en mesure de vous désabonner d'une facture?! Puisque cela a fait si loin de sens dans ma tête, alors je l'ai essayé seulement pendant environ 20 minutes (évidemment, sans résultats).

Voici mon en-tête de courriel actuel (obtenu de Gmail, en cliquant sur le 'View original'):

Delivered-To: NEWLY-CREATED-GMAIL-ACCOUNT@gmail.com
Received: by 10.76.75.104 with SMTP id b8csp48728oaw;
        Sat, 16 Mar 2013 17:32:56 -0700 (PDT)
X-Received: by 10.152.116.45 with SMTP id jt13mr7897860lab.0.1363480376067;
        Sat, 16 Mar 2013 17:32:56 -0700 (PDT)
Return-Path: <XXX111@DOMAIN-NAME.dk>
Received: from mail-out2.b-one.net (mail-out2.one.com. [91.198.169.19])
        by mx.google.com with ESMTP id p10si4637427lbb.120.2013.03.16.17.32.55;
        Sat, 16 Mar 2013 17:32:55 -0700 (PDT)
Received-SPF: neutral (google.com: 91.198.169.19 is neither permitted nor denied by best guess record for domain of XXX111@DOMAIN-NAME.dk) client-ip=91.198.169.19;
Authentication-Results: mx.google.com;
       spf=neutral (google.com: 91.198.169.19 is neither permitted nor denied by best guess record for domain of XXX111@DOMAIN-NAME.dk) smtp.mail=XXX111@DOMAIN-NAME.dk
Date: Sat, 16 Mar 2013 17:32:55 -0700 (PDT)
Message-Id: <51450f37.6a0b700a.6239.5dbcSMTPIN_ADDED_MISSING@mx.google.com>
Received: from localhost.localdomain (srv18.one.com [193.202.110.18])
    by mail-out2.b-one.net (Postfix) with ESMTP id F3D0B10365
    for <NEWLY-CREATED-GMAIL-ACCOUNT@gmail.com>; Sun, 17 Mar 2013 01:32:53 +0100 (CET)
Received: from 85.218.159.219 by www.DOMAIN-NAME.dk via URL_TO_THE_SCRIPT.php with HTTP; Sun, 17 Mar 2013 00:32:53 +0000
To: RECIEVERS_NAME <NEWLY-CREATED-GMAIL-ACCOUNT@gmail.com>
Subject: EMAIL-SUBJECT
X-PHP-Originating-Script: 87486:NAME-OF-THE-SCRIPT-THE-E-MAIL-WAS-SENT-FROM.php
Reply-To: COMPANY NAME <XXX111@DOMAIN-NAME.dk>
From: Besked fra COMPANY NAME <XXX111@DOMAIN-NAME.dk>
MIME-Version: 1.0
Sender: Besked fra COMPANY NAME <XXX111@DOMAIN-NAME.dk>
Content-type: text/plain; charset="utf-8"; 
X-Mailer: PHP5.3.21
15
demandé sur Zeth 2013-03-07 18:46:16

5 réponses

1) normalement une adresse email ne va pas facilement dans une liste noire, il faut du temps et/ou beaucoup de gens pour vous étiqueter en tant que spammer pour réellement obtenir cette adresse dans une liste noire.

2) Oui. Un nom de domaine entier peut être mis sur liste noire, parce que les spammeurs génèrent normalement des adresses e-mail aléatoires comme f4j3ifl@something.com.

3) peu importe combien de fois il est allé au spambox, fondamentalement, les filtres de spam de nos jours sont forts, parce que les spammeurs essaient d'améliorer leurs façons pour se déplacer jour après jour, de sorte que les filtres devient plus strict chaque jour. Si elle va dans le dossier de spam première fois, et l'utilisateur ne l'a pas réellement mis dans la boîte de spam, il va continuer à aller à moins que les utilisateurs détachent, ou vous réparez les troubles.

Comment éviter le spambox?

fondamentalement, vous avez besoin de quelques signatures, et beaucoup d'accès à vos enregistrements DNS, parce qu'il y a là où nous allons faire la plupart des configurations.

  • Reverse DNS Lookup: sur des serveurs dédiés ou même sur certains VPS vous êtes en mesure de configurer un enregistrement DNS inverse, parfois vous ouvrez juste un ticket et le Il est configuré pour vous. Si vous ne pouvez pas l'avoir, changez votre hébergement ou continuez à être étiqueté comme spammer xD. Ceci est pour prévenir les contrefaçons de l'en-tête, car vous pouvez définir sur vos en-têtes que votre e-mail vient de gmail.com mais ce n'est pas comme ça que les serveurs de messagerie le vérifient.

  • SPF est un must aussi bien si vous vous ne pouvez pas définir un SPF alors n'essayez même pas plus loin, envisager de changer votre hébergement, et vous pouvez presque arrêter de lire ici xD.

  • DKIM / Domain Key: de préférence DKIM, est une signature cryptée, vous mettez la clé publique sur le DNS, et stockez une clé privée dans votre serveur de messagerie, quand un serveur reçoit un e-mail, il a la clé privée attachée dans les en-têtes (vous avez besoin d'un logiciel de serveur de messagerie qui gère DKIM, pour windows par exemple, il a fonctionné pour moi hmailserver) et le service de courrier (gmail par exemple) vérifiera votre enregistrement dns pour voir si la clé publique correspond. C'est presque un must ont ainsi


ces trois-là étaient les bases, Si vous mettez en place DMARC et ADSP il vous permettra de mieux marquer pour les SpamAssassins. Pour obtenir un score encore mieux la recherche de quelques listes de mots clés spam sur google et essayer de les éviter, certains trucs comme Commencer un e-mail avec "Dear xxx" sont nocif pour votre score, configurer l'association de système(même si c'est de la merde, tant que vous fournissez un lien clair) va vous aider un peu.

Aussi:

  • Éviter bâclée html et texte blanc sur (tout) différents, certains spammeurs utilisent pour tenir dans le texte caché, ces filtres sont plus intelligents que vous le pensez.

  • Lire les recommandations spécifiques. La plupart des services de messagerie électronique ont une FAQ ou quelque chose dans leur site Web avec quelques conseils pour vous aider envoyer des emails et ne pas aller dans la camelote. sur certains d'entre eux, vous pouvez même postuler pour obtenir dans une liste blanche ( au moins il ya quelques années, sur certains services comme gmail ils ne le font plus)

  • si vous envoyez en vrac, surveillez l'heure! Si vous avez X emails par seconde envoyé dans quelque part, vous êtes susceptible d'entrer dans la liste noire, configurer un script ou quelque chose pour obtenir un délai 1sec ou ainsi, le retard pourrait dépendre du destinataire pour entrer dans la liste noire ou pas.


J'espère que ces conseils vous aider, j'ai dû faire face à certains filtres anti-spam récemment et c'est une douleur dans le cul, c'est pourquoi je sais toutes ces informations, c'est tout mon xD de recherche même après toutes les signatures et les choses que j'ai mis en place, certains des e-mails vont toujours dans spambox(un plus petit pourcentage, mais il me blesse encore) le seul moyen fiable est d'obtenir les utilisateurs Vous ajoutant à la liste de contacts (tout en ayant les signatures et les en-têtes correctement), donc leur rappeler de le faire si possible.

13
répondu aleation 2013-12-06 10:43:54

une chose à garder à l'esprit, j'ai eu des problèmes avec les e-mails bloqués par Gmail et Yahoo! e-mail de php parce que L'en-tête Return-Path ne correspond pas au from. Sur beaucoup de serveurs, si vous définissez explicitement le chemin de retour dans les en-têtes, PHP L'ignorera et définira le chemin de retour au nom de la machine. Vous devez le forcer dans la section' Paramètres supplémentaires 'de la fonction mail en utilisant le drapeau'- f'. Maintenant je n'ai jamais utilisé Swift Mailer donc je ne sais pas l'équivalent du courrier natif de PHP() la fonction, mais voici à quoi il pourrait ressembler, à l'aide de mail();

mail($to,$subject,$message,$headers,'-f returnpath@example.com')

si vous pouvez trouver l'équivalent de cela dans swift mailer, cela pourrait résoudre votre problème.

Edit:

on dirait que vous n'êtes pas en train de définir le chemin de retour du tout. Je sais que GMail n'aime pas qu'on l'oublie. Essayez de le définir explicitement à votre message Swift_Mailer (et assurez-vous qu'il corresponde à votre de):

$message->setReturnPath('from@example.com');
3
répondu LoneWolfPR 2013-03-15 16:10:41

assurez-vous que l'adresse e-mail que vous utilisez car le FROM est en fait une adresse e-mail. J'ai eu le même problème à été résolu en allant dans mon compte de gestion de l'hôte (one.com pour vous) et en ajoutant le compte que je veux l'e-mail de. J'ai ajouté un compte appelé "mailer "et à travers le panneau j'ai pu configurer un répondeur automatique qui a dit," Désolé. Cette adresse e-mail est réservée aux fonctions du serveur".

dans l'en-tête vous pouvez alors utiliser (mailer@yourdomain.com)

avoir cette adresse e-mail et un répondeur automatique a fait l'affaire. Je pense que gmail est juste assez intelligent pour savoir qu'une adresse email qui n'a jamais été utilisé avant est un spam. De plus, l'adresse e-mail doit provenir du domaine sur lequel le script vit afin que lorsqu'il dit QU'il est de là, il ne ment pas.

voici le code que j'utilise lorsque je veux envoyer un e-mail depuis mon hôte partagé (justhost.com), il ne va pas à spam (ce qui est en utilisant post données à partir d'un formulaire web):

<?php



// Contact subject

$subject = $_POST["subject"];



// Details

$message=$_POST["detail"];



// Email of sender

$mail_from=$_POST["customer_mail"]; 

//Name of sender

$name=$_POST["name"];
putenv("TZ=America/Phoenix");
$now = date("F j, Y, g:i a T");

$header="Reply-To: $name <$mail_from>";

$header .= "From: MyDomainName.com <mailer@mydomainname.com>";
$header .= "\r\n";
$header .= "Reply-To: $name <$mail_from>"; 
$introMSG= "Message From:".$name." <".$mail_from.">"."\r\n"
."Sent On:".$now."\r\n"."From a web form on MyDomaiNname.com"."\r\n"."-----------
-----------------------"."\r\n"."\r\n";


$to ='me@mydomainname.com'; // Domain Owners Email Address

$send_contact=mail($to,$subject,$introMSG.$message,$header);

$send_copy=mail($mail_from,"Copy Of:".$subject,$introMSG.$message,$header);

// Check if message sent


if($send_contact){

echo "<strong>Thanks! Your message has been sent to me.</strong>";

}

else {

echo "<strong>There was an error sending your message </strong>"; 

}



if($send_copy){
echo "<strong><br>A copy of this message was sent to your email.<br>If you do not
receive a copy please check your spam folder</strong>";

}

else{
echo "<strong> There was an error sending a copy of this message to your email
</strong>"; 

}



$send_reminder=mail("5555555555@txt.att.net","","You Have a new contact message from
".$name.", remember to check your spam folder.",$header);

if($send_reminder){

echo ".";

}

else {

echo "<br><strong>TXT Error</strong>";

}

?>
0
répondu Eric Jones 2013-03-16 02:53:19
Message-Id: <51450f37.6a0b700a.6239.5dbcSMTPIN_ADDED_MISSING@mx.google.com>

Notez le SMTPIN_ADDED_MISSING section? Vous ne vous comportez pas comme un véritable expéditeur de courrier et générant un message unique-ID. Vous pourriez trouver la lecture RFC 5322 instructive.

Received: from localhost.localdomain (srv18.one.com [193.202.110.18])
by mail-out2.b-one.net (Postfix) with ESMTP id F3D0B10365
for <NEWLY-CREATED-GMAIL-ACCOUNT@gmail.com>; Sun, 17 Mar 2013 01:32:53 +0100 (CET)

cet en-tête reçu initial a un nom D'hôte HELO illégal (localhost.localdomain). Votre application mailer devrait fournir un moyen pour vous de mettre le tout à un valeur valide. Cela pourrait même être aussi simple que de configurer le nom d'hôte de la machine qui exécute PHP. Voir RFC 1035 (validité du nom d'hôte), RFC 2821 (SMTP) et RFC 5321 (SMTP).

0
répondu Matt Simerson 2013-05-23 06:09:28

Solution: Utiliser Mailgun (pas testé) ou Sendgrid(testé et fait des merveilles!). Il y a une différence de prix entre les deux, mais en bref: Mailgun est bon si vous êtes petit; Sendgrid est bon si vous êtes grand.

soit ça, - soit envoyer des mails en utilisant API MailChimps ou quelque chose comme ça. Elle ne peut pas être fixée sur des hôtes partagés (très probablement). La raison en est ci-dessous.


Explication: J'ai appris plus tard comment fonctionnent les hôtes partagés. Imaginez que plusieurs sites différents soient situés sur le même serveur (comme domain-1.org,domain-2.org et