Configurer son système pour l'envoi de mail en php.
Le contexte, l'auto-hébergement.
Deux solutions, msmtp ou postfix.
La première solution permet d'envoyer des mails depuis son site en se servant du client msmtp et d'un serveur SMTP extérieur, comme celui de google qui fait office de relais.
L'avantage de cette première solution est d'être légère et facile, évitant d'avoir à gérer un serveur IMAP et SMTP. Le désavantage c'est que le site pourra seulement émettre des mails, mais pas en recevoir sur sa propre adresse mail bien officielle et qui serait celle du domaine. Si on veut que son site puisse recevoir des messages, le travail sera côté développement php, par exemple, en proposant au visiteur du site une page du site consacrée à l'envoi de messages via un simple submit qui envoie à une adresse mail dédiée au site les messages ainsi rédigés. Bref, dans ce cas, on utilise les serveurs SMPT des autres.
La deuxième solution, c'est d'installer un client ET un serveur SMTP, comme postfix, mais cela impose si on fait de l'auto-hébergement d'ouvrir le port 22 de sa box, et donc d'apprendre à sécuriser un serveur SMTP.
apt install msmtp msmtp-mta
* On édite le fichier de configuration de msmtp /etc/msmtprc
pour se servir du serveur SMTP de son fournisseur de domaine, par exemple gandi.
vim /etc/msmtprc
account default host mail.gandi.net from admin@comgocom.pw auto_from off add_missing_from_header on auth plain port 587 user application@comgocom.pw password mot-de-passe-de-l'adresse-mail-gandi-associée-au-nom-de-domaine-du-site-web logfile /var/log/msmtp tls on tls_starttls on tls_trust_file /etc/ssl/certs/ca-certificates.crt
nom de domain → boite mail et redirection → clic sur le mail associé
vim /etc/php/7.3/apache2/php.ini
sendmail_path = /usr/bin/msmtp -t
Il ne reste plus qu'à ajouter au code source de son site, une fonction php qui permet d'envoyer un mail.
Il faut bien sûr que le site est récupéré et conservé l'adresse à laquelle la fonction d'envoi s'adresse.
private function envoyerMailConfirmation($pseudo, $destinataire, $prenom, $nom, $motpasse) { $cle = md5(microtime(TRUE)*100000); // Préparation du mail contenant le lien d'activation $sujet = "Activer votre compte" ; $entete = "From: inscription@essai.local" ; $message = 'Bienvenue '.$prenom. ' '.$nom.', Votre pseudonyme est '.$pseudo.'. Votre mot de passe est '.$motpasse.'. Votre cle est : '.$cle.' Pour activer votre compte, veuillez cliquer sur le lien ci dessous ou copier/coller dans votre navigateur internet. http://mondomaine.bla_ou_localhost/public/pages/activationMail.php?log='.urlencode($pseudo).'&cle='.urlencode($cle).' --------------- Ceci est un mail automatique, Merci de ne pas y répondre.'; mail($destinataire, $sujet, utf8_decode($message), $entete) ; // Envoi du mail $this->requete->insererCle($pseudo, $cle); }
$destinataire
recevra un mail contenant son pseudo son mot de passe et une clé.C'est là un exemple, et pour le faire fonctionner, il faut créer une page “activationMail.php” sur son site où le lien dans le mail faire arriver.
vim /etc/php/7.3/cli/php.ini
sendmail_path = /usr/bin/msmtp -t
/etc/hosts
more /etc/hosts
127.0.0.1 localhost 127.0.1.1 Eve 192.168.0.18 db 192.168.0.18 comgocom.pw 192.168.1.80 comgocom.pw # The following lines are desirable for IPv6 capable hosts ::1 localhost ip6-localhost ip6-loopback ff02::1 ip6-allnodes ff02::2 ip6-allrouters
Il faut aller sur le compte de son fournisseur d'accès internet et rediriger le port 25 sur l'ip fixe de la machine où est installé postfix.
Il faut décocher la case “Autoriser l'envoi de courriels…” pour émettre depuis postfix
apt install mailutils
apt install dnsutils
apt-get install opendkim opendkim-tools
apt install postfix
kate /etc/postfix/main.cf
# See /usr/share/postfix/main.cf.dist for a commented, more complete version # Debian specific: Specifying a file name will cause the first # line of that file to be used as the name. The Debian default # is /etc/mailname. #myorigin = /etc/mailname smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU) biff = no # appending .domain is the MUA's job. append_dot_mydomain = no # Uncomment the next line to generate "delayed mail" warnings #delay_warning_time = 4h readme_directory = no # See http://www.postfix.org/COMPATIBILITY_README.html -- default to 2 on # fresh installs. compatibility_level = 2 # TLS parameters smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key smtpd_use_tls=yes smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache # See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for # information on enabling SSL in the smtp client. smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination myhostname = comgocom.pw alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases #myorigin = /etc/mailname mydestination = $myhostname, comgocom.pw, Eve, localhost.$mydomain, $mydomain relayhost = mynetworks = 127.0.0.0/8 192.168.1.0/24 192.168.0.0/24 [::ffff:127.0.0.0]/104 [::1]/128 mailbox_size_limit = 0 recipient_delimiter = + inet_interfaces = all inet_protocols = all
kate /etc/hosts
127.0.0.1 localhost 127.0.1.1 Eve 192.168.0.18 db 192.168.0.18 comgocom.pw mail.comgocom.pw 192.168.1.80 comgocom.pw mail.comgocom.pw # The following lines are desirable for IPv6 capable hosts ::1 localhost ip6-localhost ip6-loopback ff02::1 ip6-allnodes ff02::2 ip6-allrouters
hostnamectl set-hostname comgocom.pw
kate /etc/aliases
# /etc/aliases mailer-daemon: postmaster postmaster: root nobody: root hostmaster: root usenet: root news: root webmaster: root www: root ftp: root abuse: root noc: root security: root root: nathalie admin: nathalie
newaliases
kate /etc/opendkim.conf
Socket inet:12301@localhost
kate /etc/default/opendkim
SOCKET="inet:12301@localhost"
kate /etc/postfix/main.cf
On ajoute les deux lignes suivantes :
milter_protocol = 2 milter_default_action = accept
systemctl restart postfix
mkdir /etc/opendkim && mkdir /etc/opendkim/keys
kate /etc/opendkim/TrustedHosts
127.0.0.1 localhost 192.168.0.1/24 192.168.1.1/24 *.comgocom.pw
kate /etc/opendkim/KeyTable
mail._domainkey.comgocom.pw comgocom.pw:mail:/etc/opendkim/keys/comgocom.pw/mail.private
kate /etc/opendkim/SigningTable
*@comgocom.pw mail._domainkey.comgocom.pw
cd /etc/opendkim/keys
mkdir comgocom.pw
cd comgocom.pw
opendkim-genkey -s mail -d comgocom.pw
chown opendkim:opendkim mail.private
TXT
more /etc/opendkim/keys/comgocom.pw/mail.txt
mail._domainkey IN TXT ( "v=DKIM1; h=sha256; k=rsa; " "p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0+srrYaYVjb47PPRNKnmw9SpDaLyZDyF74g2xhfbo+Hg0OeOSGiTLVb9YBMQnWrAcWHroUDJr6lSjDpQ/A4aON+XAdyHGmdaC/idLYLkIIwDxoLQBGJrfjfhf+pVaQj3sWI0 IiTIOltzyiIK4k7yNlaZqcpfOp2i2bP0adcfPyRFdqcWKob0bHStk2OFGRTq8C9YxhdatHM1yW" "YmeWelo1xH99D79XAjt59CAyf3QiLcI8cfzTkD/846VKPr2ooObP5mMIpOTqO74euIRSRrtYktTDYlbxbGLfb3q7gdObSfLP18b0blneCE2Osd3Q0E1KW98d80ESEmZJRyyhI0TwIDAQAB" ) ; ----- DKIM key mail for comgo com.pw
service postfix restart
service opendkim restart
tail /var/log/mail.info
ls -lrt /var/log