Configurer Postfix avec le SMTP Office365
On choisit pas toujours le serveur SMTP qui va servir à envoyer les mails de détresse de nos système et on a pas forcément toujours les moyens de gérer soi-même un serveur SMTP. Ici, on a un système qui a besoin d’envoyer des mails via Postfix en utilisant le serveur SMTP d’office365. Je vais vous détailler rapidement ce qu’il faut faire pour que cela fonctionne.
Installation
Avant toutes choses, nous allons installer les paquets nécessaires à l’envoi de mail via Postfix.
# apt-get install postfix libsasl2-modules
Lors de la configuration de Postfix
, vous devez choisir Site internet
puis entrer votre nom de domaine (celui des adresses mails gérées par office365) lorsque l’installation vous demandera votre nom de courrier.
Configuration de Postfix
La configuration du service Postfix se fait dans le fichier /etc/postfix/main.cf
celui décrit les options différentes des valeurs par défauts. Vous trouverez un exemple de fichier de configuration complet dans /usr/share/postfix/main.cf.dist
pour les distributions Debian.
Pour commencer une petite sauvegarde de votre fichier est la bienvenue.
# cp /etc/postfix/main.cf /etc/postfix/main.cf.1
Afin de pouvoir utiliser le serveur SMTP d’Office365, nous allons devoir ajouter quelques options de configuration au fichier /etc/postfix/main.cf
.
# Configuration relai relayhost = [smtp.office365.com]:587 # Configuration interfaces inet_interfaces = all inet_protocols = ipv4 # Configuration SMTP smtp_sasl_auth_enable = yes smtp_sasl_security_options = noanonymous smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd smtp_use_tls = yes smtp_tls_security_level = may smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt sender_canonical_classes = envelope_sender, header_sender sender_canonical_maps = regexp:/etc/postfix/sender_canonical_maps smtp_header_checks = regexp:/etc/postfix/header_check
ATTENTION: certains paramètres smtpd
ressemble aux paramètres smtp
mais ne configure pas la même chose. Le smtpd
est le serveur de réception, alors que smtp
est le client SMTP. Nous nous souhaitons utiliser uniquement le client.
Enregistrement du couple login / mot de passe utilisé avec le serveur SMTP Office365
[smtp.office365.com]:587 login@domain.com:P4ssW0rd
On demande à Postfix de remplacer l’adresse d’expédition par l’adresse de login (Office semble un peu capricieux sur ce point)
/.+/ login@domain.com
/FROM:.*/ REPLACE From: login@domain.com /SENDER:.*/ REPLACE Sender: login@domain.com
Enfin on spécifie le nom de domaine utilisé comme origine.
domain.com
ATTENTION: Si vous souhaitez juste envoyer des messages et ne pas en recevoir, vérifiez que votre domaine ne se trouve pas dans la variable mydestination
du fichier /etc/postfix.main.cf sinon les mails envoyés vers votre nom de domaine ne sortiront même pas de votre ordinateur.
Enfin nous demandons à postfix de prendre en compte notre nouvelle configuration.
# postmap /etc/postfix/sasl_passwd # service postfix restart
Afin de vérifier le bon fonctionnement de l’ensemble, vous pouvez tester l’envoi d’un mail et vérifier le bon fonctionnement dans les logs système.
$ echo "text du message" | mail -a "From: login@domain.com" -s "Subject" dest@destdomain.com # tail -n 100 /var/log/syslog
Erreurs possibles
Voici quelques erreurs qui peuvent arriver et les solutions associées :
- Host or domain name not found. Name service error for name=smtp.office365.com type=A: Host not found, try again
Vous avez certainement un problème d’accès au réseau. Essayez un ping 8.8.8.8
, si cela fonctionne, essayez un ping google.fr
. Si le premier ne fonctionne pas, vérifier les routes de votre ordinateur. Si seul le deuxième ne fonctionne pas, vérifiez vos serveurs DNS.
- host smtp.office365.com[40.96.37.66] said: 550 5.7.60 SMTP; Client does not have permissions to send as this sender (in reply to end of DATA command)
Pour cette erreur, vérifiez bien que votre fichier /etc/mailname
contient le nom de domaine de votre adresse mail. Changez le, puis redémarrer le service postfix.
- SASL authentication failed; server smtp.office365.com[40.101.36.18] said: 535 5.7.3 Authentication unsuccessful
Vérifiez le couple login/mot de passe de votre fichier /etc/postfix/sasl_passwd
, puis appliquez les modifications via la commande postmap /etc/postfix/sasl_passwd
.
Voila vous pouvez envoyer vos mails via le SMTP d’office365.com. Si vous avez des suggestions, modifications ou autres, les commentaires sont là pour çà 😉
Sources:
http://serverfault.com/questions/147921/forcing-the-from-address-when-postfix-relays-over-smtp
Commentaires
COL
Bonjour, apres avoir bien suivi la config, tres bien détaillée, et revérifié, voici ce que j’obtiens dans mon maillog (avec de plus un « can not load Certificate Authority data »)
Anthony
Le message semble indiquer qu’aucun expéditeur n’est indiqué dans le mail. Quelle commande avez vous utilisé pour envoyer votre mail ?
Sinon pour le certificat, vérifiez si le paquet
ca-certificates
est installé.COL
Merci pour votre réponse, je commence par essayer cette commande..yum install ca-certificates pour installer les certificats. mais apparemment je reste sur : Determining fastest mirrors
Anthony
Vous êtes sur quel système ? Vient il d’être installé ? Et que donne un
ping google.com
?COL
Merci.
Je suis sur un serveur centos 6, utilisé depuis plus de 3 ans pour mon centreon. (en Full Automated Nagios)
pour le ping voila:
Anthony
Ok et le yum installation est toujours bloqué ? Car à priori le DNS fonctionne et le réseau aussi.
Sinon pour revenir au sujet de base le prob de from vide : quelle commande avez vous utilisé pour envoyer le mail ?
COL
J’ai toujours l’erreur pour le yum:
et la commande que j’utilise c’est :
Anthony
On est d’accord que dans le fichier
/etc/postfix/main.cf
les paramètres sont préfixés parsmtp_
et nonsmtpd_
?Je parle principalement des options :
COL
Oui tout à fait, j’ai même vérifié plusieurs fois…
Anthony
Pour le paramètre
smtp_tls_CAfile
, vous pouvez essayer avec/etc/pki/tls/certs/ca-bundle.crt
. L’emplacement que j’ai mis pour ce paramètre correspond à l’endroit où Debian met les certificats des CA. Vu que vous êtes sur CentOS l’emplacement est différent.COL
Je n’ai aucun de ces fichiers ou répertoire…:(
Anthony
OK, je viens de faire un tour sur CentOS. Le chemin à mettre est
/etc/ssl/certs/ca-bundle.crt
COL
Bonjour, le répertoire ssl n’existant pas dans etc, c’est certainement lié au fait que le pakage que j’ai pas pu installer..n’y soit pas..assez logique:)
En revanche comme j’ai eu bcp de soucis avec office 365, pour mes scanners et autres, je suis passé par un relai smtp.
La seule chose qu’il me faudrait, et qui dot être bcp plus simple à gérer, c’est qu’au lieu d’avoir une adresse du type nagios@localhost.localdomain j’ai une adresse de typre: monmail@mondomaine.com.
Pour nagios je pense que c’est dans centreon qu’il faut que je me penche, en revanche pour mondomain.com au lieu de localhost.localdomain, ce serait plutôt dans le main.cf non?
Merci encore pour votre aide.
COL
Ok avec mon relais smtp, ça marche très bien et c’est parfait.
Merci encore pour votre aide.
Jean-Claude
Bonjour,
J’ai utilisé votre tuto pour configurer mon relais postfix pour distribuer les mails d’équipements de mon réseau (onduleurs, imprimantes …) vers O365 … Ça fonctionne parfaitement. Le contexte : les equipements utilisents des adresses comme onduleur@mondomaine.com et le relais transforme l’expéditeur en relais@mondomaine.com.
Aujourd’hui j’ai besoin de relayer des messages d’autres équipements de mon réseau qui utilisent un domaine mail différent. Ces messages la ne passent pas et dans le log Postfix j’ai :
Avez vous une idée pour solutionner ce problème ? J’ai du mal à comprendre si c’est O365 qui refuse le mail ou si c’est le relais. Les mails provenant de mondomaine.com continuent eux a passer correctement.
En vous remerciant !
JC
Anthony
Bonjour,
Le message semble indiqué que vous avez configuré l’envoi d’un domaine avec le login d’un autre domaine. Office365 n’accepte pas ce genre de pratique.
Pour Office365, il faut envoyé un mail avec un FROM d’une adresse existante du domaine1 avec le login du meme domaine. Si l’adresse n’existe pas ou si le domaine du FROM est différente de l’adresse de LOGIN, l’envoi sera refusé.
Anthony
Jean-Claude
Bonjour et merci beaucoup pour votre retour. J’ai une dernière question s’il vous plait pour être sur de bien comprendre.
Au départ, j’ai configuré postfix, comme indiqué dans votre tuto pour qu’il re-écrive le From.
Concrètement, l’authentification sur O365 se fait avec la boite relais@mondomaine.com. Quand onduleur@mondomaine.com remet un message au relais, le champ from qui est onduleur@mondomaine.com est remplacé par relais@mondomaine.com et je reçois le mail dans ma boite avec pour expéditeur : relais@mondomaine.com. Tout ceci fonctionne parfaitement.
Mon soucis c’est que j’ai un équipement qui pour diverses raisons technique est configuré avec pour adresse d’expéditeur : copieur@fax.domainefax.com. il est configuré pour remettre à un serveur fax qui, si le destinataire fait partie du domaine « fax.domainefax.com », traitera le mail, par contre si le mail est à destination de mondomaine.com, ce serveur remettra au relais postfix.
En clair, coupieur@fax.mondomainefax.com, envois au serveur de fax un mail à destination de toto@mondomaine.com. Le serveur fax reçois ce mail et, comme le domaine n’est pas le sien, il remet au relais Postfix. La je me disais que le relais allait remplacer le champ FROM « copieur@fax.mondomainefax.com » par « relais@mondomaine.com » et qu’il allait ensuite remettre à O365. Mais le remplacement à pas l’air de se faire, alors que si l’expéditeur fait partie du domaine « mondomaine.com » il se fait parfaitement.
Ce fonctionnement est normale ou je me suis loupé dans ma configuration (vérifié pourtant maintes fois) ?
Merci beaucoup pour votre aide.
JC
Anthony
Pouvez vous vérifier que les fichiers /etc/postfix/sender_canonical_maps et /etc/postfix/header_check sont correctes et contiennent bien relai@mondomaine.com et que le fichier /etc/postfix/main.cf contient bien les lignes suivantes :
Normalement avec ce paramétrage, tout mail arrivant au smtp ont leurs FROM remplacé par relai@mondomaine.com. Hors votre message de log indique que l’envoi n’est pas autorisé depuis cet émetteur. Soit l’adresse relai@mondomaine.com n’existe pas dans votre config Office365 soit le From est mal remplacé.
Pouvez vous essayer la commande suivante et la même en remplaçant coupieur@fax.mondomainefax.com par relai@mondomaine.com ?
Cela fonctionne t’il dans les 2 cas ?
Jean-Claude
Bonjour et merci pour votre aide !
Le relais fonctionne parfaitement avec tout un tas d’équipements (Onduleurs, logiciels divers, Nas etc …) Tous utilisent une adresse d’emetteur différente de celle utilisée pour l’authentification sur O365. Du coup la conf je pense est bonne.
J’ai quand même contrôlé les fichiers de conf comme vous me l’avez demandé. Je n’y vois pas d’erreur. Tout est conforme à votre tuto.
J’ai aussi fait le test demandé :
Je pense que suite à ces deux test on peut en conclure que, en « conditions normales », le relais fait parfaitement son travail.
Comme je le disais plus haut, il fonctionne parfaitement pour tout un tas d’équipements ou il y a besoin de réécriture du from. il ne fonctionne pas que dans le cas de notre serveur fax.
Il y a deux particularités à ce cas :
– Le domaine qui est différent. Mais les tests que vous m’avez fait faire montrent que la réécriture du FROM se fait bien, même sur un domaine différent.
– Les messages qui ne fonctionnent pas arrivent sur le relais postfix depuis un autre relais. Un copieur envois un mail au serveur fax. Si le destinataire n’est pas un fax, le serveur de fax relais le message au relais Postfix. Je me demande si l’entête ne serai pas modifiée par le relais du serveur fax de sorte que postfix ne parvienne pas à réécrire le From …
Je vais chercher de ce coté la …
Savez vous si il est possible coté postfix de voir le corps des mails reçu ?
Merci beaucoup pour votre aide.
JC
Anthony
Bonjour,
La je commence à sécher sur votre problème. Je pensais à des problèmes à cause du Reply-to ou du Sender mais dans ma config ils sont tous remplacé par l’adresse de connexion.
Sinon pour réponse à vos questions Postfix, les commandes sont :
Sinon un wireshark ou tcpdump sur le port 25 peuvent vous aider. Au besoin, envoyer moi vos résultats ou log sur contact(a)perhonen(.)fr.
Jean-Claude LOPEZ
Bonjour,
J’ai fini par trouver et corriger le problème.
Comme vous me l’avez conseillé, j’ai fait un tcpdump sur le relais sur le port 25. Je l’ai fait pour un des messages qui fonctionnait et pour un des messages qui ne fonctionnaient pas. Puis j’ai comparé les deux.
J’ai trouvé dans l’entête du message une différence …
To:destinataire@mondomaine.com
From: Expéditeur
Sender:
Reply-To:
Subject: Sujet du message …
Les entêtes des messages qui fonctionnaient n’avait pas la ligne « Sender » … Du coup, j’ai modifié le fichier /etc/postfix/header_check pour qu’il ressemble à ça :
/FROM:.*/ REPLACE From: compte.relais@mondomaine.com
/SENDER:.*/ REPLACE Sender: compte.relais@mondomaine.com
Du coup, Office365 est content et les mails passent !
Merci beaucoup pour votre aide !
Anthony
Merci beaucoup pour votre retour, je vais modifier l’article pour inclure votre correction.
Patrice
Bonjour,
Lorsque je teste, j’obtiens :
dsn=5.7.57, status=bounced (host smtp.office365.com[40.96.21.242] said: 530 5.7.57 SMTP; Client was not authenticated to send anonymous mail during MAIL FROM
Idem en simulant un client de messagerie.
Cette erreur semble indiquer que le serveurs POSTFIX en sait pas utiliser TLS. Pourtant, tout est configuré comme dans l’article.
Une idée ?
Jo
Bonjour,
je suis toutes les étapes je travaille sous SUSE 12 mais quand je test d’envoyer un mail il me dit impossible d’authentifier alors que j’ai vérifié tous les paramètres pour moi tout est ok
Anthony
Que vous disent les logs ? Lors du redémarrage de Postfix et lors de l’envoi d’un mail ?
Benoît
Bonjour Anthony et bonne année 2017,
Merci pour le tuto, je pensai enfin avoir trouvé la clé de mes soucis mais non j’ai toujours un timeout à la connexion sur le SMTP :
Jan 16 14:20:43 instance postfix/smtp[17991]: connect to smtp.office365.com[40.96.21.2]:587: Connection timed out
Jan 16 14:21:13 instance postfix/smtp[17991]: connect to smtp.office365.com[40.101.18.66]:587: Connection timed out
Jan 16 14:21:43 instance postfix/smtp[17991]: connect to smtp.office365.com[40.101.60.18]:587: Connection timed out
Jan 16 14:22:13 instance postfix/smtp[17991]: connect to smtp.office365.com[40.101.36.194]:587: Connection timed out
Jan 16 14:22:43 instance postfix/smtp[17991]: connect to smtp.office365.com[40.101.60.226]:587: Connection timed out
Je suis preneur d’une piste si vous en avez une.
Merci beaucoup.
Cordialement.
Anthony
Bonjour Benoît,
Je pense que c’est un problème de réseau et non un problème de config Postfix. Avez vous activé des règles de pare-feu en output ?
Essayez de vous connecter au port 587 de SMTP.office365.com via la commande : telnet smtp.office365.com 587
Vous devriez tomber sur un invit de commande SMTP sauf en cas de filtrage réseau.
Bonne journée.
Benoît
Bonjour Anthony,
Non il n’y avait aucune règles en output. Mon client a souhaité passer ses mails sur Google, et ça fonctionne, je n’en saurai donc pas plus malheureusement.
Merci pour votre réponse et bonne journée.
William
Bonjour,
Après avoir pas mal galéré sur d’autre tuto je suis tomber sur le votre.
Il est très complet, mais ça ne fonctionnait quand même pas pour moi.
Je suis sur CentOS7.
Il faut installer ce paquage la : cyrus-sasl-plain
Restart postfix et c’est bon. (il remplace celui si : libsasl2-modules)
Cordialement,
William
Thibault
Clair net précis, configuré a l’instant sur 2 bécanes sous Debian 10.5 et tout roule.
Merci beaucoup !
Charles BORCKE
Hello,
Pour ceux comme moi qui ont des « Connection timed out » sur le port 587 c’est un soucis de filtrage de ports avec votre F.A.I. : J’ai la même chose chez moi et j’ai cherché pendant des heures. Puis j’ai testé sur Azure (Sans succès), Amazon (Pareil…). Puis en testant sur une ligne « pro » ou le port 25 et 587 n’était pas filtré, la même configuration passait!
François
C’est parfait merci (testé sur CentOS 7)