eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronika › Raspberry Pi - wysyłanie maila z notyfikacją
Ilość wypowiedzi w tym wątku: 29

  • 11. Data: 2014-08-24 15:59:29
    Temat: Re: Raspberry Pi - wysyłanie maila z notyfikacją
    Od: Atlantis <m...@w...pl>

    Hmm... Doczytałem trochę i udało mi się napisać prostą funkcję.

    Najpierw w taki sposób przesyłam kolejne polecenia:

    rc = send(sd, "AUTH LOGIN\n", strlen("AUTH LOGIN\n"), MSG_WAITALL);
    rc = recv(sd, ans, sizeof(ans), 0);
    if (rc > 0) {
    ans[rc] = '\0';
    puts(ans);
    }

    Udało mi się w ten sposób przejść całą procedurę uwierzytelniania oraz
    ustawiania adresów nadawcy i odbiorcy. Potem przechodzę do "DATA".

    sprintf(buffer, "DATA\nFROM: <a...@h...pl>\nTO: <%s>\nSUBJECT: TO JEST
    TEMAT TEGO MAILA\nA TO JEST JEGO TRESC\r\n.\r\n", to);

    rc = send(sd, buffer, strlen(buffer), MSG_WAITALL);
    rc = recv(sd, ans, sizeof(ans), 0);
    if (rc > 0) {
    ans[rc] = '\0';
    puts(ans);
    }

    Niestety taka konstrukcja działa tylko połowicznie. To znaczy dochodzi
    mail z określonym tematem, ale bez treści.
    Błąd zapewne jest banalny, ale ja nie mogę go dostrzec. O co może chodzić?


  • 12. Data: 2014-08-24 17:09:35
    Temat: Re: Raspberry Pi - wysyłanie maila z notyfikacją
    Od: A <a...@g...pl>

    Atlantis wrote:

    > Hmm... Doczytałem trochę i udało mi się napisać prostą funkcję.
    >
    > Najpierw w taki sposób przesyłam kolejne polecenia:
    >
    > rc = send(sd, "AUTH LOGIN\n", strlen("AUTH LOGIN\n"), MSG_WAITALL);
    > rc = recv(sd, ans, sizeof(ans), 0);
    > if (rc > 0) {
    > ans[rc] = '\0';
    > puts(ans);
    > }
    >
    > Udało mi się w ten sposób przejść całą procedurę uwierzytelniania oraz
    > ustawiania adresów nadawcy i odbiorcy. Potem przechodzę do "DATA".
    >
    > sprintf(buffer, "DATA\nFROM: <a...@h...pl>\nTO: <%s>\nSUBJECT: TO JEST
    > TEMAT TEGO MAILA\n

    tu dodaj jeszcze jedno \n - ma być pusta linia pomiędzy nagłówkami, a
    treścią

    > A TO JEST JEGO TRESC\r\n.\r\n", to);
    >
    > rc = send(sd, buffer, strlen(buffer), MSG_WAITALL);
    > rc = recv(sd, ans, sizeof(ans), 0);
    > if (rc > 0) {
    > ans[rc] = '\0';
    > puts(ans);
    > }
    >
    > Niestety taka konstrukcja działa tylko połowicznie. To znaczy dochodzi
    > mail z określonym tematem, ale bez treści.
    > Błąd zapewne jest banalny, ale ja nie mogę go dostrzec. O co może chodzić?

    --
    A.


  • 13. Data: 2014-08-24 17:23:20
    Temat: Re: Raspberry Pi - wysyłanie maila z notyfikacją
    Od: Borys Pogoreło <b...@p...edu.leszno>

    Dnia Sun, 24 Aug 2014 15:59:29 +0200, Atlantis napisał(a):

    > Niestety taka konstrukcja działa tylko połowicznie. To znaczy dochodzi
    > mail z określonym tematem, ale bez treści.
    > Błąd zapewne jest banalny, ale ja nie mogę go dostrzec. O co może chodzić?

    \n\n przed treścią.

    --
    Borys Pogoreło
    borys(#)leszno,edu,pl


  • 14. Data: 2014-08-26 00:01:21
    Temat: Re: Raspberry Pi - wysyłanie maila z notyfikacją
    Od: Marek Wodzinski <m...@O...mamy.to>

    On 08/24/2014 03:59 PM, Atlantis wrote:
    > Hmm... Doczytałem trochę i udało mi się napisać prostą funkcję.
    >
    > sprintf(buffer, "DATA\nFROM: <a...@h...pl>\nTO: <%s>\nSUBJECT: TO JEST
    > TEMAT TEGO MAILA\nA TO JEST JEGO TRESC\r\n.\r\n", to);

    1. Serwer czy net może być niedostępny (timeout czy connection refused)
    2. Serwer może mieć trudne chwile i odpowie Ci 450
    3. Filtr antyspamowy nie polubi Ci 'SUBJECT' zamiast 'Subject', braku
    nagłówków czy np. złego kodowania.

    Wyślij to normalnie przez system() i niech demon poczowy na Linuksie się
    tym martwi. Chyba nie będziesz pisał demona na nowo? Co z chwilowymi
    problemami (1.,2.)? Skolejkujesz sam gdzieś tego maila czy stracisz?

    Na Linuxie naprawdę nie ma sensu wynajdować koła od nowa, bo szkoda
    czasu i zawsze się okaże, że jakiś serwer odpowie Ci trochę inaczej, ale
    zgodnie z RFC i program się wyłoży. Albo przytrzyma Ci połączenie (czy
    sieć padnie w tym momencie) i program się powiesi do wytimeoutowania
    sesji tcp. No chyba, że wysyłasz asynchronicznie w osobnym wątku czy
    podprocesie, ale wtedy jak poforkujesz się dla każdego maila znowu
    musisz kontrolować pamięć/zasoby i ilość procesów itd...

    Rozumiem, żebyś rzeżbił na Arduino, ale tu masz wszystko gotowe,
    przetestowane i działające.


    Pozdrawiam

    Marek
    --
    "If you want something done...do yourself!"
    Jean-Baptiste Emmanuel Zorg


  • 15. Data: 2014-08-26 08:45:04
    Temat: Re: Raspberry Pi - wysyłanie maila z notyfikacją
    Od: Atlantis <m...@w...pl>

    W dniu 2014-08-26 00:01, Marek Wodzinski pisze:

    > Wyślij to normalnie przez system() i niech demon poczowy na Linuksie się
    > tym martwi. Chyba nie będziesz pisał demona na nowo? Co z chwilowymi
    > problemami (1.,2.)? Skolejkujesz sam gdzieś tego maila czy stracisz?

    Hmm... W tej chwili funkcja załatwia tylko podstawową komunikację z
    serwerem przy przesyłaniu i zwraca 1 w przypadku sukcesu albo kod błędu,
    gdy coś poszło niezgodnie z planem. W tej chwili kody błędu opierają się
    tylko na niepowodzeniu wywołań kolejnych send() i recv(). Planowałem
    jednak dodać jeszcze parsowanie odpowiedzi serwera.
    Jednak chyba masz rację...

    Jaki daemon pocztowy mógłbyś polecić? I jak wygląda obsługa
    odpowiedniego konta? Wywołuje się je z linii poleceń, czy tożsamość jest
    odgórnie skonfigurowana i zależy od użytkownika, który uruchomi program
    wywołujący daemona?


    > Na Linuxie naprawdę nie ma sensu wynajdować koła od nowa, bo szkoda
    > czasu i zawsze się okaże, że jakiś serwer odpowie Ci trochę inaczej, ale

    Kod pisałem pod konkretny serwer, nawet dane uwierzytelniające są
    hardkodowane z źródle. Chodziło mi też eksperyment mający na celu
    przybliżenie zasady działania poczty e-mail.


    > Rozumiem, żebyś rzeżbił na Arduino, ale tu masz wszystko gotowe,
    > przetestowane i działające.

    Przyzwyczajenia... Programowania uczyłem się na AVR-ach. ;)


  • 16. Data: 2014-08-26 16:22:55
    Temat: Re: Raspberry Pi - wysyłanie maila z notyfikacją
    Od: Marek Wodzinski <m...@O...mamy.to>

    On Tue, 26 Aug 2014, Atlantis wrote:

    > Jaki daemon pocztowy mógłbyś polecić?

    Zależy do czego potrzebujesz i jak bardzo szanujesz zasoby:-)
    I czy w przyszłości maszynka sama ma wysyłać maile od razu na świat czy
    zawsze tylko przez jakiś serwer.

    Podobno msmtp jest prosty, mały i dobry, ale jakoś zawsze używałem
    'pełnych' demonów - zaleta jest taka, że łatwiej jest poznać i znaleźć
    pomoc do jednego popularnego programu niż fajnego, małego, ale
    egzotycznego. Jak nie liczysz każdego bajtu czy mikrosekundy na obsługę
    maila, to zazwyczaj wystarcza to co dostajesz w dystrybucji.

    > I jak wygląda obsługa
    > odpowiedniego konta?

    Jeżeli chcesz słać wszystko przez zewnętrzny serwer, to w konfiguracji
    demona. Zależy jaki masz lub zainstalujesz. Podobno w Raspbianie jest exim
    defaultowo, więc może już coś masz nawet zainstalowane albo i uruchomione
    :-)


    > Wywołuje się je z linii poleceń

    Wysyłanie wywołujesz z linii poleceń, treść maila zazwyczaj wrzucasz na
    stdin.

    >, czy tożsamość jest
    > odgórnie skonfigurowana i zależy od użytkownika, który uruchomi program
    > wywołujący daemona?

    To trochę inaczej się odbywa.
    Zazwyczaj masz demona do poczty (mta), który działa cały czas lub
    uruchamiany jest czasem z crona (rzadziej). On sprawdza czy coś ma w
    kolejce do wysłania i to ewentualnie wysyła.

    Natomiast jak chcesz wysłać maila, to wywołujesz inny program (czasem ten
    sam, ale z innymi opcjami), który weźmie tego maila, wstępnie sprawdzi co
    próbujesz wysłać i wrzuci do kolejki demonowi.

    Tożsamość (w sensie ustawienia autoryzacji i serwera) konfigurujesz
    demonowi o ile nie wysyłasz sam od razu na świat. Wtedy on może wysłać
    maila dalej używając tej konfiguracji. Mta to taki router - sam podejmuje
    decyzje co zrobić z dostanym mailem. Czasem możesz mu wymusić, żeby słał
    wszystko lub część poczty (np. w zależności od nadawcy czy odbiorcy) przez
    określonego relaya. Dlatego też raczej nie ma szans, że określisz
    dodatkowe parametry relaya w czasie wrzucania maila do kolejki.

    Taki hint już do wysyłania: możesz wywołać 'mail' używając jego switchy,
    żeby dodać dodatkowe nagłowki. Ale ponieważ praktycznie każdy mta ma tryb
    udawania sendmaila (jednego z najstarszych demonów), to niezależnie czy
    będziesz miał exima, postfixa, sendmaila czy coś tam jeszcze, to zawsze
    powinno się dać wywołać 'sendmail -t' i wrzucić na stdin całego maila z
    nagłówkami.
    Wtedy 'sendmail' sam sobie znajdzie From:, To:, Cc, Bcc (to ostatnie
    też grzecznie usunie) i zrobi z tym co trzeba.
    Osobiście używam opcji z sendmail -t :-)

    >> Na Linuxie naprawdę nie ma sensu wynajdować koła od nowa, bo
    szkoda
    >> czasu i zawsze się okaże, że jakiś serwer odpowie Ci trochę inaczej, ale
    >
    > Kod pisałem pod konkretny serwer, nawet dane uwierzytelniające są
    > hardkodowane z źródle.

    Czasem serwer się zmienia, czasem chcesz udostępnić program komuś. W
    Linuksie najlepiej jak system tym się zajmie, a nie sama aplikacja.
    Czasem robi to aplikacja, ale często są to już potworki w językach
    skryptowych z opasłymi i sprawdzonymi bibliotekami. A i tak często taka
    biblioteka ma jako fallback wysłanie 'normalnie'.

    > Chodziło mi też eksperyment mający na celu
    > przybliżenie zasady działania poczty e-mail.

    Przydaje się też czasem wiedzieć jak wysłać maila telnetem czy netcatem
    :-)


    Pozdrawiam

    Marek
    --
    "If you want something done...do yourself!"
    Jean-Baptiste Emmanuel Zorg


  • 17. Data: 2014-08-26 20:50:23
    Temat: Re: Raspberry Pi - wysyłanie maila z notyfikacją
    Od: Atlantis <m...@w...pl>

    W dniu 2014-08-26 16:22, Marek Wodzinski pisze:

    > Jeżeli chcesz słać wszystko przez zewnętrzny serwer, to w konfiguracji
    > demona. Zależy jaki masz lub zainstalujesz. Podobno w Raspbianie jest
    > exim defaultowo, więc może już coś masz nawet zainstalowane albo i
    > uruchomione :-)

    Exim4 musiałem zainstalować, ale nie mogę sobie poradzić z konfiguracją.
    Co jest z nim nie tak, że z uporem maniaka w miejscu FROM: wstawia adres
    utworzony z LOKALNEJ nazwy użytkownika i hosta, przez co mail jest
    odrzucany przez serwer.
    Tak samo przy EHLO podaje nazwę maszyny (raspberrypi) zamiast tpnet.pl.
    Można go jakoś nauczyć prawidłowego wysyłania maili?

    SSMTP zachowuje się dokładnie tak samo...


  • 18. Data: 2014-08-26 22:53:09
    Temat: Re: Raspberry Pi - wysyłanie maila z notyfikacją
    Od: Marek Wodzinski <m...@O...mamy.to>

    On 08/26/2014 08:50 PM, Atlantis wrote:
    > W dniu 2014-08-26 16:22, Marek Wodzinski pisze:
    >
    >> Jeżeli chcesz słać wszystko przez zewnętrzny serwer, to w konfiguracji
    >> demona. Zależy jaki masz lub zainstalujesz. Podobno w Raspbianie jest
    >> exim defaultowo, więc może już coś masz nawet zainstalowane albo i
    >> uruchomione :-)
    >
    > Exim4 musiałem zainstalować, ale nie mogę sobie poradzić z konfiguracją.
    > Co jest z nim nie tak, że z uporem maniaka w miejscu FROM: wstawia adres
    > utworzony z LOKALNEJ nazwy użytkownika i hosta, przez co mail jest
    > odrzucany przez serwer.

    Zapomniałem o jednej opcji :-)
    sendmail -...@d...com -t
    Inaczej w 'kopercie' użyje właśnie danych z systemu.
    Dobrze jeszcze dopisać do trusted_users użytkownika, który będzie
    wysyłał tego maila - sendmail dodaje dodatkowy nagłówek, że user coś
    kombinuje, nie wiem jak exim.

    > Tak samo przy EHLO podaje nazwę maszyny (raspberrypi) zamiast tpnet.pl.
    > Można go jakoś nauczyć prawidłowego wysyłania maili?

    W EHLO serwer przedstawia się swoją nazwą. W zasadzie serwery są
    przyzwyczajone, że klient bzdurnie się przedstawia. Jeżeli dalej
    autoryzujesz się, to nie ma to znaczenia.
    Jeżeli wysyłasz bezpośrednio, to niektóre sprawdzają czy hostname jest
    prawidłowy (istnieje). Częściej sprawdza się czy jednak nie ustawiasz
    takiego EHLO jak nazwa/ip serwera z którym się łączysz - to akurat
    często jest w spamie.
    Czyli tym bym się nie przejmował tak długo jak maile będą dochodzić.
    Sam często testuję przez 'EHLO dupa' :-)


    Pozdrawiam

    Marek
    --
    "If you want something done...do yourself!"
    Jean-Baptiste Emmanuel Zorg


  • 19. Data: 2014-08-26 23:57:18
    Temat: Re: Raspberry Pi - wysyłanie maila z notyfikacją
    Od: Atlantis <m...@w...pl>

    W dniu 2014-08-26 22:53, Marek Wodzinski pisze:

    > W EHLO serwer przedstawia się swoją nazwą. W zasadzie serwery są
    > przyzwyczajone, że klient bzdurnie się przedstawia. Jeżeli dalej
    > autoryzujesz się, to nie ma to znaczenia.

    Wydaje mi się, że to ma znaczenie, przynajmniej w przypadku Interii. Gdy
    próbowałem wysyłać maile przez telnet, serwer nie przyjmował innego EHLO
    jak tylko tpnet.pl. W przeciwnym razie w pewnym momencie wywalał
    komunikat błędu...


    > Czyli tym bym się nie przejmował tak długo jak maile będą dochodzić.
    > Sam często testuję przez 'EHLO dupa' :-)

    Właśnie nie dochodzi. Nie mogę tego normalnie skonfigurować...
    Udało mi się już ustawić alias - tak więc mam prawdziwy e-mail
    przypisany do nazwy użytkownika w systemie. Ciągle jednak nie jestem w
    stanie wysłać wiadomości...

    mail -s "Test" m...@g...pl -v

    Wśród zwróconych treści znajduje się:

    SMTP>> EHLO raspberrypi


    oraz

    SMTP<< 554 5.7.1 <******.*******.****.tpnet.pl[***.***.***.***]>: Client
    host rejected: Access denied


  • 20. Data: 2014-08-27 00:35:42
    Temat: Re: Raspberry Pi - wysyłanie maila z notyfikacją
    Od: "Grzegorz Niemirowski" <g...@p...onet.pl>

    Atlantis <m...@w...pl> napisał(a):
    > Właśnie nie dochodzi. Nie mogę tego normalnie skonfigurować...
    > Udało mi się już ustawić alias - tak więc mam prawdziwy e-mail
    > przypisany do nazwy użytkownika w systemie. Ciągle jednak nie jestem w
    > stanie wysłać wiadomości...
    > mail -s "Test" m...@g...pl -v
    > Wśród zwróconych treści znajduje się:
    > SMTP>> EHLO raspberrypi
    > oraz
    > SMTP<< 554 5.7.1 <******.*******.****.tpnet.pl[***.***.***.***]>: Client
    > host rejected: Access denied

    To jest cała komunikacja? 554 to odpowiedź na EHLO? Jeśli nie, to wklej
    całość. Gwiazdkować nie musisz, bo i tak widać Twój adres w nagłówkach. Z
    jakim serwerem się łączysz i na jakim porcie? Ja ostatnio zrobiłem
    wysyłanie na socketach w C i nie było problemu na WP. EHLO podawałem
    wymyślone. Skoro wysyłasz do gwp.pl, to serwerem SMTP jest smtp1.apnet.pl.
    No chyba, że to pomyłka i wysyłasz do wp.pl. Mi się to gwp to EHLO nie
    przyczepia:
    grzegorz@jabber:~$ telnet smtp1.apnet.pl 587
    Trying 213.76.170.4...
    Connected to smtp1.apnet.pl.
    Escape character is '^]'.
    220 apnet.pl ESMTP
    EHLO elektronika
    250-apnet.pl
    250-STARTTLS
    250-PIPELINING
    250-8BITMIME
    250-SIZE 0
    250 AUTH LOGIN PLAIN
    QUIT
    221 apnet.pl
    Connection closed by foreign host.

    --
    Grzegorz Niemirowski
    http://www.grzegorz.net/
    OE PowerTool i Outlook Express: http://www.grzegorz.net/oe/
    Uptime: 65 days, 9 hours, 46 minutes and 28 seconds

strony : 1 . [ 2 ] . 3


Szukaj w grupach

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: