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

question-closed Python, smtp. Wysyłanie wiadomości e-mail. Nietypowy problem ze zmiennymi środowiskowymi.

VPS Starter Arubacloud
0 głosów
624 wizyt
pytanie zadane 15 stycznia 2020 w Python przez Jakub 0 Pasjonat (23,120 p.)
zamknięte 15 stycznia 2020 przez Jakub 0

Witam, mam bardzo dziwny problem. Kod prezentuje się tak:

import os
import smtplib

EMAIL_ADDRESS = os.environ.get('GTEST_APP_PASS')
EMAIL_PASSWORD = os.environ.get('GTEST_LOGIN')

with smtplib.SMTP('smtp.gmail.com', 587) as smtp:
    smtp.ehlo()
    smtp.starttls()
    smtp.ehlo()

    smtp.login(EMAIL_ADDRESS, EMAIL_PASSWORD)

    subject = 'Hello world!'
    body = 'I am Jakub Padlo'

    msg = f'Subject: {subject}\n\n{body}'

    smtp.sendmail(EMAIL_ADDRESS, 'jakubpadlo4@gmail.com', msg)

Problem tyczy się metody login, przy takiej postaci mam błąd autoryzacji. Jednak kiedy zamiast używania zmiennych środowiskowych napiszę maila i hasło do mojego testowego konta na sztywno w kod programu to problem znika. W metodzie login nie mogę użyć ani samej zmiennej EMAIL_ADDRESS ani tej z hasłem.

Wiem że wielu z was powie teraz że po prostu zmienne środowiskowe mają w sobie złą wartość lub najzwyczajniej nie istnieją. Problem jest tylko taki że kiedy wypisuje w konsoli wartości EMAIL_ADDRESS oraz EMAIL_PASSWORD to wszystko się zgadza. Kiedy te wartości skopiuję do kodu to problemu nie ma. Poza tym gdyby problem był przykładowo z EMAIL_ADDRESS to metoda sendmail nie działała w ogóle prawidłowo, a ona nie sprawia żadnych problemów. 

Nie mam zielonego pojęcia co tu może się dziać. 

Bardzo będę wdzięczny za pomoc bo żadne sensowne wyjaśnienie tego fenomenu mi nie przychodzi do głowy :/

Bardzo dziękuje i pozdrawiam serdecznie. 

 

 

komentarz zamknięcia: problem rozwiązany

1 odpowiedź

0 głosów
odpowiedź 15 stycznia 2020 przez edwardkraweznik Dyskutant (9,930 p.)
wybrane 15 stycznia 2020 przez Jakub 0
 
Najlepsza

w zależności jak MTA jest skonfigurowany często wymagane jest TLS (prawdopodobnie gmail tego wymaga)

poczytaj o starttls

https://docs.python.org/2/library/smtplib.html

zaznaczam, że tego kodu nie testowałem ale prawdopodobnie w tym problem

nie mam konta na gmailu ale możesz to sprzwdzić wysyłając maila zwykłym telnetem... (raczej na 100% gmail wymaga TLS)

EDIT:

Jeszcze może jakiś problem z argumentami ?

sprawdź sobie jakoś primtem czy skrypt dostaje te argumenty

https://www.tutorialspoint.com/python/python_command_line_arguments.htm

Dupa niedoczytałem twojego kodu :)

sprawdż sobie printem czzy skrypt dostaje zmienne...

komentarz 15 stycznia 2020 przez Jakub 0 Pasjonat (23,120 p.)

sprawdż sobie printem czzy skrypt dostaje zmienne...

No mówiłem że tak, to jest właśnie strasznie dziwne. Działa mi tylko wtedy kiedy nie korzystam z tych zmiennych środowiskowych, z tym że ja nie za bardzo chcę trzymać moje hasło w kodzie programu ;)

Cóż, pozostało mi chyba tylko stworzyć nowe hasło dla aplikacji, może coś z tego będzie. 

komentarz 15 stycznia 2020 przez Jakub 0 Pasjonat (23,120 p.)
edycja 16 stycznia 2020 przez Jakub 0
Przeszło mi nawet przez myśl że na windowsie wartości zmiennych środowiskowych są jakoś inaczej kodowane i coś się nie zgadza...
komentarz 15 stycznia 2020 przez reaktywny Nałogowiec (42,140 p.)

@Jakub 0, A jeszcze bym sprawdził jedną rzecz. W ustawieniach poczty GMAIL trzeba zezwolić na obsługę poczty z programów "zewnętrznych" (czy jakos tak).

There are a few steps you need to take before you can send emails through Gmail with SMTP, and it has to do with authentication. If you're using Gmail as the provider, you'll need to tell Google to allow you to connect via SMTP, which is considered a "less secure" method.

You can't really blame Google for setting it up this way since your application (or some other 3rd party app) will need to have your plaint-text password for this to work, which is definitely not ideal. It's not like the OAuth protocol where a revocable token is issued, so they have to find another way to ensure no unauthorized parties access your data.

 

komentarz 15 stycznia 2020 przez edwardkraweznik Dyskutant (9,930 p.)

a zobacz sobie:

EMAIL_ADDRESS = os.environ.get('GTEST_APP_PASS')
EMAIL_PASSWORD = os.environ.get('GTEST_LOGIN')

może powinno być odwrotnie:

EMAIL_ADDRESS = os.environ.get('GTEST_LOGIN')
EMAIL_PASSWORD = os.environ.get('GTEST_APP_PASS')

 

komentarz 15 stycznia 2020 przez Jakub 0 Pasjonat (23,120 p.)

@jankowalski2019

Nie wiem jak to skomentować... nie mam nic na swoją obronę :/ 

Masz NAJ ;) Dzięki laugh

* chyba jestem ślepy 

1
komentarz 15 stycznia 2020 przez edwardkraweznik Dyskutant (9,930 p.)
bywa :) sam się nieraz tak pierdzielnę :P pozdrawiam

Podobne pytania

0 głosów
2 odpowiedzi 739 wizyt
pytanie zadane 21 lipca 2017 w PHP przez Tomo231 Początkujący (320 p.)
0 głosów
1 odpowiedź 288 wizyt
pytanie zadane 25 lipca 2019 w JavaScript przez DanexZ Obywatel (1,270 p.)
0 głosów
1 odpowiedź 466 wizyt
pytanie zadane 22 grudnia 2015 w C i C++ przez C☺ndzi Stary wyjadacz (12,100 p.)

92,962 zapytań

141,925 odpowiedzi

321,161 komentarzy

62,296 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.

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...