Wysyłanie powiadomień e-mail err

140 views
Skip to first unread message

Michał

unread,
Dec 11, 2020, 9:23:18 AM12/11/20
to AquaPi - komputer akwariowy oparty o Raspberry Pi
Witam
Na wstępie chciałem pogratulować za super projekt.

Napotkałem problem dotyczący wysyłania powiadomień e-mail, czy ktoś konfigurował emaila i spotkał się z podobnym problemem? Poniższe błędy wyskakują tylko na urządzeniu  raspberry pi. Na innych wersjach linuxa działa to poprawnie.

Konfiguracja emaila dla gmaila:
Zainstalowane pliki:
sudo apt-get install ssmtp
sudo apt-get install mailutils


Konfiguracja pliku /etc/ssmtp/ssmtp.conf:
AuthPass=XXXXXXXXXXX
UseSTARTTLS=Yes

Uruchomienie wysłania emaila z debugiem:
echo "Hello world email body" | sudo mail -s "Test Subject" emial_o...@gmail.com --debug-level=2
mail: sendmail binary: /usr/sbin/sendmail
mail: source=system, name=root, passwd=x, uid=0, gid=0, gecos=root, dir=/root, shell=/bin/bash, mailbox=/var/mail/root, quota=0, change_uid=1
mail: source=system, name=root, passwd=x, uid=0, gid=0, gecos=root, dir=/root, shell=/bin/bash, mailbox=/var/mail/root, quota=0, change_uid=1
mail: mu_mailer_send_message(): using From: root@raspberrypi
mail: Sending headers...
mail: Sending body...
mail: /usr/sbin/sendmail exited with: 1
mail: nie można wysłać wiadomości: Proces zakończony z nie zerowym kodem wyjścia
mail: source=system, name=root, passwd=x, uid=0, gid=0, gecos=root, dir=/root, shell=/bin/bash, mailbox=/var/mail/root, quota=0, change_uid=1

Próbowałem już różnych sposobów konfiguracji i niestety dalej nie działa.

Z góry dziękuję za jakąkolwiek odpowiedź.

Pozdrawiam Michał 

Marcin Król

unread,
Dec 12, 2020, 11:34:29 AM12/12/20
to Michał, AquaPi - komputer akwariowy oparty o Raspberry Pi
Cześć,
Dobrze kombinujesz z mail, bo klucz w uruchomieniu mailingu to właśnie jej poprawne działanie. Niestety nie wiem jak tu Ci pomóc, poza tym że nie jest to pierwszy problematyczny przypadek z "mail" o którym słyszałem :)

Wolny od wirusów. www.avast.com

--
Otrzymujesz tę wiadomość, bo subskrybujesz grupę „AquaPi - komputer akwariowy oparty o Raspberry Pi” w Grupach dyskusyjnych Google.
Aby anulować subskrypcję tej grupy i przestać otrzymywać od niej wiadomości, wyślij e-maila na aquapi+un...@googlegroups.com.
Aby wyświetlić tę dyskusję w internecie, otwórz https://groups.google.com/d/msgid/aquapi/99bc84c2-e0ce-4c7e-86e6-4da9eed0dd9dn%40googlegroups.com.


--
Pozdrawiam,
Marcin 'Lexx' Król
http://lexx.polarnet.pl

Michał

unread,
Dec 15, 2020, 11:31:50 AM12/15/20
to AquaPi - komputer akwariowy oparty o Raspberry Pi
Witam ponownie 
Niestety nie poradziłem sobie z mail, takk jak wielu ale za to uruchomiłem "msmtp" i wysyłam bez problemu e-maile z lini komend.
Chciałbym również wysyłać z AquaPI więc wpadłem na pomysł by przerobić z mail na msmtp, niestety nie znam się zbyt dobrze na C, ale myślę że wystarczy modyfikacja linijki w kodzie.

Aktualnie w pliku email.c jest linia kodu:

const char *email_command = "mail -s 'AquaPi' -a 'MIME-Version: 1.0' -a 'Content-type: text/html; charset=utf-8' -r 'AquaPi <aquapi@noreply>' %s < /tmp/errormail";

Które odpowiada mail, przykład wysyłania z konsoli --> echo "Hello world email body" | mail -s "Test Subject" user...@gmail.com  

msmtp wysyła podobnie, przykład ---> echo -e "Subject: Test Mail\r\n\r\nThis is a test mail" |msmtp  --from=default -t user...@gmail.com

Myślę że jest możliwość podmienia tego by wysyłało z msmtp. Czy mogę prosić o przerobie, ewentualnie wskazówki jak to zrobić.

Z góry dziękuje za pomoc, już niedługo pierwsze testy sterownika już w akwarium :)

Pozdrawiam Michał

Marcin Król

unread,
Dec 15, 2020, 2:02:45 PM12/15/20
to Michał, AquaPi - komputer akwariowy oparty o Raspberry Pi
Hej. 

Możesz spróbować podmienić komendę i skompilować na nowo maila, niestety nie podam Ci składni msmtp, natomiast żeby działało po powinieneś pamiętać o dwóch rzeczach:

1) ciąg %s w poleceniu będzie podmieniony na adres email ustawiony w UI.
2) treść maila jest generowana do pliku /tmp/errormail a jest to HTML kodowany w UTF-8.

Stąd takie a nie inne wywołanie polecenia mail. Jeśli uda Ci się poprawnie wysłać maila z linii komend przy pomocy msmtp, pamiętając że treść jest w tym pliku co podałem, to podmień komendę w email.c i skompiluj na nowo daemona.


Damian Z

unread,
Dec 16, 2020, 6:43:14 PM12/16/20
to AquaPi - komputer akwariowy oparty o Raspberry Pi
cześć,

wygląda jakby email jednak był wysyłany z adresu: From: root@raspberrypi
czy dodałeś do pliku /etc/ssmtp/revaliases odpowiedni alias? 
root:nazwa_uz...@gmail.com:smtp.gmail.com:587

spróbuj też podmienić binarkę, tylko najpierw zrób kopię:

odpowiednie ścieżki (bin czy sbin czy jeszcze coś innego) sprawdzisz przez :
which mail
which sendmail
which sssmtp

cp /usr/bin/mail /usr/bin/mail_copy
ln -s /usr/sbin/ssmtp /usr/bin/sendmail

Michał

unread,
Dec 17, 2020, 9:24:12 AM12/17/20
to AquaPi - komputer akwariowy oparty o Raspberry Pi
Witam
 Z wysyłaniem e-maila już zrobione, pomógł mi kolega który piszę w C, opiszę tu jak tylko uruchomię wszystkie funkcjonalności. Opiszę krok po kroku, wspomnę tylko że udało się na  msmtp  a nie mail. 

Napotkałem kolejny problem i nie wiem o co chodzi, mianowicie dotarł do mnie  ADS1115  i podłączyłem go do PI, działa na adresie  0x4a.
AquaPi go widzi w w dashbordzie pokazuje się wartość odczytanego napięcia natomiast w menu kalibracji mam cały czas informację Brak danych.

Próbowałem już z najnowszą wersja daemona i webui , jak i z starszą z marca o ilę się nie mylę, niestety dalej to samo, a chciałbym niedługo kalibrować sondę PH.

      




Pozdrawiam Michał

Marcin Król

unread,
Dec 17, 2020, 9:44:20 AM12/17/20
to Michał, AquaPi - komputer akwariowy oparty o Raspberry Pi
Hej,

Podeślij screenshot

--
Otrzymujesz tę wiadomość, bo subskrybujesz grupę „AquaPi - komputer akwariowy oparty o Raspberry Pi” w Grupach dyskusyjnych Google.
Aby anulować subskrypcję tej grupy i przestać otrzymywać od niej wiadomości, wyślij e-maila na aquapi+un...@googlegroups.com.

Michał

unread,
Dec 17, 2020, 11:05:25 AM12/17/20
to AquaPi - komputer akwariowy oparty o Raspberry Pi
Proszę

dashboard.PNG

calib.PNG

Marcin Król

unread,
Dec 17, 2020, 1:41:59 PM12/17/20
to Michał, AquaPi - komputer akwariowy oparty o Raspberry Pi
A co Ci pokazuje ajax_status.php ?
Mam teorie, że masz nowe UI ale starego daemona.

Michał

unread,
Dec 17, 2020, 2:24:43 PM12/17/20
to AquaPi - komputer akwariowy oparty o Raspberry Pi
update robiłem poprzez git pull 

ajax_status.php - screen

status ajax.PNG

Marcin Król

unread,
Dec 17, 2020, 2:26:24 PM12/17/20
to Michał, AquaPi - komputer akwariowy oparty o Raspberry Pi
Chodziło mi żebyś odpalił w przeglądarce i pokazał zwracany wynik

Message has been deleted

Michał

unread,
Dec 17, 2020, 4:18:05 PM12/17/20
to AquaPi - komputer akwariowy oparty o Raspberry Pi
tamtą wiadomość usunąłem.

Po wywołaniu  ajax_status.php dostałem info 

status.jpg

Damian Z

unread,
Dec 17, 2020, 7:32:42 PM12/17/20
to AquaPi - komputer akwariowy oparty o Raspberry Pi

Którą masz wersję PHP?
Miałem podobny problem dla 7.3, jutro sprawdzę 

Michał

unread,
Dec 18, 2020, 2:49:15 AM12/18/20
to AquaPi - komputer akwariowy oparty o Raspberry Pi
Właśnie dokładnie mam wersje PHP " PHP Version 7.3.19-1~deb10u1 "

Damian Z

unread,
Dec 18, 2020, 7:28:19 AM12/18/20
to AquaPi - komputer akwariowy oparty o Raspberry Pi
sprawdź czy to tymczasowe rozwiązanie pomoże:

w pliku Software/WebUi/lib/ipc.php    (https://github.com/lexx-polarnet-pl/AquaPi/blob/master/Software/WebUi/lib/ipc.php#L34)
 po linii 34 dodaj:

$host = '127.0.0.1';
$port = '6580';
u mnie pomogło, w wolnej chwili postaram się zrobić PR z lepszymi zmianami 

Marcin Król

unread,
Dec 18, 2020, 8:08:56 AM12/18/20
to Damian Z, AquaPi - komputer akwariowy oparty o Raspberry Pi
W sumie tam nie potrzebne są globale, zamiast linii global $host,$port można tam wstawić

$host = $CONFIG['daemon']['bind_address'];
$port = $CONFIG['daemon']['bind_port'];

tak też powinno działać a przynajmniej dane będą dalej pobierane z pliki ini.

Marcin Król

unread,
Dec 19, 2020, 9:34:30 AM12/19/20
to Damian Z, AquaPi - komputer akwariowy oparty o Raspberry Pi
Właśnie sprawdziłem że to rozwiązanie jednak nie zadziała, ale zmieniłem nieco kod i wysłałem do GitHub.

Podejście do globali jest inne, może to zadziała - sprawdźcie proszę jeśli możecie.

Wolny od wirusów. www.avast.com

Michał

unread,
Dec 20, 2020, 7:11:02 AM12/20/20
to AquaPi - komputer akwariowy oparty o Raspberry Pi
Sprawdziłem to nowe rozwiązanie i niestety u mnie nie działa, ale sposób kolegi Damian Z zadziałał.

Pozdrawiam

Michał

unread,
Dec 21, 2020, 8:30:05 AM12/21/20
to AquaPi - komputer akwariowy oparty o Raspberry Pi
Witam ponownie
Napisałem poradnik jak skonfigurować AquaPi by wysyłał powiadomienia e-mail za pomocą pakietu msmtp (mailutils nie udało mi się uruchomić)

Wysyłanie e-mail z Aqua pi za pomocą msmtp

Na początek odinstalować pakiet mailutils 'nie będzie potrzebny' --> sudo apt-get purge mailutils

Instalujemy msmtp --> sudo apt-get install msmtp

Następnie instalacja msmtp ca-certificates --> sudo apt-get install msmtp ca-certificates

Teraz trzeba stworzyć plik "msmtprc" w katalogu /etc --> sudo nano /etc/msmtprc

Konfiguracja pliku  "msmtprc"   dla gmail: (z tego e-maila będzie wysyłać).

account default
port 587
logfile /tmp/msmtp.log
tls on
tls_starttls on
tls_trust_file /etc/ssl/certs/ca-certificates.crt
auth login
user XX...@gmail.com <-- konto na gmail (ja w tym celu stworzyłem nowe)
password ZZZZZ <-- hasło do konta

Zapisać utworzony plik i zrestartować system --> sudo reboot

Po uruchomieniu przetestować działanie w terminalu:

przykład: echo -e "Subject: Test msmtp AquaPi Mail\r\n\r\nThis is a test mail" |msmtp --debug --from=default -t user...@gmail.com

user...@gmail.com --> adres e-mail, na który ma być wysłana wiadomość (musi być inny niż w pliku konfiguracyjnym "msmtprc" )

Sprawdzić pocztę, czy przyszła wiadomość (może znajdować się w spamie).

Jeżeli wiadomość przyszła, kolej na modyfikację pliku "email.c" --> sudo nano /home/pi/src/Software/daemon/e-mail.c

Podmienić kod od linii 22 na:

const char *email_template = 
"Content-Type: text/html; charset=UTF-8\
Subject: Aquapi\
\r\n\r\n\
<!doctype html>\
<html lang='pl'>\
<head>\
<meta charset='utf-8'>\
<style>\
body {font-family: 'Montserrat', sans-serif;}\
.header {background-color: red; text-align:center; color:white; font-size:20pt; padding:1pt;}\
</style>\
</head>\
<body>\
<div class='header'>\
<h1>⚠️</h1>\
<p>%s</p>\
</div>\
</body>\
</html>";

const char *email_templat = "%s";

const char *email_command = "msmtp --debug  --from=default -t %s < /tmp/errormail";

char email_address[200];

void email_ReadSettings() {
DB_GetSetting("email_address", email_address);
}

void email_error(char *msg, int lev) {
FILE *fp;
char command[500];
remove("/tmp/errormail");
fp = fopen("/tmp/errormail", "w+");
    fprintf(fp, email_template, msg); //, msg
    fclose(fp);

sprintf(command, email_command, email_address);
system(command);
}

"Dodaje również w załączniku gotowy już plik email.c" -- > należy go podmienić w katalogu "daemon" za pomocą np. winscp

Zapisać i przejść do katalogu daemon --> cd /home/pi/src/Software/daemon/

wyczyść --> sudo make clean
następnie skompilować na nowo --> sudo make

Zatrzymać daemon --> sudo /etc/init.d/aquapi.rc stop

Skopiować plik "aquapi" do katalogu local --> sudo cp aquapi /usr/local/aquapi/

Uruchomić daemon --> sudo /etc/init.d/aquapi.rc start

W zakładce "powiadomienia" w WebUI wpisać swój e-mail zapisać, wysłać i sprawdzić skrzynkę.

Mam nadzieję że o niczym nie zapomniałem

Pozdrawiam Michał
email.c
Reply all
Reply to author
Forward
0 new messages