[GiM logo] gim.org.pl is down || odświeżony jogger (v.0.4) GiMa

Jakiś czas temu potrzebowałem napisać małą aplikację, która pozwoliłaby mi na wysyłanie maili poprzez MS Exchange 2007. Udostępnie on po SOAPie api które się zwie EWS (Exchange Web Services)

Głównym celem było zrobienie tego możliwie szybko.
Najpierw próbowałem biblioteki do obsługi SOAPa w pythonie python-suds.
Po kilku problemach na wstępie (których już dokładnie nie pamiętam) i chwili googlania, znalazłem coś co się zwie suds-ews, czyli teoretycznie suds ze wsparciem dla EWS.

Z tego co pamiętam dorzucając python-ntlm i korzystając potem z suds.transport.windows udało się nawet połączyć z serwerem exchange'a, ale wyglądało na to, że ten suds-ews, niezbyt obsługuje typy tablicowe, które EWS sobie definiuje, a przynajmniej ja nie miałem pojęcia jak z nich skorzystać.

Skończyło się na tym, że odpaliłem Visuala i napisałem krótki program, który robi to co trzeba.
Najpierw trzeba wygenerować Proxy, można to zrobić przy użyciu narzędzia wsdl, ja to robiłem z poziomu Visuala, opis jest tutaj.
Istotna informacja, która dla SOAPowców pewnie jest dość oczywista, dla mnie nie była :> : przy tworzeniu Proxy w Visualu należy podawać ścieżkę do /EWS/Services.wsdl, a w kodzie ściężkę do /ews/Exchange.asmx

Nie ukrywam, że nie znam C#, ale mając przykłady napisanie aplikacji nie było zbyt problematyczne.
Celowo wykomentowałem własny callback do sprawdzania certyfikatu, głównie po to, by móc odpalić to pod mono (o tym za chwilę) bez konieczności weryfikacji CRL.
Aplikacja jako argument bierze nazwę pliku który będzie wysłany, pierwsza linijka jest traktowana jako temat wiadomości, dodatkwo potrzebuje pliku config.txt o skomplikowanej postaci:

  • recipients = one@foobar.com, two@foobar.com

Kod jest tu: Ews.cs.
Należy sobie zmodyfikować usera, hasło, domenę i hostname w CreateBinding() (Wszystkie metody są statyczne, bo jak już wspomniałem, jestem leniwy ;p).

Próbowałem wygenerować Proxy, używając narzędzia wsdl, które przychodzi z mono, ale aktualnie nie działa, bug odnośnie tego wisi półtora roku.
Jeżeli jednak mamy Proxy wygenerowane w Visualu, to można powyższą aplikację skompilować i odpalić w mono

  • mono-csc -r:System.Web.Services.dll Ews.cs Web\ References/ExchangeWebServices/Reference.cs

Certyfikat który przychodzi z serwera, nie musi zawierać certyfikatu root'a, więc najlepiej jest dodać ręcznie certyfikat dla CA, którym podpisany jest certyfikat serwera Exchange. W moim przypadku Thawte Premium Server CA

  • wget https://www.thawte.com/roots/thawte_Premium_Server_CA.pem -O root.cer
  • certmgr -add -c Trust root.cer
  • mono Ews.exe listaOdbiorcow.txt

Rozszerzenie certyfikatu ma znaczenie, certmgr, nie łyknie rozszerzenia .pem

catz: [kom.puterowe] [micr.osoft] [pro.gramowanie] [Techblog]
tagz: [C#] [EWS] [Exchange 2007] [Exchange Web Services] [certmgr] [mono] [python-suds] [send e-mail] [suds-ews]
dnia niedziela, 23 styczeń 2011, 182350 by Michał 'GiM' Spadliński

Komentarze:

Proszę wpisy pisane po angielsku komentować również w tym języku.
..tożsamość..:
..meritum..:
..lokum..:
Wpisz kod:code