Giter Site home page Giter Site logo

vmagnin / unsubscribe Goto Github PK

View Code? Open in Web Editor NEW
49.0 49.0 7.0 74 KB

Ce script permet de se désinscrire massivement de listes de diffusion indésirables de type publicitaire. This script allows the mass unsubscription from unwanted mailing lists.

License: GNU General Public License v3.0

Shell 100.00%
antispam bash-script junkmail spam-protection

unsubscribe's People

Contributors

trolologuy avatar vmagnin avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

unsubscribe's Issues

Utiliser sed ou grep ?

La commande grep -A 1 "List-Unsubscribe: <" Junk | grep -o -E "http[^>]+" cherche les liens <http:> dans les lignes contenant "List-Unsubscribe: <" et les lignes juste en-dessous (-A 1). Même si cela n'a pas été observé, cette seconde ligne pourrait théoriquement contenir un autre champ avec un lien (et pourquoi pas un champ List-Subscribe !).

sed ?
On pourrait essayer de remplacer cette commande par une commande à base de sed. Ou du moins pour la seconde partie de façon à conserver la capacité de grep de parcourir récursivement les répertoires si nécessaire.

Perl-compatible regular expressions (PCREs)

Pour cherche un champ contenant un <mailto:> suivi d'un <http:> :

$ grep -oPz 'List-Unsubscribe: <mailto:[^>]+?>, (<http[s]?:[^>]+?>)' Junk-1
$ grep -oPz 'List-Unsubscribe: <mailto:[^>]+?>, <http[s]?:[^>]+?>' Junk-1 | tr '\000' '\n' | grep -oP '(http[s]?:[^>]+)'

$ man grep
-P Interpret PATTERNS as Perl-compatible regular expressions (PCREs). This option is experimental when combined with the -z (--null-data) option, and grep -P may warn of unimplemented features.
-z, --null-data Treat input and output data as sequences of lines, each terminated by a zero byte (the ASCII NUL character) instead of a newline.

La commande tr '\000' '\n' remet à nouveau des retours à la ligne à la place des octets nuls.

Références :

Extraire des URL de désabonnement de parties en BASE64 ?

Certains emails ne contiennent pas de champ du type List-Unsuscribe. Un lien de désabonnement est présent dans le message mais en général dans une partie MIME codée en base64.

La commande $ base64mime -d email.txt permet de décoder un bloc MIME codé en base64. Mais il faudrait d'abord extraire tous les blocs du fichier Junk.

La commande $ urlscan -n email.txt permet d'extraire les URL contenues dans un email, même si certaines parties sont codées en base64. Mais il faudrait d'abord séparer tous les emails contenus dans un fichier Junk.

La commande decodemail pourrait permettre de résoudre le problème :
https://mailutils.org/manual/mailutils.html#decodemail
mais elle n'est disponible qu'à partir de la version 3.10 du paquet mailutils. Malheureusement Ubuntu 20.10 n'embarquera que la version 3.9.

Logiciels stockant chaque courriel dans un fichier différent

Certains logiciels de courriel, comme Maildir (https://fr.wikipedia.org/wiki/Maildir), stockent chaque message dans un fichier différent.

On pourrait remplacer la portion de code grep -A 1 "List-Unsubscribe: <" "${fichier}"
par grep -R -A 1 "List-Unsubscribe: <" "${path}"
l'option -R indiquant à la commande grep de faire une recherche récursive en partant du répertoire indiqué.

On pourrait tester si ${path} est un répertoire ou un fichier. Dans le premier cas on ajouterait l'option -R à grep.

Désinscription par courriel ?

Certains courriels ne contiennent qu'un lien <mailto:> dans le champ List-Unsubscribe:. Le script pourrait dans ce cas envoyer un courriel de désinscription en ligne de commandes.
Il faudrait donc :

  1. détecter ce type de champ,
  2. voir quel est le système le plus simple pour envoyer un email depuis la ligne de commandes.

Mais ne risque-t-on pas d'être considéré comme un spammer si on envoie très rapidement ainsi un grand nombre de courriels ?

D'autre part, il pourrait être plus simple d'enregistrer dans un fichier texte la liste des destinaires. On pourrait ensuite la copier/coller dans une fenêtre de rédaction de Thunderbird pour faire un envoi commun. Question : un envoi commun sera-t-il accepté par les systèmes de désinscription ?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.