Page 1 sur 1

Procédure pour envoyer une copie d'écran web par mail

Publié : 06 oct 2017, 13:02
par nam1962
Dans l'idée d'envoyer, par exemple tous les jeudis, un mail reprenant une page web, j'ai fait les procédures suivantes :

Installé de quoi convertir les pages en pdf :

sudo pacman -S xorg-server-xvfb
sudo pacman -S wkhtmltopdf


qui permet de :

xvfb-run wkhtmltopdf l'url/que/je/veux ~/Documents/lenomdemon.pdf



Pour envoyer les mails deux outils également :

sudo pacman -S mailutils


La touche [Tab] pour sélectionner : "pas de configuration"
Puis

sudo pacman -S ssmtp


Puis J'ai édité les deux fichiers de config de ssmtp :

gksudo gedit /etc/ssmtp/ssmtp.conf


Mis dedans :

#
# /etc/ssmtp.conf -- a config file for sSMTP sendmail.
#
# The person who gets all mail for userids < 1000
# Make this empty to disable rewriting.
root=monadresseemetteur@mondomaine.truc
AuthUser=monadresseemetteur@mondomaine.truc
AuthPass=monmotdepasse

# The place where the mail goes. The actual machine name is required
# no MX records are consulted. Commonly mailhosts are named mail.domain.com
# The example will fit if you are in domain.com and you mailhub is so named.
mailhub=monserveursmtp:465
UseTLS=YES

# Where will the mail seem to come from?
# rewriteDomain=y
# The full hostname
# hostname=localhost.localdomain
rewriteDomain=mondomaine
hostname=prefixedomaine
FromLineOverride=YES


(465 peut-être remplacé par 587 si Gmail ou autre truc bizarre - UseTLS=YES peut être remplacé par UseSSLTLS=YES si besoin)

Puis

gksudo gedit /etc/ssmtp/revaliases


Mis dedans :

# sSMTP aliases
#
# Format:   local_account:outgoing_address:mailhub
#
# Example: root:your_login@your.domain:mailhub.your.domain[:port]
# where [:port] is an optional port number that defaults to 25.
root:monadresseemetteur@mondomaine.truc:monserveursmtp:465
user:monadresseemetteur@mondomaine.truc:monserveursmtp:465


(465 peut-être remplacé par 587 si on veut émettre de Gmail ou autre truc bizarre)

Puis créé un script (mailjeudi.sh):

#!/bin/bash

xvfb-run wkhtmltopdf l'url/que/je/veux ~/Documents/lenomdemon.pdf

echo -e "Voilà le message tant attendu\nBien à toi\nAlfred" | mailx -s "Le mail du jeudi" -a ~/Documents/lenomdemon.pdf adressedemondestinataire@sondomaine.com


Jusque là ça fonctionne presque. (ça crée le pdf et envoie le mail chez moi, mais au lieu d'avoir monadresseemetteur@mondomaine.truc mais... ça arrive avec comme émetteur monlogin@mondomaine.truc)

Maintenant, Pour l'automatiser, plutôt que cron, j'ai voulu utiliser systemd timer :

J'ai créé un /etc/systemd/system/jeudi.timer (pas réglé sur jeudi, mais sur 10 secondes pour tester) :

[Unit]
Description= test jeudi

[Timer]
OnUnitActiveSec=10s
OnBootSec=10s

[Install]
WantedBy=timers.target


(le timer sera bien sûr à amender pour l'envoyer chaque jeudi)

Et un /etc/systemd/system/jeudi.service :

[Unit]
Description=test jeudi

[Service]
Type=oneshot
ExecStart=/home/monlogin/Desktop/mailjeudi.sh

[Install]
 WantedBy=weekly-backup.target


Puis bien sûr :

systemctl start jeudi.timer



Mais là, ça plante ! ni wkhtmltopdf, ni mailx ne passent !

Une vérif avec :

journalctl  -xe


me le confirment...

Est-ce une coquetterie de systemd, cron ferait il mieux , comment paramétrer cron dans ce cas ?

Et... comment avoir comme sender monadresse et pas monlogin ?

Re: Procédure pour envoyer une copie d'écran web par mail

Publié : 06 oct 2017, 13:21
par papajoke
salut,

tu ne nous remontes pas les erreurs :confus: mais je suppose que c'est ton service
1) dans ton service, il faut supprimer ton target ! (un copier/coller d'autre chose ?)
ensuite tu dois tester uniquement ton service systemctl start jeudi
Attention, la (seule) différence avec la console c'est qu'avec un service l'user est root, a voir si smtp fonctionne bien

dans ssmtp.conf j'ai:

hostname=moi@monserveur.fr

Re: Procédure pour envoyer une copie d'écran web par mail

Publié : 06 oct 2017, 13:31
par nam1962
Oups :

~]$ systemctl start jeudi
Job for jeudi.service failed because the control process exited with error code.
See "systemctl  status jeudi.service" and "journalctl  -xe" for details.


~]$ systemctl  status jeudi.service
lines 1--1...skipping...
● jeudi.service - test jeudi
   Loaded: loaded (/etc/systemd/system/jeudi.service; disabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since Fri 2017-10-06 14:29:09 CEST; 3min 13s ago
  Process: 5950 ExecStart=/home/asatysco2/Desktop/mailjeudi.sh (code=exited, status=4)
 Main PID: 5950 (code=exited, status=4)

oct. 06 14:29:08 ordi2 wkhtmltopdf[5971]: QPainter::drawGlyphRun: Painter not active
oct. 06 14:29:08 ordi2 wkhtmltopdf[5971]: QPainter::setPen: Painter not active
oct. 06 14:29:08 ordi2 mailjeudi.sh[5950]: /usr/sbin/xvfb-run: line 170:  5971 Segmentation fault      (core dumped) DISPLAY=:$SERVERNUM XAUTHORITY=$A
oct. 06 14:29:08 ordi2 mailjeudi.sh[5950]: mail: Failed to create encoded message: Illegal byte sequence
oct. 06 14:29:08 ordi2 mailjeudi.sh[5950]: /root/dead.letter 5/87
oct. 06 14:29:08 ordi2 mailjeudi.sh[5950]: mail: ... message not sent
oct. 06 14:29:08 ordi2 systemd[1]: jeudi.service: Main process exited, code=exited, status=4/NOPERMISSION
oct. 06 14:29:09 ordi2 systemd[1]: Failed to start test jeudi.
oct. 06 14:29:09 ordi2 systemd[1]: jeudi.service: Unit entered failed state.
oct. 06 14:29:09 ordi2 systemd[1]: jeudi.service: Failed with result 'exit-code'.
~
~
~
~
~
~
~
~
~
~
~


~]$ journalctl  -xe
                                               Stack trace of thread 5987:
                                               #0  0x00007f0d20e0f38d pthread_cond_wait@@GLIBC_2.3.2 (libpthread.so.0)
                                               #1  0x00007f0d2562748d __gthread_cond_wait (libstdc++.so.6)
                                               #2  0x00007f0d22ec38d9 _ZN3WTF10ParkingLot17parkConditionallyEPKvSt8functionIFbvEES3_IFvvEENSt6chrono10
                                               #3  0x00007f0d22ec25e0 n/a (libQt5WebKit.so.5)
                                               #4  0x00007f0d22ec6898 n/a (libQt5WebKit.so.5)
                                               #5  0x00007f0d22ef8eea n/a (libQt5WebKit.so.5)
                                               #6  0x00007f0d20e0908a start_thread (libpthread.so.0)
                                               #7  0x00007f0d2509c1bf __clone (libc.so.6)
                                               
                                               Stack trace of thread 5983:
                                               #0  0x00007f0d20e0f38d pthread_cond_wait@@GLIBC_2.3.2 (libpthread.so.0)
                                               #1  0x00007f0d2562748d __gthread_cond_wait (libstdc++.so.6)
                                               #2  0x00007f0d22ec38d9 _ZN3WTF10ParkingLot17parkConditionallyEPKvSt8functionIFbvEES3_IFvvEENSt6chrono10
                                               #3  0x00007f0d22842207 n/a (libQt5WebKit.so.5)
                                               #4  0x00007f0d22ec6898 n/a (libQt5WebKit.so.5)
                                               #5  0x00007f0d22ef8eea n/a (libQt5WebKit.so.5)
                                               #6  0x00007f0d20e0908a start_thread (libpthread.so.0)
                                               #7  0x00007f0d2509c1bf __clone (libc.so.6)
                                               
                                               Stack trace of thread 5986:
                                               #0  0x00007f0d20e0f38d pthread_cond_wait@@GLIBC_2.3.2 (libpthread.so.0)
                                               #1  0x00007f0d2562748d __gthread_cond_wait (libstdc++.so.6)
                                               #2  0x00007f0d22ec38d9 _ZN3WTF10ParkingLot17parkConditionallyEPKvSt8functionIFbvEES3_IFvvEENSt6chrono10
                                               #3  0x00007f0d22ec25e0 n/a (libQt5WebKit.so.5)
                                               #4  0x00007f0d22ec6898 n/a (libQt5WebKit.so.5)
                                               #5  0x00007f0d22ef8eea n/a (libQt5WebKit.so.5)
                                               #6  0x00007f0d20e0908a start_thread (libpthread.so.0)
                                               #7  0x00007f0d2509c1bf __clone (libc.so.6)
-- Subject: Le processus 5971 (wkhtmltopdf) a généré un fichier « core »
-- Defined-By: systemd
-- Support: https://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- Documentation: man:core(5)
--
-- Le processus 5971 (wkhtmltopdf) a planté et généré un fichier « core ».
--
-- Cela indique généralement une erreur de programmation dans le programme
-- incriminé, et cela devrait être notifié à son concepteur comme un défaut (bug).


Sinon, le smtp fonctionne : à chaque fois que je lance le script à la main, je reçois le mail.

Re: Procédure pour envoyer une copie d'écran web par mail

Publié : 06 oct 2017, 13:50
par papajoke
ok c'est donc ton programme wkhtmltopdf qui plante
je ne connais pas ce programme, a vue de nez, lui passer dbus voir qu'il faut lui indiquer un DISPLAY ?

Re: Procédure pour envoyer une copie d'écran web par mail

Publié : 06 oct 2017, 14:31
par nam1962
Merci !
Bon, je ne connais pas du tout dbus, aussi !
Sinon, c'est à cause de ce style de doute que j'ai ajouté le xvfb-run car le script, lui, fonctionne sans que je ne voie la moindre sollicitation d'un moniteur avec et sans xvbf.
C'est systemd qui semble ne pas aimer.