L'utilisation de Raspbian et Ubunntu 16.04 LTS nécessite donc une solution Linux générique.
L'exigence est simple:
J'ai besoin d'un moyen d'envoyer des messages électroniques sur une seule ligne à partir de la ligne de commande.
J'ai créé un compte gmail uniquement pour ce Rpi3 particulier, avec l'adresse [email protected] - sans 2FA
Alors maintenant, je dois pouvoir envoyer des messages électroniques sur une ligne de n'importe où (y compris cron) sans intervention de l'utilisateur.
Je voudrais également qu'il puisse envoyer des fichiers texte; fondamentalement, n'importe quoi stdin
.
Réponses:
La réponse la plus simple à l'envoi de messages sur une seule ligne via gmail est d'utiliser ssmtp
Installez-le avec les commandes suivantes:
Modifier
/etc/ssmtp/ssmtp.conf
pour ressembler à ceci:Envoyez un one-liner comme ceci:
ou
Ensuite, fidèle à * nix, vous obtenez simplement l'invite en quelques secondes.
Vérifiez votre compte [email protected], et le tour est joué!
Cela fonctionne également bien lors de l'envoi d'un fichier, comme suit:
Et le programme apparaîtra dans la boîte aux lettres
Si le fichier est un fichier texte, il peut avoir une première ligne indiquant
Subject: xxxxxx
Cela peut être utilisé avec divers travaux cron peut m'envoyer des données avec des lignes d'objet indiquant le contenu.
Cela fonctionnera avec tout ce qui prépare un message qui est canalisé dans ssmtp via stdin.
Pour plus de détails tels que la sécurisation de ces fichiers contre d'autres utilisateurs et autres, consultez cet article:
Envoyer un e-mail à partir de la ligne de commande du Raspberry Pi
Assurez-vous également de regarder ci-dessous la réponse publiée par
Rui
sur le verrouillage de l'FROM:
adresse qui pourrait être modifiée dans les fichiers de messages formatés, si nécessaire.Maintenant, si seulement je pouvais comprendre comment envoyer des SMS de la même manière.
la source
ssmtp
dans mes VMs, très léger. +1sendmail
seul n'a pas le MTA - Mail Transport Agent pour communiquer en dehors de la machine. Par défaut, comme Unixen est multi-utilisateurs par conception,sendmail
il enverra des messages à d'autres utilisateurs dans la même boîte mais pas à l'extérieur.ssmtp
est le MTA que je pense est le plus simple à configurer pour gmail.ssmtp
n'est qu'un des nombreux wrappers Sendmail. Tous ceux-ci acceptent un message sur une entrée standard et éventuellement une liste d'adresses en tant qu'arguments de ligne de commande, et ils offrent tous un binaire nommésendmail
qui implémente (au moins les fonctionnalités de base de) l'API de ligne de commande Sendmail traditionnelle. Mais à proprement parler, ce message doit être un message RFC822 bien formé. Au minimum, il doit avoir un en-Subject:
tête.(Avec
ssmtp
,sendmail
est juste un lien symbolique versssmtp
. Postfix, Exim, et je crois que tous les autres MTA quiProvides: mail-transport-agent
ont un arrangement similaire, sauf bien sûrsendmail
où lesendmail
binaire est "la vraie chose".)Plus généralement, vous pouvez reconstituer un simple e-mail avec un document ici.
(L'
-t
option Sendmail indique de prendre la liste des destinataires à partir des en-têtes du message que vous recevez sur une entrée standard. Le chemin précis vers Sendmail varie selon les plates-formes.)Une autre variante courante consiste à combiner la sortie de quelques commandes. Prenez soin d'avoir une ligne vide (un «cou») entre les en-têtes et le corps du message.
Pour tout ce qui dépasse les messages texte ASCII très simples, vous devez comprendre comment composer un message MIME approprié, auquel cas il est généralement plus judicieux d'utiliser un outil comme
mutt
. Certaines plateformes ont unmail
oumailx
qui sait comment envoyer des pièces jointes et du texte non ASCII, mais ce n'est pas entièrement portable.Le défi ici n'est pas de trouver un client qui peut prendre un message électronique et tenter de l'envoyer, c'est de le configurer pour les spécificités de Gmail, ce qui nécessite que le MTA connaisse le nom d'utilisateur et le mot de passe à utiliser pour le serveur distant afin pour pouvoir l'utiliser comme hôte intelligent sortant.
Dans les coulisses, la plupart des clients aiment
mutt
,mailx
, etc généralement juste courirsendmail
dans les coulisses pour faire passer le message le système.la source
Ajout à la propre réponse de l'OP:
Lors de la configuration
ssmtp
, vous pouvez également interdire ou autoriser les utilisateurs à définir le De, et également remplacer le domaine; vous souhaiterez peut-être le faire pour plusieurs raisons, notamment le message ne tombant pas dans le dossier Spam.Vous pouvez ajouter à
/etc/ssmtp/ssmtp.conf
:Veuillez noter que même si OUI peut être utilisé dans une framboise domestique, il peut ne pas être recommandé dans un système multi-utilisateur du point de vue de la sécurité.
la source
Quel est le problème avec "mail"?
"mail" étant / etc / un lien alternatif vers / usr / bin / bsd-mailx depuis le paquet bsd-mailx. Je pense que c'est là par défaut. Grand utilitaire pour envoyer du courrier à partir de scripts cron, par exemple.
Fonctionne également sur Ubuntu et FreeBSD.
la source
mailx
est juste une extrémité avant. Il nécessite que certains MTA soient configurés pour réellement retirer le message du système local. Il existe plusieurs versions incompatibles couramment utilisées, mais si votre plate-forme cible est uniquement Debian, vous pouvez vous fier à un comportement BSD relativement récent.Je suis vraiment partial à utiliser
mailx
pour cela:la source
-a
option en particulier serait merveilleuse si elle était universellement prise en charge, mais parcourez simplement lesmailx
questions ici pour voir que ce n'est certainement pas le cas.J'utilise sendEmail pour envoyer de simples e-mails automatisés via le serveur SMTP d'un fournisseur externe:
Je passe tout sur une seule ligne, donc faire cela sur une ligne de commande afficherait probablement tous les paramètres (y compris le mot de passe smtp) à tous les utilisateurs, s'ils s'exécutent un
ps -ef
moment, j'exécute la commande. Je l'utilise dans un script shell.la source
Mon serveur est CEntOS 7, et a sendmail mais pas mailx etc. Plutôt que d'installer un nouveau programme, j'ai testé en utilisant sendmail directement, et j'ai constaté que cela fonctionne:
Pour moi, cela semble être le moyen le plus simple d'envoyer un court e-mail, car il ne nécessite pas d'exécuter ou de configurer un serveur ou un démon, et peut être effectué en une seule ligne de commande.
L'idée est qu'un message m'avertira simplement qu'un certain programme a jeté une erreur, sans révéler aucune information potentiellement confidentielle, puis je vais SSH au serveur pour inspecter ses journaux. De cette façon, vous n'avez pas à vous soucier de complications telles que la connexion de fichiers ou le cryptage du transport.
Remarques:
-e
indique à echo d'interpréter '\ n' et d'autres échappements.-t
indique à sendmail d'obtenir les adresses des destinataires à partir de «À:» dans l'en-tête du message.tail /var/log/maillog
pour voir les messages d'erreur.la source
sendmail
- mais je ne vois pas cette réponse démontrant qu'il fonctionne avec gmail comme spécifié dans la question d'origine ...