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

Une place pour une véritable innovation. Partagez vos propres utilitaires créés avec la communauté Manjaro.
Questions et discussions sur la programmation et le codage.

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

Message par nam1962 » 06 Oct 2017, 13:02

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 :

Code : Tout sélectionner
sudo pacman -S xorg-server-xvfb
sudo pacman -S wkhtmltopdf


qui permet de :

Code : Tout sélectionner
xvfb-run wkhtmltopdf l'url/que/je/veux ~/Documents/lenomdemon.pdf



Pour envoyer les mails deux outils également :

Code : Tout sélectionner
sudo pacman -S mailutils


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

Code : Tout sélectionner
sudo pacman -S ssmtp


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

Code : Tout sélectionner
gksudo gedit /etc/ssmtp/ssmtp.conf


Mis dedans :

Code : Tout sélectionner
#
# /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

Code : Tout sélectionner
gksudo gedit /etc/ssmtp/revaliases


Mis dedans :

Code : Tout sélectionner
# 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):

Code : Tout sélectionner
#!/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) :

Code : Tout sélectionner
[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 :

Code : Tout sélectionner
[Unit]
Description=test jeudi

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

[Install]
 WantedBy=weekly-backup.target


Puis bien sûr :

Code : Tout sélectionner
systemctl start jeudi.timer



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

Une vérif avec :

Code : Tout sélectionner
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 ?
Xubuntu devel - Manjaro unstable - OpenSUSE tumbleweed (GeckoLinux) -Debian Testing
Trucs, astuces, tutos et analyses de l'open source dans l'almanet doLys
Avatar de l’utilisateur
nam1962
 
Message(s) : 667
Inscription : 13 Juin 2015, 09:30

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

Message par papajoke » 06 Oct 2017, 13:21

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:
Code : Tout sélectionner
hostname=moi@monserveur.fr
Manjaro STABLE - Linux 4.13/4.9 - zsh - Kde5/Cinnamon - Intel Core i3 - 6Go RAM - GeForce 405 video-nouveau - DD en MBR
portable Manjaro TESTING - zsh - XFCE - AMD V140 - 2Go RAM - ATI Radeon HD 4200
#mount /dev/archlinux /mnt/manjaro
Avatar de l’utilisateur
papajoke
Modérateur
 
Message(s) : 4809
Inscription : 02 Avr 2013, 18:25
Localisation : Nevers

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

Message par nam1962 » 06 Oct 2017, 13:31

Oups :

Code : Tout sélectionner
~]$ 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.


Code : Tout sélectionner
~]$ 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'.
~
~
~
~
~
~
~
~
~
~
~


Code : Tout sélectionner
~]$ 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.
Xubuntu devel - Manjaro unstable - OpenSUSE tumbleweed (GeckoLinux) -Debian Testing
Trucs, astuces, tutos et analyses de l'open source dans l'almanet doLys
Avatar de l’utilisateur
nam1962
 
Message(s) : 667
Inscription : 13 Juin 2015, 09:30

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

Message par papajoke » 06 Oct 2017, 13:50

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 ?
Manjaro STABLE - Linux 4.13/4.9 - zsh - Kde5/Cinnamon - Intel Core i3 - 6Go RAM - GeForce 405 video-nouveau - DD en MBR
portable Manjaro TESTING - zsh - XFCE - AMD V140 - 2Go RAM - ATI Radeon HD 4200
#mount /dev/archlinux /mnt/manjaro
Avatar de l’utilisateur
papajoke
Modérateur
 
Message(s) : 4809
Inscription : 02 Avr 2013, 18:25
Localisation : Nevers

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

Message par nam1962 » 06 Oct 2017, 14:31

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.
Xubuntu devel - Manjaro unstable - OpenSUSE tumbleweed (GeckoLinux) -Debian Testing
Trucs, astuces, tutos et analyses de l'open source dans l'almanet doLys
Avatar de l’utilisateur
nam1962
 
Message(s) : 667
Inscription : 13 Juin 2015, 09:30


Retour vers Contributions Manjaro / Programmation / Codage

Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 2 invité(s)