J'ai un bot qui répond aux utilisateurs. Mais parfois, lorsque mon bot envoie sa réponse, l'utilisateur ou leur fournisseur de messagerie réagira automatiquement (message de vacances, message de rebond, erreur de mailer-daemon, etc.). C'est alors un nouveau message de l'utilisateur (alors mon bot pense) que cela répond à son tour. Boucle de messagerie!
J'aimerais que mon bot ne réponde à de vrais emails de vrais humains. Je filtrant actuellement un courrier électronique qui admet d'être la priorité en vrac ou à partir d'une liste de diffusion ou a l'en-tête soumis automatiquement égal à "répliqué auto-répliqué" ou "généré automatiquement" (voir code ci-dessous). Mais j'imagine qu'il y a un moyen plus complet ou standard de faire face à cela. (Je suis heureux de voir des solutions dans d'autres langues en plus de Perl.) P>
NB: N'oubliez pas que votre propre bot déclare qu'il est correspondant! Inclure p> dans l'en-tête de l'email de votre bot. P> Mon code d'origine pour éviter les boucles de courrier. Répondre uniquement si Realmail renvoie true. P> (la vérification du sujet est sûrement inutile; je viens d'ajouter ces chèques une à la fois en tant que problèmes apparaissés et ce qui précède semble maintenant fonctionner Je ne veux pas toucher cela à moins qu'il y ait quelque chose de définitivement meilleur.) P> p>
4 Réponses :
Ma réponse ici ne traite que de rebonds plus simple. P>
Utiliser DSN (Notification d'état de livraison) Identifiant vous aidera à détecter un message DSN / rebondi . Il devrait aller à la piste de retour et ne pas répondre à. P>
voici un échantillon d'un Message DSN . Les informations d'en-tête incluent l'ID de message, le type de contenu contient des valeurs spécifiques (état de livraison) etc. p>
Ne pas pouvoir vous fournir des codes à Perl, juste mes 2 centimes d'idée. P>
PS: Notez que tous les serveurs de messagerie ou MTA se conformer à cela, mais je devine le plus faire. p>
qui vraiment em> sonne comme quelque chose qui est probablement disponible en tant que module de CPAN , mais je n'ai rien trouvé clairement pertinent dans cinq minutes de recherche. Mail :: Lite :: mbox :: processeur semble être Faites ce que vous voulez: p>
mail :: lite :: message :: correspondeur est un
Cadre de courrier automatisé
En traitement. Par exemple vous avez un
serveur de messagerie et vous avez besoin de
traiter certains types de courrier entrant
messages automatiquement. Par exemple,
Vous pouvez extraire automatisé
Notifications, factures, alertes, etc.
de votre flux de messagerie et effectuez certains
tâches basées sur le contenu de ceux-ci
messages. p>
blockQuote>
Mais ses docs sont suffisamment clairsemés pour qu'il ne soit pas immédiatement évident s'il fournit ces exemples de fonctions elles-mêmes ou si vous devez fournir au code de les conduire. P>
Dans tous les cas, si vous n'avez pas déjà vérifié CPAN, c'est là que je commencerais si je voulais faire quelque chose comme ça. P>
Il devrait y avoir une façon standard de traiter cela, mais le problème est que vous devez supposer que les systèmes qui envoient des réponses automatiques sont conformes à cette norme, quand la plupart du temps, ils ne le font tout simplement pas. p>
Comment obtenez-vous l'adresse que vous répondez? J'espère que vous n'utilisez pas le Mais quoi que vous fassiez, vous devrez simplement garder un journal de ce que vous avez envoyé à qui et permettra d'accélérer votre bot à une valeur raisonnable des messages par heure. P> à partir de: code> en-tête. Vérifiez le
Répondre-à: code> en-tête d'abord et si cela n'existe pas, utilisez le chemin de retour
: code>. p>
RFC 3834 fournit des conseils pour ce que vous devriez faire, mais voici quelques directives concrètes:
Définissez votre enveloppeur d'enveloppe à une adresse électronique différente de votre répondeur automatique afin que vos rebonds ne se répètent pas dans le système.
Je stocke toujours dans une base de données une clé du moment où une réponse par courrier électronique a été envoyée d'une adresse spécifique à une autre adresse. Néanmoins, je ne répondrai pas à la même adresse plus d'une fois dans une période de 10 minutes. Cela seul a cessé toutes les boucles, mais ne garantit pas un bon comportement (les réponses automatiques aux listes de diffusion sont gênantes). P>
Assurez-vous d'ajouter une permutation d'en-tête que d'autres personnes correspondent à des boucles d'arrêt. Voici la liste que j'utilise: p>
if ($sender eq "" || $sender =~ /^(?:request|owner|admin|bounce|bounces)-|-(?:request|owner|admin|bounce|bounces)\@|^(?:mailer-daemon|postmaster|daemon|majordomo|ma ilman|bounce)\@|(?:listserv|listsrv)/i) {
Je préfère personnellement les bots qui sont limités par le temps (c'est-à-dire envoyer un courrier électronique à une personne au plus un courrier électronique dans une heure). Je n'aime pas recevoir de tonnes de notification de vacances lorsque j'envoie de nombreux courriels à la fois.
Grand point, notnoop. Quoi que ce soit d'autre que vous faites, un filet de sécurité limité à taux de taux est intelligent.