Menu

ssmtp – masowa wysyłka maili z konsoli przez SMTP

2 listopada 2020 - IT, Linux
ssmtp – masowa wysyłka maili z konsoli przez SMTP

Czasem zdarza się, że trzeba wysłać masowo n maili zawierających w zasadzie to samo, ale np różniących się nazwą użytkownika i hasłem w treści, jaki problem odczytać pętlą while plik z danymi do wstawienia i wygenerowanie odpowiedniej ilości par user:hasło? No żaden. Ale pasowało by je teraz wysłać do odbiorców z konkretnego adresu e-mail.

Z pomocą przychodzi ssmtp, gdzie w prosty sposób można wysłać wiadomości za pomocą konkretnego konta na konkretnym serwerze z poziomu cmd – w tym przypadku AGH.

Na szybciora odpalam czystego centosa w dockerze:

docker run -ti --rm centos:7

Instaluję wymagane paczki (ssmtp znajduje się w repo EPEL):

yum -y install epel-release && yum -u install ssmtp vim

I teraz podstawowa konfiguracja:

# cat /etc/ssmtp/ssmtp.conf 
mailhub=poczta.agh.edu.pl:465
UseTLS=YES
AuthUser=MOJ_USER@agh.edu.pl
AuthPass=MOJE_HASLO
TLS_CA_File=/etc/pki/tls/certs/ca-bundle.crt
RewriteDomain=agh.edu.pl
FromLineOverride=YES

Dodatkowo trzeba jeszcze ustawić revaliases:

# cat /etc/ssmtp/revaliases 
# 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:MOJ_USER

gdyż w przeciwnym wypadku serwer AGH rzuci nam w twarz komunikat mówiący o tym, że jesteśmy brzydcy i źli:

553 5.7.1 <root@15e42675c6fd>: Sender address rejected: not owned by user MOJ_USER@agh.edu.pl

Gdy już wszystko jest, to szybki skrypcik, który pobierze dane z przygotowanego pliku w formacie:

user1 pass1 mail@1
user2 pass2 mail@2
...

i wyśle go dalej:

#!/bin/bash
SUBJECT="Temat wiadomości"
FROM="OTO JA WŁAŚNIE CAŁY NA BIAŁO<MOJ_MAIL@agh.edu.pl>"
while read line
do
  USER=$(echo $line | awk '{print $1}')
  PASS=$(echo $line | awk '{print $2}')
  MAIL=$(echo $line | awk '{print $3}')
  MESSAGE="From: $FROM\nSubject: $SUBJECT\nUser: $USER\nPass: $PASS"
  echo -e $MESSAGE|ssmtp -vvv $MAIL
done<lista

Po uruchomieniu skryptu:

chmod +x wyslij; ./wyslij

można obserwować jak ładnie maile idą w świat.

Przy okazji gdyby ktoś chciał sobie powtórzyć jak wygląda komunikacja protokołem SMTP, to widać jak na dłoni zapytania i odpowiedzi, wysłanie tego samego telnetem też by zadziałało.

[<-] 220 poczta.agh.edu.pl ESMTP Postfix
[->] EHLO 15e42675c6fd
[<-] 250 DSN
[->] AUTH LOGIN
[<-] 334 yzEYqD85dUemGcu2
[->] ea1443a64738a7cd4306720fb944a7f5==
[<-] 334 Z5RLkBRXk0
[<-] 235 2.7.0 Authentication successful
[->] MAIL FROM:<MOJ_MAIL@agh.edu.pl>
[<-] 250 2.1.0 Ok
[->] RCPT TO:<ODBIORCA@student.agh.edu.pl>
[<-] 250 2.1.5 Ok
[->] DATA
[<-] 354 End data with <CR><LF>.<CR><LF>
[->] Received: by 15e42675c6fd (sSMTP sendmail emulation); Mon, 02 Nov 2020 21:57:03 +0000
[->] Date: Mon, 02 Nov 2020 21:57:03 +0000
[->] From: OTO JA WŁAŚNIE CAŁY NA BIAŁO<MOJ_MAIL@agh.edu.pl>
[->] Subject: Temat wiadomości
[->] User: super.tajny.user
[->] Pass: tu.wpisz.dowolny.ciag.znakow
[->] 
[->] .
[<-] 250 2.0.0 Ok: queued as 1639383C5A
[->] QUIT
[<-] 221 2.0.0 Bye

Syćko.

Tagi: , ,