Logo Postfix

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 »)

    Jun 24 13:33:02 localhost postfix/smtp[29611]: BA1CA158EE6: to=, relay=smtp.office365.com[40.96.33.178]:587, delay=5.3, delays=0.01/0/0.2/5.1, dsn=5.7.57, status=bounced (host smtp.office365.com[40.96.33.178] said: 530 5.7.57 SMTP; Client was not authenticated to send anonymous mail during MAIL FROM (in reply to MAIL FROM command))
    Jun 24 13:33:02 localhost postfix/cleanup[1467]: 0D42F158D5B: message-id=
    Jun 24 13:33:02 localhost postfix/bounce[32053]: BA1CA158EE6: sender non-delivery notification: 0D42F158D5B
    Jun 24 13:33:02 localhost postfix/qmgr[20330]: 0D42F158D5B: from=, size=40739, nrcpt=1 (queue active)
    Jun 24 13:33:02 localhost postfix/qmgr[20330]: BA1CA158EE6: removed
    

  • 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:

    [root@localhost ~]# ping google.com
    PING google.com (172.217.20.46) 56(84) bytes of data.
    64 bytes from par10s09-in-f14.1e100.net (172.217.20.46): icmp_seq=1 ttl=48 time=248 ms
    64 bytes from par10s09-in-f14.1e100.net (172.217.20.46): icmp_seq=2 ttl=48 time=191 ms
    64 bytes from par10s09-in-f14.1e100.net (172.217.20.46): icmp_seq=3 ttl=48 time=127 ms
    

  • 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:

    Determining fastest mirrors
    
    Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=5&arch=x86_64&repo=os error was
    [Errno 4] IOError: 
    Error: Cannot find a valid baseurl for repo: base
    

    et la commande que j’utilise c’est :

    echo "text du message" | mail "From: xxx@xx" -s "sujet" xxx@xxx
    

  • Anthony

    On est d’accord que dans le fichier /etc/postfix/main.cf les paramètres sont préfixés par smtp_ et non smtpd_ ?

    Je parle principalement des options :

    smtp_sasl_auth_enable = yes
    smtp_sasl_security_options = noanonymous
    smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
    

  • 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 :

    Sep 23 09:24:02 LNX10 postfix/smtp[22606]: 5563A1E0702: replace: header From: SHP026A : From: relais@mondomaine.com
    Sep 23 09:24:07 LNX10 postfix/smtp[22606]: 5563A1E0702: to=, relay=smtp.office365.com[40.96.21.66]:587, delay=13, delays=0.06/0/7.6/5.8, dsn=5.7.60, status=bounced (host smtp.office365.com[40.96.21.66] said: 550 5.7.60 SMTP; Client does not have permissions to send as this sender (in reply to end of DATA command))
    

    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 :

    sender_canonical_classes = envelope_sender, header_sender
    sender_canonical_maps = regexp:/etc/postfix/sender_canonical_maps
    smtp_header_checks = regexp:/etc/postfix/header_check
    

    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 ?

    echo "test bad domain" | mail -a "From: coupieur@fax.mondomainefax.com" -s "test bad domain" mail@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é :

    echo "test bad domain" | mail -a "From: coupieur@fax.mondomainefax.com" -s "test bad domain" mail@mondomaine.com # Fonctionne
    echo "test bad domain" | mail -a "From: relais@mondomaine.com" -s "test bad domain" mail@mondomaine.com # Fonctionne
    

    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 :

    # postqueue -p        # Affiche la liste des message en file d'attente
    # postcat -q <MSG_ID> # Affiche le message MSG_ID
    # postsuper -h ALL    # Suspend les messages
    # postsuper -d ALL    # Supprime tous les message de la file d'attente
    

    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)

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.