Skip directly to content

sendmail

Portrait de zozodesbois
on sam, 15/09/2012 - 10:40

  1. Utilisation
  2. Remerciements
  3. Format du message
  4. SMTP non sécurisé
  5. SMTP sécurisé
  6. SMTP sécurisé pour Gmail
  7. Vérification
  8. Un mail de test
  9. Envoyez vos mails
  10. Anexe
Info Commande faisant parti de Busybox
Dans le Firmware GeekyHMB
Les mails sécurisés nécessitent GeekyHMB pack Optware
Droits Logiciel libre
Site officiel  
Ref http://www.mail-archive.com/busybox

Utilisation

La commande sendmail va nous permettre d'envoyer des mails. Je suis certain que vous trouverez plein d'applications utiles pour cette sympathique commande.

Les utilitaires de mails se connectent sur le serveur POP3 de votre fournisseur pour récupérer les mails de votre messagerie. Nous ne nous en servirons pas ici.

Pour envoyer, il faudra se connecter sur un serveur SMTP. A cause des spammeurs, de plus en plus de fournisseurs de messagerie sécurisent leurs accès:

  • Suivant votre fournisseur d'accès Internet vous serez obligé d'utiliser le SMTP de votre hébergeur Free, Numericable, Neuf, Orange... vous ne pourrez pas toujours utiliser celui de gmail ou un autre... cherchez du côté des docs de votre hébergeur pour le savoir.
  • La sécurité SSL, est basée sur un échange de clés et de certificats. C'est un procédé qui permet de sécuriser les échanges sur Internet, pas seulement les mails, mais aussi l'accès à des sites, ou des transferts de fichiers, etc...

La méthode non sécurisée est la plus simple, elle n'est pas vraiment risquée si vous utilisez le SMTP de votre fournisseur d'accès (en principe, on ne peut pas utiliser le SMTP d'un fournisseur d'accès ailleurs que sur son réseau. Comme il connaît ses clients, il peut facilement bloquer les fraudeurs).

Mais si vous avez le choix, optez pour la sécurité.

Remerciements

Merci à Vladimir DRONNIKOV pour son aide pour l'utilisation de sendmail.

Format du message

Nous allons constituer le message dans un simple fichier texte. Vous pouvez le créer en faisant un copier coller de la commande suivante en Telnet

cat >/tmp/mail.txt <<_EOF_
From: Votre surnom
Subject: le sujet que vous voulez

Le contenu de votre message
sur plusieurs lignes
_EOF_

Ou bien utiliser vi ou nano, ce qui compte c'est que sa structure ressemble à ceci

From: Zozodesbois
Subject: Petit exemple de mail
Le contenu de votre message
sur plusieurs lignes

SMTP non sécurisé

Voici la commande qui va vous permettre d'envoyer le fichier du message précédemment créé (si le fichier s'appelle mail.txt et qu'il est situé dans /tmp)

cat /tmp/mail.txt | sendmail -Ssmtp.numericable.fr:25 -f'mon.mail@numericable.fr' pierre@destinataire1.com paul@destinataire2.com

Ceci est un exemple avec le SMTP non sécurisé de Numericable. (25 c'est le numéro du port du SMTP de Numericable)

C'est très simple lorsque l'on passe par un SMTP non sécurisé, il n'y a pas besoin d'aller plus loin.

SMTP sécurisé

Le SMTP sécurisé va avoir besoin de vous identifier, il utilisera tout un processus pour s'assurer de votre identité par l'échange de Certificats. Avant d'arriver à envoyer un simple petit mail, il va falloir prendre du temps pour configurer votre environnement.

Voici tout ce qu'il faudra faire avant de pouvoir envoyer un petit mail

  • Créer une clé de chiffrement
  • Générer une clé d'échange et un certificat
  • Récupérez un certificat root reconnu par votre fournisseur de messagerie

SMTP sécurisé pour Gmail

Allez dans le dossier de votre future clé Privée (que vous ne devez donner à personne).

cd /opt/ssl/private/

Générer votre clé de chiffrement ( ici DSA, mais on peut très bien utiliser une clé RSA avec une passphrase ).

openssl dsaparam 1024 -out dsa1024 -out dsa1024.pem

Generating DSA parameters, 1024 bit long prime
This could take some time
.+....+++++++++++++++++++++++++++++++++++++++++++++++++++*
..+............+.....+.....+..+.+............+.....+.+..+.+...+....................+...............

Puis générez votre clé d'échange et votre certificat

openssl req -x509 -nodes -days 3650 -newkey dsa:dsa1024.pem -out /opt/ssl/certs/myCert.pem -keyout /opt/ssl/certs/myKey.pem

Generating a 1024 bit DSA private key
writing new private key to '/opt/ssl/certs/myKey.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:FR
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:MA VILLE
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, YOUR name) []:MON NOM
Email Address []:mon_mail@gmail.com

Répondez aux questions posées (Pays, Ville, Nom et adresse mail).

Vous venez de générer votre clé SSL et votre certificat SSL

/opt/ssl/certs/myCert.pem
/opt/ssl/certs/myKey.pem

Allez dans le dossier des certificats

cd /opt/ssl/certs

Faites un lien pour faire reconnaître votre certificat

ln -s /opt/ssl/certs/myCert.pem /opt/ssl/certs/CAcert.pem

Récupérez un certificat root reconnu par Gmail (pas nécessaire, il est déjà dans le Pack Optware du GeekyHMB).

curl -k -o Equifax_Secure_Certificate_Authority.pem \
https://www.geotrust.com/resources/root_certificates/\
certificates/Equifax_Secure_Certificate_Authority.cer

Vérifions l'intégrité de la clé et récupérons le "hash"

openssl x509 -in Equifax_Secure_Certificate_Authority.pem -fingerprint -subject -issuer -serial -hash -noout

MD5 Fingerprint=67:CB:9D:C0:13:24:8A:82:9B:B2:17:1E:D1:1B:EC:D4
subject= /C=US/O=Equifax/OU=Equifax Secure Certificate Authority
issuer= /C=US/O=Equifax/OU=Equifax Secure Certificate Authority
serial=35DEF4CF
594f1775

Créer un lien avec le numéro de hash (en vert) suivi d'un .0 (0 est un numéro séquentiel en fonction des hash qui peuvent être identiques).

ln -s Equifax_Secure_Certificate_Authority.pem 594f1775.0

Vérification

La commande suivante va vérifier que votre configuration est bien reconnue par le smtp de gmail

openssl s_client -CApath /opt/ssl/certs/ -showcerts -connect smtp.gmail.com:587 -starttls smtp

CONNECTED(00000003)
depth=2 /C=US/O=Equifax/OU=Equifax Secure Certificate Authority
verify return:1
depth=1 /C=US/O=Google Inc/CN=Google Internet Authority
verify return:1
depth=0 /C=US/ST=California/L=Mountain View/O=Google Inc/CN=smtp.gmail.com
verify return:1
---
Certificate chain
 0 s:/C=US/ST=California/L=Mountain View/O=Google Inc/CN=smtp.gmail.com
   i:/C=US/O=Google Inc/CN=Google Internet Authority
 1 s:/C=US/O=Google Inc/CN=Google Internet Authority
   i:/C=US/O=Equifax/OU=Equifax Secure Certificate Authority
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIDWzCCAsSgAwIBAgIKFeQVggADAAA7NjANBgkqhkiG9w0BAQUFADBGMQswCQYD
VQQGEwJVUzETMBEGA1UEChMKR29vZ2xlIEluYzEiMCAGA1UEAxMZR29vZ2xlIElu
dGVybmV0IEF1dGhvcml0eTAeFw0xMTExMTgwMTU3MTdaFw0xMjExMTgwMjA3MTda
MGgxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1N
b3VudGFpbiBWaWV3MRMwEQYDVQQKEwpHb29nbGUgSW5jMRcwFQYDVQQDEw5zbXRw
LmdtYWlsLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAuK+t5ZRq6c3K
kWPwLuIcPa6DgiBURaQK9akP4OBoXKJ6bqYIQWsS4C3RgnOaGaDENadxHSNZ5Qpl
Vqg2S54N54SM5OXwOq0NtrqdlbhgigB53TZouiJvnLDxxIexSOn2Gx1qyZF2z8Ii
MoUhHuStWgW5YoOHje8z6K9xQdYkQp0CAwEAAaOCASwwggEoMB0GA1UdDgQWBBTs
OL4jbtJ5l8B6/eoEvv30KEiTrjAfBgNVHSMEGDAWgBS/wDDr9UMRPme6npH7/Gra
42sSJDBbBgNVHR8EVDBSMFCgTqBMhkpodHRwOi8vd3d3LmdzdGF0aWMuY29tL0dv
b2dsZUludGVybmV0QXV0aG9yaXR5L0dvb2dsZUludGVybmV0QXV0aG9yaXR5LmNy
bDBmBggrBgEFBQcBAQRaMFgwVgYIKwYBBQUHMAKGSmh0dHA6Ly93d3cuZ3N0YXRp
Yy5jb20vR29vZ2xlSW50ZXJuZXRBdXRob3JpdHkvR29vZ2xlSW50ZXJuZXRBdXRo
b3JpdHkuY3J0MCEGCSsGAQQBgjcUAgQUHhIAVwBlAGIAUwBlAHIAdgBlAHIwDQYJ
KoZIhvcNAQEFBQADgYEAQiMlHuQLRFqR10UsSg5WTNe3vagbdnBLAkdhvAf90B5a
9beBxJH2/ylTSIGfD2uceAqzcsQe6Ouy4C9r3rz86qA1dhdtIcPg6uoZb+E2qhE5
UaOJOPO4rHInX9kscBxh+baHbpBMh+ch6v5L8plss8hd0id8C4g10YKzwcgPYlQ=
-----END CERTIFICATE-----
subject=/C=US/ST=California/L=Mountain View/O=Google Inc/CN=smtp.gmail.com
issuer=/C=US/O=Google Inc/CN=Google Internet Authority
---
No client certificate CA names sent
---
SSL handshake has read 1904 bytes and written 341 bytes
---
New, TLSv1/SSLv3, Cipher is RC4-SHA
Server public key is 1024 bit
SSL-Session:
    Protocol  : TLSv1
    Cipher    : RC4-SHA
    Session-ID: 58BFE4C9350FC74EEB1C00367896724189F8D4FBA4C381B215A445F3BC351DB9
    Session-ID-ctx:
    Master-Key: A3B90C5A86BA7A0327A08E35A26B2AAEF929B6401CAF523F7F6895010F2CFC4D645A317EB9E700B822C98E05550CA9E9
    Key-Arg   : None
    Start Time: 1348550920
    Timeout   : 300 (sec)
    Verify return code: 0 (ok)
---
250-mx.google.com at your service, [xxx.xxx.xxx.xxx]
250-SIZE 35882577
250-8BITMIME
250-STARTTLS
250 ENHANCEDSTATUSCODES

Pour sortir d'ici, tapez la commande

quit

Ce qui compte c'est d'avoir ce retour de code 0 (ok) à la fin du rapport.
La notion de "depth" est intéressante pour voir comment sont répartis les niveaux de Certificats. Si ça bloque quelque part, cela nous donne une indication sur le dernier bon Certificat.

Un mail de test

Maintenant que nous avons vérifié que notre connexion SSL fonctionne bien, nous allons envoyer un mail de test verbeux pour voir si tout se passe bien, si vous avez mal saisi quelque chose, ce mode peut vous aider à trouver l'erreur.

cat /tmp/mail.txt | sendmail -vH 'exec openssl s_client -CApath /opt/ssl/certs/ -quiet -connect smtp.gmail.com:465' -f'mon.mail@gmail.com' -au'mon.mail@gmail.com' -ap'mon_mot_de_passe' pierre@gmail.com paul@gmail.com

sendmail: send:'NOOP'
depth=2 /C=US/O=Equifax/OU=Equifax Secure Certificate Authority
verify return:1
depth=1 /C=US/O=Google Inc/CN=Google Internet Authority
verify return:1
depth=0 /C=US/ST=California/L=Mountain View/O=Google Inc/CN=smtp.gmail.com
verify return:1
sendmail: recv:'220 mx.google.com ESMTP fb19sm10888453wid.1'
sendmail: recv:'250 2.0.0 OK fb19sm10888453wid.1'
sendmail: send:'EHLO none'
sendmail: recv:'250-mx.google.com at your service, [xxx.xxx.xxx.xxx]'
sendmail: recv:'250-SIZE 35882577'
sendmail: recv:'250-8BITMIME'
sendmail: recv:'250-AUTH LOGIN PLAIN XOAUTH XOAUTH2'
sendmail: recv:'250 ENHANCEDSTATUSCODES'
sendmail: send:'AUTH LOGIN'
sendmail: recv:'334 VXNlcy5hbUU6'
sendmail: send:''
sendmail: recv:'334 UHFyc3dvceQ6'
sendmail: send:''
sendmail: recv:'235 2.7.0 Accepted'
sendmail: send:'MAIL FROM:<mon.mail@gmail.com>'
sendmail: recv:'250 2.1.0 OK fb19sm10888453wid.1'
sendmail: send:'RCPT TO:<mon.mail@gmail.com>'
sendmail: recv:'250 2.1.5 OK fb19sm10888453wid.1'
sendmail: send:'DATA'
sendmail: recv:'354  Go ahead fb19sm10888453wid.1'
sendmail: send:'From: Votre surnom'
sendmail: send:'Subject: le sujet que vous voulez'
sendmail: send:'To: mon.mail@gmail.com'
sendmail: send:''
sendmail: send:'Le contenu de votre message'
sendmail: send:'sur plusieurs lignes'
sendmail: send:'.'
sendmail: recv:'250 2.0.0 OK 1348551264 fb19sm10888453wid.1'
sendmail: send:'QUIT'
read:errno=0
sendmail: recv:'221 2.0.0 closing connection fb19sm10888453wid.1'

Envoyez vos mails

Voici la syntaxe qu'il vous faudra utiliser pour envoyer un mail par GMail

cat /tmp/mail.txt | sendmail -H 'exec openssl s_client -CApath /opt/ssl/certs/ -quiet -tls1 -connect smtp.gmail.com:465' -f'mon.mail@gmail.com' -au'mon_compte_gmail@gmail.com' -ap'mon_mot_de_passe' pierre@destination.com

Anexe

Usage: sendmail [OPTIONS] [RECIPIENT_EMAIL]...

Read email from stdin and send it

Standard options:
        -t              Read additional recipients from message body
        -f SENDER       Sender (required)
        -o OPTIONS      Various options. -oi implied, others are ignored
        -i              -oi synonym. implied and ignored

Busybox specific options:
        -v              Verbose
        -w SECS         Network timeout
        -H 'PROG ARGS'  Run connection helper
                        Examples:
                        -H 'exec openssl s_client -quiet -tls1 -starttls smtp
                                -connect smtp.gmail.com:25' <email.txt
                                [4<username_and_passwd.txt | -auUSER -apPASS]
                        -H 'exec openssl s_client -quiet -tls1
                                -connect smtp.gmail.com:465' <email.txt
                                [4<username_and_passwd.txt | -auUSER -apPASS]
        -S HOST[:PORT]  Server
        -auUSER         Username for AUTH LOGIN
        -apPASS         Password for AUTH LOGIN

Other options are silently ignored; -oi -t is implied
Use makemime to create emails with attachments
Votez: 
Pas encore de vote