• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Nie działa kod pod masowe wysyłanie emaili

Fiszki IT
Fiszki IT
+1 głos
138 wizyt
pytanie zadane 2 sierpnia 2020 w Python przez graj23x Obywatel (1,340 p.)

Nie działa kod pod pod masowe wysyłanie wiadomości email i emaile nie dochodzą i włączyłem dostęp do aplikacji i włączyłem IMAP .Oto kod

import smtplib

with open("to.txt", 'r') as f:
    maile = [a.strip() for a in f.readlines() if a.strip()]
    print(maile)
gmail_user = ''
gmail_password = ''
sent_from = gmail_user
email_text = 'tekst'
try:
    server = smtplib.SMTP('smtp.gmail.com', 587)
    server.ehlo()
    server.starttls()
    server.login(gmail_user, gmail_password)
    for x in maile:
        server.sendmail(sent_from, x, email_text)
except:
    print('Hej')

 

1 odpowiedź

+2 głosów
odpowiedź 2 sierpnia 2020 przez Nelson89 Mądrala (5,520 p.)

Cześć,

Zwróć uwagę na te dwie rzeczy.

1. Poprawność kodu.

Podczas uruchamiania kodu pojawia się jakiś błąd, czy może w konsoli printowane jest słowo "Hej"?

Po mi po skopiowaniu Twojego kodu i przy próbie uruchomienia go pojawiają się błędy

- Błąd w linii 2 - jest tam spacja

- Kolejny błąd w linii 4, 5 itd - wszędzie tam gdzie występuje wcięcie. Musiałem ten wcięcia usunąć i na nowo stworzyć z wykorzystaniem 4 spacji. Po wykonaniu tego udało mi się uruchomić kod bez błędu.

2. Wybór protokołu do wysłania wiadomości.

Do wysyłania wiadomości użyłbym serwera SMTP, IMAP lub POP3 użyłbym do odbierania lub zarządzania folderami, wiadomościami na skrzynce pocztowej. Także na gmailu zobacz sobie zobaczyć jakie porty masz do dyspozycji aby wysyłać wiadomości z wykorzystaniem SMTP.

Test

Aby przetestować Twój kod uruchomiłem serwer SMTP do debugowania z wykorzystaniem polecenia:

python3 -m smtpd -n -c DebuggingServer localhost:1025

Następnie utworzyłem plik z mailami tj.: test@test.pl abc@abc.pl abc@testujemy.pl. Każdy adres mailowy znajduje się w nowym wierszu.

Po uruchomieniu kodu w terminalu, w którym mam uruchomiony serwer do debugowania pojawiła się wysłana wiadomość, co oznacza, że program działa poprawnie - wiadomość dotarła na serwer, gdzie dalej trafi do nadawców (w przypadku gdyby to był prawdziwy serwer).

To co widać w terminalu można poprawić, żeby lepiej wyglądało, uzupełniając o takie informacje jak nadawca, odbiorcy, temat, itp. To możesz zobaczyć w tym poście.

Sprawdziłem to też na prawdziwym serwerze smtp i wiadomość dotarła na mojego maila.

Pozdrawiam,

Nelson

 

komentarz 3 sierpnia 2020 przez graj23x Obywatel (1,340 p.)
Podaj kod i jak ustawić gmaila poprawnie gdzie te porty
komentarz 3 sierpnia 2020 przez graj23x Obywatel (1,340 p.)
The system cannot execute the specified program.
(venv) C:\Users\perys\Downloads>python3 -m smtpd -n -c DebuggingServer localhost
The system cannot execute the specified program.

 

komentarz 3 sierpnia 2020 przez graj23x Obywatel (1,340 p.)

Działa tylko był błąd w listach emaili i jak zrobić żeby bardzo duża lista emaili była po enterze i jak zrobić szablon gotowy  do wysłania w pythonie pycharm z kolorowym tłem,testem dużym i pogrubiony i grafiką

komentarz 5 sierpnia 2020 przez Nelson89 Mądrala (5,520 p.)

Cześć,

jak zrobić żeby bardzo duża lista emaili była po enterze

co masz na myśli, że bardzo duża lista emaili ma być po enterze?, chcesz coś przekonwertować? Np. z listy zapisanej w pliku, w którym adresy email są oddzielone spacjami, na plik w którym adresy są oddzielone nową linią?

W linii 15, 16 masz taki zapis:

    for x in maile:
        server.sendmail(sent_from, x, email_text)

W tej pętli wyciągasz pojedyncze adresy email z listy maile. Możesz po prostu wrzucić całą listę, pozbywając się niepotrzebnej pętli.

    server.sendmail(sent_from, maile, email_text)

bo:

sendmail(from_addr, to_addrs, msg, mail_options=(), rcpt_options=()) method of smtplib.SMTP instance
    This command performs an entire mail transaction.
    
    The arguments are:
        - from_addr    : The address sending this mail.
        - to_addrs     : A list of addresses to send this mail to.  A bare
                         string will be treated as a list with 1 address.
        - msg          : The message to send.(...)

i jak zrobić szablon gotowy  do wysłania w pythonie pycharm z kolorowym tłem,testem dużym i pogrubiony i grafiką

Wiadomości, które są stylizowane stworzone są w HTML, więc musiałbyś stworzyć najpierw szablon w HTML, a potem możesz go dostosować, np. w zależności od odbiorcy zastosować odpowiednie przywitanie. To możesz osiągnąć stosując wyrażenia/metody formatujące lub f-stringi w szablonie. Przy bardziej zaawansowanych potrzebach możesz wykorzystać Jinja2 (silnik do tworzenia i wypełniania szablonów).

Pozdrawiam,

Nelson

komentarz 8 sierpnia 2020 przez graj23x Obywatel (1,340 p.)

Dobra zrobię gotowy szablon w html5 i jak potem dać do tego kodu

import smtplib

with open("konkretne.txt", 'r') as f:
    maile = [a.strip() for a in f.readlines() if a.strip()]
    print(maile)
gmail_user = '
gmail_password = '
sent_from = gmail_user
email_text = '/'
try:
    server = smtplib.SMTP('smtp.gmail.com', 587)
    server.ehlo()
    server.starttls()
    server.login(gmail_user, gmail_password)
    for x in maile:
        server.sendmail(sent_from, x, email_text)
except:
    print('Hej')

Gdzie potem dać szablon w html5

komentarz 9 sierpnia 2020 przez Nelson89 Mądrala (5,520 p.)

Rzuć okiem na ten artykuł https://dev.to/carola99/send-an-html-email-template-with-python-and-jinja2-1hd0. Tam masz opisane jak tworzyć szablony. Jest tam dosyć ciekawa opcja, która polega na zbudowaniu bazy, a następnie stworzenie szablonów, które dziedziczą styl bazy, itp.

Pozdrawiam,

Nelson

komentarz 8 września 2020 przez graj23x Obywatel (1,340 p.)
A pod mój kod jak zrobić taki szablon
komentarz 29 stycznia przez graj23x Obywatel (1,340 p.)
Tylko gdzie taki kod dać w którym punkcie do tego mojego jakiś dokładniejszy kod pod szablon do masowej wysyłki typu tło kolorowe,rozmiar czcionek ,kolor,buty ok,link ,foto.
komentarz 30 stycznia przez Nelson89 Mądrala (5,520 p.)

Cześć,

patrząc na ten artykuł, co go wyżej zamieściłem, autor wrzuca treść jako trzeci argument metody sendmail. Czyli w zasadzie przed tym musiałbyś załadować szablon i podstawić odpowiednie dane z Jinja2.  Czyli:

1. Tworzysz szablon w html, a w miejsca gdzie chciałbyś wstawić jakieś dane, które będą inne dla każdej serii wysyłanych mail dodajesz znaczniki Jinja.

2. W funkcji odpowiedzialnej za wysyłanie maili tworzysz / wczytujesz / generujesz dane, wczytujesz szablon z punktu 1 i renderujesz go z danymi z tego punktu.

3. Szablon po renderowaniu powinien zawierać odpowiednią treść i możesz wysłać go z wspomnianą metodą sendmail.

Jeżeli chodzi o edycje tła, itp. - to możesz zrobić sobie kilka szablonów i w kodzie będziesz decydować, który ma zostać użyty. Możesz też wrzucić odpowiednie dane podczas renderowania, które zostaną wrzucone do kodu i np. ustawią rozmiar czcionki, itp.

Cały proces jest tutaj ładnie opisany:

https://dev.to/carola99/send-an-html-email-template-with-python-and-jinja2-1hd0

Pozdrawiam,

Nelson

Podobne pytania

0 głosów
0 odpowiedzi 50 wizyt
pytanie zadane 20 maja w Python przez graj23x Obywatel (1,340 p.)
0 głosów
1 odpowiedź 116 wizyt
0 głosów
1 odpowiedź 43 wizyt
pytanie zadane 1 maja w Python przez Programmer01 Początkujący (490 p.)
Porady nie od parady
Zadając pytanie postaraj się o odpowiedni tytuł, kategorię oraz tagi.Tagi

84,794 zapytań

133,600 odpowiedzi

296,073 komentarzy

56,043 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...