Vous n'êtes pas identifié(e).
L'icône rouge permet de télécharger chaque page du wiki visitée au format PDF et la grise au format ODT →
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
utilisateurs:enicar:tutos:mutt-msmtp-multi-comptes [18/08/2017 01:13] enicar [Introduction] |
— (Version actuelle) | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | ====== Mutt + msmtp multi-comptes ====== | ||
- | |||
- | * Objet : Configuration de Mutt et de msmtp pour pouvoir gérer l'envoie de plusieurs comptes depuis Mutt. | ||
- | * Niveau requis : avisé | ||
- | * Voir aussi : [[doc:reseau:mutt]], [[http://www.mutt.org/doc/manual/]] | ||
- | ===== Introduction ===== | ||
- | Comment paramétrer **mutt** et **msmtp** pour pouvoir envoyer des emails | ||
- | provenant deux adresses mails différentes ? | ||
- | C'est la question à laquelle je propose deux solutions. Mais je dois vous avertir, | ||
- | je décris deux méthodes pour y arriver. C'est un peu alambiqué, car il faut que | ||
- | les deux logiciels coopèrent. En plus certaines options portent le même nom | ||
- | dans les deux… Donc soyez attentif ! | ||
- | |||
- | J'ai mis des commentaires dans les fichiers de configurations. Ils sont là à titre | ||
- | d'information et aussi d'explication. | ||
- | |||
- | ===== Msmtp ===== | ||
- | Commençons par la configuration de **msmtp**. Je propose l'exemple suivant | ||
- | avec deux comptes hypothétiques. Le fichier de configuration de | ||
- | **msmtp** doit se trouver dans le **HOME** de l'utilisateur et | ||
- | s'appelle **.msmtprc**. Je propose la configuration suivante : | ||
- | <file config fichier .msmtprc> | ||
- | defaults | ||
- | # on demande un log des transactions smtp. Le répertoire | ||
- | # ~/Mail doit exister ! | ||
- | logfile ~/Mail/msmtp.log | ||
- | |||
- | # un premier compte, le nom qui suit le mot account est libre | ||
- | # c'est juste la désignation du compte pour msmtp. On ne mettra, | ||
- | # toutefois, pas d'espaces dans ce nom ! | ||
- | account user1 | ||
- | # host définit le relais smtp à utiliser. | ||
- | host smtp.truc.fr | ||
- | # from est l'adresse email | ||
- | from nom1@truc.fr | ||
- | # ici on demande une authentification | ||
- | auth on | ||
- | # le user doit correspondre à la partie avant l'@ de l'adresse mail. | ||
- | user nom1 | ||
- | # on utilise tls. | ||
- | tls on | ||
- | # le port par défaut quand on utilise tls est 465 dans msmtp. | ||
- | # ce n'est pas celui qui est tout le temps utilisé. Le port | ||
- | # 587 est très courant aussi. | ||
- | port 587 | ||
- | password XXXXXXX | ||
- | tls_trust_file /etc/ssl/certs/ca-certificates.crt | ||
- | |||
- | # ici on désigne ce premier compte comme étant celui par défaut. | ||
- | # C'est celui-ci que msmtp utilisera quand aucun compte n'aura pas été | ||
- | # demandé en particulier. (cf la suite). | ||
- | |||
- | account default :user1 | ||
- | |||
- | # on définit un second compte : | ||
- | account user2 | ||
- | host smtp.machin.fr | ||
- | from nom2@machin.fr | ||
- | auth off | ||
- | # Quand l'athentification est désactivé l'option user est inutilisée. | ||
- | #user nom2 | ||
- | # le port 25 est le port par défaut quand n'utilise pas tls | ||
- | port 25 | ||
- | </file> | ||
- | <note tip> | ||
- | Pour connaître le port utiliser, on peut tester en lançant msmtp comme suit : | ||
- | <code user>msmtp --serverinfo --tls --tls-certcheck=off --host smtp.truc.fr --port 587</code> | ||
- | |||
- | Si msmtp ne répond pas arrêter le en appuyant sur ctrl-C. | ||
- | Sinon, cela permet de voir les fonctionnalités acceptées par | ||
- | le serveur mail. Vous pouvez tester les ports 465 et 25 avec | ||
- | ou non le tls. | ||
- | </note> | ||
- | |||
- | <note warning>Les mots de passe doivent être stockés en clair dans le ficher **.msmtprc**. | ||
- | Normalement **msmtp** est capable de demander le mot de passe quand nécessaire, mais | ||
- | quand on l'utilise depuis **mutt** ce n'est pas possible. Je ne connais pas de solution à | ||
- | ce problème.</note> | ||
- | |||
- | ===== Mutt ===== | ||
- | Bon passons à la configuration de **mutt**. Je ne décris ici que les quelques | ||
- | options qui nous intéressent pour l'envoi des mails avec plusieurs comptes. | ||
- | |||
- | ==== Solution 1 ==== | ||
- | On va utiliser l'option **-a** de **msmtp** qui permet de désigner le compte | ||
- | à utiliser pour l'envoi du mail. C'est le nom du compte désigner par | ||
- | « account user1 » par exemple. Pour cela dans mutt nous allons | ||
- | utiliser la variable **sendmail** qui permet de demander à mutt | ||
- | d'utiliser un autre programme que **/usr/bin/sendmail** | ||
- | Donc voici l'extrait du **.muttrc** qui nous intéresse. | ||
- | <file config extrait du .muttrc> | ||
- | set sendmail='/usr/bin/msmtp -a default' | ||
- | set use_from='yes' | ||
- | |||
- | # On définit deux variables pour éviter les fautes de frappes. | ||
- | # correspond au from du account user1 | ||
- | set my_address_one='nom1@truc.fr' | ||
- | |||
- | # correspond au from du account user2 | ||
- | set my_address_two='nom2@machin.fr' | ||
- | |||
- | set realname='Prénom Nom' | ||
- | set from=$my_address_one | ||
- | |||
- | # On déclare les adresses mails qui sont les notres. Ça | ||
- | # de s'envoyer des emails à soi même quand on répond à tous | ||
- | # aux mails avec plusieurs contacts. Cela permet aussi | ||
- | # de faire des recherches sur nos propres mails ou l'inverse. | ||
- | alternates="$my_address_one|$my_address_two" | ||
- | |||
- | # on utilise le send2-hook qui est évalué dès qu'on édite un nouveau mail | ||
- | # ou que l'on change l'adresse du from dans le menu compose ici | ||
- | # grâce à ce hook on change la variable sendmail. On peut aussi | ||
- | # changer plusieurs variables. | ||
- | send2-hook "~f $my_address_one" "set sendmail='/usr/bin/msmtp -a default'" | ||
- | send2-hook "~f $my_address_two" "set 'sendmail=/usr/bin/msmtp -a user2'" | ||
- | |||
- | # Pour changer l'adresse du from dans le menu compose on crée deux macros, | ||
- | # de cette façon il suffit de taper « <esc> 1 » pour utiliser la première | ||
- | # adresse et « <esc> 2 » pour la seconde. | ||
- | macro compose <esc>1 "<esc>f^U$realname <$my_address_one>" | ||
- | macro compose <esc>2 "<esc>f^U$realname <$my_address_two>" | ||
- | </file> | ||
- | Dans le **send2-hook** la première chaîne (**~f $my_address_one** par exemple) est | ||
- | un motif de recherche. Le **~f** demande à **mutt** de faire une correspondance | ||
- | avec le champ **from** du mail. Le reste est une expression rationnelle, | ||
- | mais on utilisera une chaîne simple. | ||
- | |||
- | J'ai lu une doc où il utilisait | ||
- | **~e** à la place de **~f**. Avec **~e** la correspondance est cherchée | ||
- | par rapport à l'expéditeur (c'est à dire le champ **send**) qui peut | ||
- | être différent de **from**. Mais on s'en contentera car les essais | ||
- | que j'ai fait avec **~e** se sont révélés infructueux. | ||
- | |||
- | |||
- | ==== Solution 2 ==== | ||
- | Cette fois-ci on ne va pas modifier la variable **sendmail**. On va utiliser | ||
- | de nouveau **send2-hook** pour modifier la variable **from** de | ||
- | **mutt**. | ||
- | Cela combiné avec l'utilisation de l'option de **mutt**, | ||
- | **envelope_from** | ||
- | va permettre d'appeler **msmtp** avec les paramètres suivant : | ||
- | <code user> | ||
- | msmtp -f adresse_expéditeur -- adresse_destinataire | ||
- | </code> | ||
- | Quand il est appelé comme cela, **msmtp** va utiliser le **from** | ||
- | qu'on a paramètré pour chaque compte, pour déterminer comment | ||
- | il va envoyer le mail. | ||
- | <note important>Faites attention à ne pas confondre, les différents **from**. | ||
- | il y en a trois : | ||
- | * le **from** du mail. | ||
- | * celui du fichier dans le fichier **~/.msmtprc** | ||
- | * et enfin celui dans le fichier **~/.muttrc** | ||
- | </note> | ||
- | Les trois sont bien définis dans trois fichier différents. **Mutt** se | ||
- | sert des variables **from** et **realname** definies dans son fichier | ||
- | **.muttrc** pour remplir automatiquement le champ **from** du mail | ||
- | lorsqu'on demande de composer un nouveau message (avec la touche | ||
- | <key>m</key>). Si l'on change la valeur de ce champ dans le mail | ||
- | une fois que l'on quitte l'éditeur, **mutt** n'est pas au courant | ||
- | que l'on a changé cette valeur. Pour lui faire prendre en compte ce | ||
- | changement on va utiliser **send2-hook**. | ||
- | |||
- | <note important> | ||
- | Pour que cette méthode fonctionne il faut que le **from** de | ||
- | **mutt** corresponde au **from** du mail et au **from** du | ||
- | compte à utiliser dans le fichier de configuration de **msmtp** | ||
- | (**.msmtprc**). Ce dernier point est très important, attention aux | ||
- | fautes de frappe !</note> | ||
- | |||
- | Voici, l'extrait du **.muttrc** que je propose : | ||
- | <file config extrait du .muttrc> | ||
- | set sendmail='/usr/bin/msmtp' | ||
- | set use_from='yes' | ||
- | set envelope_from='yes' | ||
- | |||
- | # On définit deux variables pour éviter les fautes de frappes. | ||
- | # correspond au from du account user1 | ||
- | set my_address_one='nom1@truc.fr' | ||
- | |||
- | # correspond au from du account user2 | ||
- | set my_address_two='nom2@machin.fr' | ||
- | |||
- | set realname='Prénom Nom' | ||
- | set from=$my_address_one | ||
- | |||
- | # On déclare les adresses mails qui sont les notres. Ça | ||
- | # de s'envoyer des emails à soi même quand on répond à tous | ||
- | # aux mails avec plusieurs contacts. Cela permet aussi | ||
- | # de faire des recherches sur nos propres mails ou l'inverse. | ||
- | alternates="$my_address_one|$my_address_two" | ||
- | |||
- | # on utilise le send2-hook qui est évalué dès qu'on édite un nouveau mail | ||
- | # ou que l'on change l'adresse du from dans le menu compose ici | ||
- | # grâce à ce hook on change la variable from. On peut aussi | ||
- | # changer plusieurs variables. | ||
- | send2-hook "~e $my_address_two" "set from=$my_address_two" | ||
- | |||
- | # Pour changer l'adresse du from dans le menu compose on crée deux macros, | ||
- | # de cette façon il suffit de taper « <esc> 1 » pour utiliser la première | ||
- | # adresse et « <esc> 2 » pour la seconde. | ||
- | macro compose <esc>1 "<esc>f^U$realname <$my_address_one>" | ||
- | macro compose <esc>2 "<esc>f^U$realname <$my_address_two>" | ||
- | </file> | ||
- | |||
- | Peu de choses ont changé par rapport à la première solution. | ||
- | La variable **sendmail = /usr/bin/msmtp** sans options supplémentaires. | ||
- | L'option **envelope_from** est positionnée à **yes** , c'est ce qui permet | ||
- | d'appeler **msmtp** avec la commande **msmtp -f expéditeur -- | ||
- | destinataire**. | ||
- | |||
- | <note important> | ||
- | **Mutt** utilise la variable **from** définit dans **.muttrc** (ou | ||
- | dans ce cas la valeur que l'on donne dans **send2-hook**) et non le | ||
- | champ **from** du mail pour fixer l'expéditeur utiliser dans la commande | ||
- | **msmtp**.</note> | ||
- | |||
- | Et enfin, le **send2-hook** où on utilise **~e** et non **~f**. | ||
- | Aussi on fixe le **from** de mutt. | ||
- | |||
- | |||
- | Ne me demander pas pourquoi, mais ici le **~e** fonctionne. Remarquez | ||
- | que l'avantage, c'est qu'on est pas obligé d'avoir deux **send2-hook**. | ||
- | Dans cette configuration, la variable **from** reprend sa valeur d'origine | ||
- | « toute seule ». C'est un mystère supplémentaire car il est dit | ||
- | dans la documentation que lorsqu'on change une valeur avec un hook | ||
- | sa valeur reste celle attribuée dans le hook. C'est pour cela | ||
- | que quand on utilise les hook il faut en principe utiliser | ||
- | un hook par défaut qui rétablit la ou les valeurs par défaut. | ||
- | Ça fait deux mystères ! | ||
- | |||
- | C'est la méthode que je préfère, elle est plus légère. | ||
- | |||
- | ==== Conclusion ==== | ||
- | Bref, ces déboires avec le **~e** et **~f** sont peut-être un bug. | ||
- | Je ne sais pas, je n'ai pas encore tout compris à ce sujet. Pour | ||
- | info j'utilise **NeoMutt** version 1.8.3 (du 09-06-2017). **NeoMutt** | ||
- | est un Mutt amélioré avec notamment la possibilité d'avoir une | ||
- | barre latéralle pour naviguer entre les différentes BALs. | ||
- | Peut-être que ces réglages sont spécifiques à la version de **mutt** | ||
- | que j'utilise. | ||
- | |||
- | ===== Petites bidouilles pour débugger ===== | ||
- | Je propose maintenant un petit truc qui permet de voir comment | ||
- | **msmtp** est appeler. Pour cela nous allons faire un petit | ||
- | script en shell que j'appelle **mysendmail** : | ||
- | <code bash> | ||
- | |||
- | #! /bin/sh | ||
- | if ! [ -d ~/tmp ]; then | ||
- | mkdir -m 0700 tmp | ||
- | fi | ||
- | echo $@ >~/tmp/params.txt | ||
- | cat >~/tmp/message.txt | ||
- | </code> | ||
- | |||
- | Ce shell script peut être placé dans le **HOME**. | ||
- | Voci ce qu'on y fait : | ||
- | * On crée un répertoire **~/tmp** s'il n'existait pas. | ||
- | * On sauvegarde les paramètres passés dans le fichier ~/tmp/params.txt | ||
- | * On sauvegarde le mail dans ~/tmp/message.txt | ||
- | |||
- | |||
- | Et c'est tout. Autant dire tout de suite qu'avec ce script, vous | ||
- | n'enverrez aucun mail ! | ||
- | |||
- | |||
- | Ensuite, pour l'utiliser avec **mutt** on remplace toute les | ||
- | occurrences de **sendmail='/usr/bin/msmtp'** par | ||
- | **sendmail='~/mysendmail** dans le fichier **.muttrc**. | ||
- | |||
- | |||
- | À partir de là, chaque que vous enverrez un mail dans **mutt**, c'est | ||
- | le script **mysendmail** qui sera appelé. Vous pourrez voir ainsi | ||
- | les paramètres passés au script ainsi que la façon dont mutt a | ||
- | formé le mail. Vous pourrez alors expérimenté ce que ça fait de | ||
- | changé l'option **envelope_from**. C'est sympa de le voir par | ||
- | soi-même. | ||
- | |||
- | <note important>N'oubliez pas de rétablir l'option **sendmail** après | ||
- | vos expériences. Sinon, plus aucuns mails ne seront envoyé, et vous | ||
- | vous demanderez pourquoi personne ne vous répond :-D | ||
- | </note> | ||
- | |||
- | Une autre chose que vous pouvez tester, c'est la valeur, de la | ||
- | variable **sendmail** dans mutt lorsque vous utiliser la //Solution 1//. | ||
- | Dans mutt pour connaître la valeur d'une variable, il suffit | ||
- | de taper <key>:</key> pour passer en mode commande. Là une ligne | ||
- | apparaît en bas de l'écran, puis vous tapez : | ||
- | <code>set ?sendmail</code> | ||
- | La commande **set** permet non seulement de fixer la valeur d'une variable | ||
- | et aussi de connaître la valeur de cette variable. Pour obtenir la | ||
- | valeur d'une variable il suffit de précéder le nom de la variable par | ||
- | un point d'interrogation. | ||
- | |||
- | |||
- | De cette façon vous pourrez vérifier la valeur des variables | ||
- | **sendmail** et **from** (pour la //Solution 2//) facilement. | ||
- | |||