• 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

VPS Starter Arubacloud
+1 głos
626 wizyt
pytanie zadane 2 sierpnia 2020 w Python przez graj23x Obywatel (1,590 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 Dyskutant (7,720 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,590 p.)
Podaj kod i jak ustawić gmaila poprawnie gdzie te porty
komentarz 3 sierpnia 2020 przez graj23x Obywatel (1,590 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,590 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 Dyskutant (7,720 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,590 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 Dyskutant (7,720 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,590 p.)
A pod mój kod jak zrobić taki szablon
komentarz 29 stycznia 2021 przez graj23x Obywatel (1,590 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 2021 przez Nelson89 Dyskutant (7,720 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

komentarz 27 maja 2022 przez graj23x Obywatel (1,590 p.)

próbowałem naprawić ten kod tak

import smtplib
with open("moje.txt", 'r') as f:
    maile = [a.strip() for a in f.readlines() if a.strip()]
    print(maile)
gmail_user = 'okuppieniedzy@gmail.com'
gmail_password = 'TAboret2345'
sent_from = gmail_user
email_text = 'To ty'
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')

A błąd taki się pojawia :

"C:\Users\Pablo\PycharmProjects\moja emaile\venv\Scripts\python.exe" "C:/Users/Pablo/PycharmProjects/moja emaile/main.py"
Traceback (most recent call last):
  File "C:\Users\Pablo\PycharmProjects\moja emaile\main.py", line 2, in <module>
    with open("moje.txt", 'r') as f:
FileNotFoundError: [Errno 2] No such file or directory: 'moje.txt'

komentarz 27 maja 2022 przez Nelson89 Dyskutant (7,720 p.)

Cześć

program nie może znaleźć pliku moje.txt. Sprawdź czy plik ten rzeczywiście istnieje, Jak używasz tego kodu jako pakiet, to pamiętaj, że zaimportowane moduły/pakiety widzą ścieżkę z punktu głównego pliku (czyli ten, który uruchamiasz po poleceniu python ... w bashu/shellu, a nie z poziomu modułu (tutaj może się przydać zmienna __file__ aby ustalić tą ścieżkę) albo podaj po prostu pełną ścieżkę do pliku.

Pozdrawiam

Nelson

Podobne pytania

0 głosów
0 odpowiedzi 406 wizyt
pytanie zadane 20 maja 2021 w Python przez graj23x Obywatel (1,590 p.)
0 głosów
1 odpowiedź 285 wizyt
0 głosów
1 odpowiedź 364 wizyt
pytanie zadane 1 maja 2021 w Python przez Programmer01 Początkujący (490 p.)

92,452 zapytań

141,262 odpowiedzi

319,077 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...