Helpdesk: Używanie konta GMail do automatyzacji

5-lis-2023

Chcesz skonfigurować drukarkę, żeby automatycznie wysyłała faksy? A może chcesz codziennie dostać na maila raport o ilości wolnego dysku na domowym serwerze? A może po prostu chcesz z poziomu programu, czy skryptu wysłać sobie maila? W takim przypadku musisz skonfigurować, drukarkę, czy skrypt do korzystania z serwera SMTP. Jest jednak drobny problem. Ileś tam lat temu, żeby wysłać maila wystarczyło znać nazwę użytkownika i hasło i było to mocno wykorzystywane przez spamerów. Dlatego konfiguracja SMTP jest chyba obecnie jedną z najcięższych dla administratora, a i dla programisty wiele się zmieniło. Jeśli chcesz użyć SMTP programistycznie musisz wygenerować sobie odpowiedni token, tzw. application password. Tutaj pokażę, jak to zrobić z kontem GMAIL.

  1. Udaj się na https://security.google.com/settings/security/apppasswords. Jest to strona, która pozwala zdefiniować app passwords. Jednym z utrudnień dla spamerów ma być to, że wszelkie automaty używające Twojego konta pocztowego powinny mieć swoje hasła, nie mogą one korzystać z hasła, jakim zabezpieczasz całe swoje konto.
  2. Wymyśl jakąć nazwę aplikacji, np. „Drukarka Xerox” albo „Mój skrypt XYZ”. Po kliknięciu Create zostanie wyświetlone hasło.

    Uwaga: hasłem są poszczególne literki/cyferki, spacje między nimi już nie.
  3. Teraz przejdź do konfiguracji poczty wychodzącej Twojej drukarki, albo skryptu. Np. ustawienia na mojej drukarce są takie:

    a tak wygląda konfiguracja connectora email na Azure:

    a tak wygląda skrypt w pythonie:
import smtplib
 
mailFrom = 'Your automation system'
mailTo = ['XXX@wp.pl','YYY@gmail.com']
mailSubject = 'Processing finished successfully'
mailBody = '''Hello
This mail confirms that processing has finished without problems,
Have a nice day!'''
 
message = '''From: {}
Subject: {}
 
{}
'''.format(mailFrom, mailSubject, mailBody)
 
user = 'my_user@gmail.com'
password = '***********'
 
server = smtplib.SMTP_SSL('smtp.gmail.com', 465)
server.ehlo()
server.login(user,password)
server.sendmail(user, mailTo, message)
server.close()
print('mail sent')

Komentarze są wyłączone

Autor: Rafał Kraik