W ten weekend kolega postanowił – za moją radą, bazująca na moim doświadczeniu – przejść z wysyłką wiadomości e-mail do usługi Amazon SES (Amazon Simple Email Service) działającej w ramach platformy Amazon AWS (Amazon Web Services). Przejście w sklepie (WordPress i WooCommerce) pilotowałem, tak by odbyło się bez problemów, i na tym temat się zakończył. Przynajmniej do niedzieli, gdy dostałem od kolegi informacje, że wprawdzie ze sklepu wiadomości wychodzą bez problemu, to już PHPMailer (prosty landing page z formularze) jak i MSMTP (wiadomości e-mail z serwera) nie chcą działać, wyrzucając błąd autoryzacji. I to pomimo tego, że na wszelki wypadek kolega wygenerował nowego użytkownika, z nowymi danymi logowania (klucze).

Klucze Amazon SES API to nie to samo co Amazon SES SMTP

I choć w przypadku kolegi na tym zakończyłem diagnozę, to na potrzeby tego artykułu troszkę jeszcze rozwinę „tło sytuacji”, tak by nie tylko zwiększyć szansę, że ktoś z wyszukiwarki tutaj trafi, ale i nadać całości kontekst, bo w końcu nie każdy musi kojarzyć zasady działania – w tym autoryzacji – usług w ramach Amazon AWS, w tym Amazon SES.

Dlatego już po „rozwiązaniu problemu” u kolegi postanowiłem odtworzyć problem, podstawiając na jednym ze swoich serwerów w konfiguracji programu MSMTP klucze API do usługi Amazon SES. Oczywiście klucze prawdziwe, z odpowiednimi uprawnieniami, tak by to nie w tym miejscu był problem.

I zgodnie z oczekiwaniami, podczas próby wysyłki wiadomości e-mail za pomocą MSMTP otrzymałem komunikat o błędzie:

Oct 17 18:51:53 host=email-smtp.eu-central-1.amazonaws.com tls=on auth=on user=2BGHUTW5QNUUF42G3EWL [email protected] [email protected] smtpstatus=535 smtpmsg='535 Authentication Credentials Invalid' errormsg='authentication failed (method PLAIN)' exitcode=EX_NOPERM

Komunikat z jednej strony poprawny, bo informuje o tym, że jest problem z autoryzacją, ale jednocześnie nie bardzo informuje, na czym on polega. I pewnie mój kolega – wraze ze swoim zdziwieniem – nie jest odosobnionym przypadkiem (co potwierdza wyszukiwarka ;-)), jeśli chodzi o ten problem.

I tak na potrzeby WordPressa (i WooCommerce) wygenerowałem parę kluczy do wysyłki wiadomości za pomocą API, dzięki czemu jest to (wysyłka) nie tylko szybszy proces, ale też umożliwia skorzystanie z dodatkowym możliwości dzięki dwustronnej komunikacji (serwer Amazon SES – strona WWW). I wszystko działało świetnie, dopóki kolega nie zechciał użyć tych danych do autoryzacji połączenia z usługą w ramach standardu SMTP (bardziej klasyczna wysyłka wiadomości e-mail), czyli właśnie w PHPMailer czy MSMTP.

A wszystko dlatego, że w ramach usługi Amazon SES mamy nie tylko klucze API (IAM), które są używane również przez inne usługi w ramach Amazon AWS, ale też dane logowania Amazon SES SMTP, wykorzystywane przy połączeniach w ramach SMTP. I nie można z nich korzystać zamiennie.

Dlatego gdy kolega wziął klucze Amazon SES API i chciał ich użyć w ramach protokołu SMTP, otrzymywał za każdym razem komunikat o błędzie. Bo klucze do SMTP (odpowiednik loginu i hasła) generujemy bezpośrednio w widoku usługi Amazon SES, w ustawieniach SMTP (SMTP Settings):

W tym miejscu od razu uczulam na jeszcze jedną „pułapkę”, w którą wiem z doświadczenia, że wpada sporo osób (zwłaszcza) zaczynających swoją przygodę z wysyłką wiadomości za pomocą usługi Amazon SES. Chodzi o wybór odpowiedniego regionu podczas tworzenia danych logowania SMTP.

Bo o ile w przypadku kluczy API nie ma to (zazwyczaj) znaczenia, to dane logowania SMTP są powiązane z konkretnym regionem, za pomocą którego będziemy wysyłać wiadomości (np. Frankfurt i email-smtp.eu-central-1.amazonaws.com, z którego najczęściej ja korzystam). Jest to o tyle istotne, że tak jak klucze SES API nie działają w ramach SES SMTP, tak samo klucze SES SMTP nie działają w innych regionach, niż ten, dla którego zostały utworzone.

Jeśli chodzi o usługę Amazon SES (jak i Amazon AWS) na pewno nie jest to ostatni artykuł, bo choćby po Trello widzę, że jest już zapisanych kilka tematów, w tym ten podstawowy, czyli jak w ogóle skonfigurować usługę, by móc za jej pomocą wysyłać wiadomości e-mail. Ale uznałem, że problem, z jakim przyszło się zmierzyć koledze, choć potencjalnie błachy – przynajmniej jeśli chodzi o rozwiązanie, gdy wiadomo już co i jak – może być na tyle powszechny, że warto o tym napisać, nawet wyprzedzając artykuł o samej usłudze Amazon SES…

(!) Zgłoś błąd na stronie
Pomogłem? To może postawisz mi wirtualną kawę?
LUTy dla D-Cinelike (DJI Mini 3 Pro, DJI Avata, OSMO Pocket) od MiniFly
Wdrożenie Omnibusa w sklepie na WooCommerce
Jak (legalnie) latać dronem w Kategorii Otwartej
Patryk