E-posta hesabı ve ilgili sürece karar verdikten sonra ilk olarak EBI Servis Shell config dosyasında aşağıdaki değişiklikleri uyguluyoruz.

1--config içerisine yeni bir section eklediğimiz için section bölümüne bu alanı eklememiz gerekiyor. 

Config section bölümü
<section name="mailReader" type="EBI.EBIFlow.MailReader.Server.Configuration.Section,EBI.EBIFlow.MailReader.Server"/> 

 

2. E-postadan okuma için yeni bir uygulama başlatılacağı için applications altına application bilgisini eklememiz gerekiyor. 

Ayağa kaldırılması gereken uygulamalar buraya yazılır.
 <application namespace="EBI.EBIFlow.MailReader.Server.Application" type="EBI.EBIFlow.MailReader.Server.ApplicationFactory,EBI.EBIFlow.MailReader.Server" />

 

3-Mail yoluyla başlatmak istediğiniz süreci wflProcesses tablosundan Id sini not almanız gerekmekte, örnek süreç uygulama dizinin de \Assemblies\SampleProcesses\Mail Receiver.process bulunmaktadır.Biz burada örnek süreci kulanarak anlatım yapacağız.

 

4-mailReader içinde ilgili alanları konfigure etmeden önce sahip olduğu özellikleri 

Özellikler

 AdıAçıklama
 intervalE-posta okuma süresini saniye cinsenden belirlemek için kullanılır ve varsayılan değeri 60 saniyedir
 sessionUserEBIFlow web uygulamasına giriş yapacak kullanıcı ismini belirler.
 sessionPasswordEBIFlow web uygulamasına giriş yapacak kullanıcı şifresini belirler.
 logonProvider

EBIFlow uygulamasına giriş yapacak kullanıcı için kullanılacak logon sistemini belirler ve varsıylan değeri Dummy dir.

AdÖzellik
Dummyveritabanında kullanıcı ismi olması yeterlidir şifre değerine bakmadan kullanıcıyı sisteme giriş yapmasını sağlar.
Organization2veritabanında bulunan kullanıcı ismi ve şifresi ile sisteme giriş yapmasını sağlar
LDAPveritabanında bulunan kullanıcı ismi ile LDAP sistemine giriş yaparak kullanıcının sisteme giriş yapmasını sağlar.
  defaultProcess mailReader içersine birden fazla server eklemesi yapılabilir ve eklenen server lara başlatılacağı süreç set edilmediğinde bu bölümdeki süreci kullanır.
  servers

 Birden çok server sistemi burada barındırılır.

  server

E-posta bilgilerini tutar

AdÖzellik
url

E-posta servisi için gerekli url burada tutulur.

Örn:https://owa.companyname.com.tr/EWS/Exchange.asmx

autoDiscover

E-posta üzerinden tespit edilebilecek bir e-posta sistemi kullanııyor sa buraya ilgili e-postaı yazmak yeterlidir.

Örn:ebiflow@eczacibasi.com.tr

type

E-posta servis tipini belirler.

Örn:Exchange_SP1

userE-posta servisine bağlanacak kullanıcı bilgisini belirler.
passwordE-posta servisine bağlanacak şifre bilgisini belirler.
domain

E-posta servisinin domain bilgisini tutar.

Örn:ECZACIBASI

timeoutE-posta servisi için zaman aşımı süresini belirler.
processE-posta içerisine atılacak mail sonrası başlatılacak olan süreci belirler bu bölüm Id değeri tutar ve wflProcess tablosunda ilgili sürece ait Id değeri ile doldurulması gereklidir.
maxitemsE-posta servisine her bir bağlantı sonucunda başlatacağı maximum süreç sayısını belirler. varsayılan değeri 20 dir.
requestedHeaders

E-posta servisinden daha fazla bilgi almak için kullılan bölümdür.

AdÖzellik
X-Originating-IPEğer servis sağlayıcısı IP değerini tutabiliyorsa gönderen kişinin IP değerini almak için bu özellik Header bilgisine eklenir.
Return-Path
Gönderen kişiye ait header bilgisi altında Replay-To veya Return-pAth bilgisi dolu ise bu bilgiyi almak için kulalnılır.
X-MS-Exchange-Organization-AuthSource

Exchange servis kullanan organizasyonların login kaynak bilgisini tutar.

ÖRN:TAT13MBX01.tatlises.com.tr

 

5-Özellikler bölümünde detaylı olarak açıklanan alanlarla oluşturulmuş örnek konfigurasyon aşağıdadır. Burada john.wick EBIFlow kullanıcısı ECZACIBASI domainine bağlı john.wick e-posta adresine gelmiş e-posta sonrası process bölümünde verilmiş Id ye sahip süreci wflProcess tablosundan bularak süreci başlatacak.Eğer process e süreç Id si verilmeseydi defaultProcess de bulunan süreç çalıştırılacaktı. 

Örnek mailReader konfigürasyonu
<mailReader interval="60" sessionUser="john.wick" defaultProcess="82B6D98B-D29D-4DF7-9DF5-F0A1D39C3F13">
    <servers>
      <server url="https://owa.sirketdomain.com.tr/EWS/Exchange.asmx" autoDiscoverUrl="" type="Exchange2007_SP1" 
              user="john.wick" password="epostasifresi" domain="ECZACIBASI" 
              timeout="0" process="82B6D98B-D29D-4DF7-9DF5-F0A1D39C3F13" maxitems="5" requestedHeaders="X-Originating-IP;Return-Path;X-MS-Exchange-Organization-AuthSource"/>
    </servers>
</mailReader> 

 

6-Tüm ayarları tamamladık. Örnek mail atıyoruz 

 

7-Atılan e-posta sonrası ilgili mailReader uygulaması bizim belirttiğimiz değer olan 60 saniyede bir servisi kontrol edecek sonrasında atılan mail e ulaşıp süreci başlatıyor.

 

Süreç içerisinde ulaşılabilecek bilgiler

  1. Alıcı ismi
  2. Alıcı ile birlikte eklenen diğer kişilerin bilgileri
  3. Gönderen bilgisi
  4. Header bilgileri
  5. Konu
  6. İçerik bilgisi de html olarak gönderilip süreç içerisinde html olarak görüntülenecek. 
  7. Ek dosya aynı isim ve formatta sisteme eklenmiş olarak görüntülenecek.

Süreç içerisine serviceData xml yolunu içersine ilgili bilgilerin geleceği yapı aşağıdaki gibidir. 

Xml yapısı
 <serviceData>
  <email>
    <sender />
    <recepients>
      <recepient />
    </recepients>
    <infos/>
    <headers>
      <header>
        <name />
        <value/>
      </header>
    </headers>
    <subject />
    <body />
  </email>
  <FileUploadInfo>
    <File>
      <FileName />
      <Id />
      <WorkItemId />
      <Owner />
      <Hash />
      <Hash256 />
      <Date />
      <ContentType />
    </File>
  </FileUploadInfo>
</serviceData>

 

Dönen veri özellikleri

 AdÖzellik
 email

e-posta içerik bilgilerinin tutulduğu bölümdür.

Adözellik
sendergönderen kişi bilgisini tutar
recepientsAlıcı bilgilerini çoklu olarak tutar receipt yolu altında tutar.
infosbilgi verilerini info altında çoklu olarak tutar.
headersistediğimiz başlık bilgilerini header altında name ve value olacak şekilde çoklu olarak tutar
subjectkonu bilgisini tutar.
bodyiçerik bilgisini hmtl olarak tutar.
 FileUploadInfo

 Ek dosya bilgilerinin tutulduğu bölümdür.File yolu altında tutar.

AdÖzellik
FileNameDosya ismini tutan alandır
IdDosyanın veri tabanına bırakıldığı Id değeridir
WorkItemIdİlgili iş adımının Id değeridir
OwnerDosyayı yükleyen kişinin bilgisi burada tutulur
HashDosyanın Hash değeri
Hash256Dosyanın Hash256 değeri
DateDosya yüklenme tarihi
ContentTypeİçerik tipi

 

Kullandığımız örnek süreçte bulunan test maili için gelen veri xml aşağıdaki gibidir. 

<serviceData>
  <email>
    <sender>john.wick@eczacibasi.com.tr</sender>
    <recepients>
      <recepient>john.wick@eczacibasi.com.tr</recepient>
    </recepients>
    <infos/>
    <headers>
      <header>
        <name>X-Originating-IP</name>
        <value>[10.10.10.10]</value>
      </header>
      <header>
        <name>Return-Path</name>
        <value>null</value>
      </header>
      <header>
        <name>X-MS-Exchange-Organization-AuthSource</name>
        <value>TAT13MBX01.eczacibasi.com.tr</value>
      </header>
    </headers>
    <subject>Merhaba bu bir testtir</subject>
    <body>
      <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <meta name="Generator" content="Microsoft Word 15 (filtered medium)" />
      </head>
      <body lang="TR" link="#0563C1" vlink="#954F72">
        <div class="WordSection1">
          <p class="MsoNormal">
            <span style="color:#1F497D;mso-fareast-language:TR">
              Merhaba,<o:p></o:p>
            </span>
          </p>
          <p class="MsoNormal">
            <span style="color:#1F497D;mso-fareast-language:TR">
              <o:p>&nbsp;</o:p>
            </span>
          </p>
          <p class="MsoNormal">
            <span style="color:#1F497D;mso-fareast-language:TR">
              Bu bir testtir.
              <o:p></o:p>
            </span>
          </p>
          </p>
        </div>
      </body>
    </body>
  </email>
  <FileUploadInfo>
    <File>
      <FileName>EmailMessage.eml</FileName>
      <Id>2db442cb-c4f5-44e3-9a6e-1be1a2a6a9d1</Id>
      <WorkItemId>7bdc9cb4-8496-47c7-939a-97bf34a4b5c4</WorkItemId>
      <Owner display="JOHN WICK">d93094cf-efc2-43e5-af4f-5841bd06872b</Owner>
      <Hash>m/EPDgGCWMwshiTk2aQwJ8pVTEI=</Hash>
      <Hash256>EnHpvlFTGPH7D0ECwj9VpUDwgnwf/bAoWffJ72pynDA=</Hash256>
      <Date>2017-03-11 21:16:15Z</Date>
      <ContentType>message/rfc822</ContentType>
    </File>
    <File>
      <FileName>Ekli Dsya.pptx</FileName>
      <Id>cbac7b2a-1252-41b8-a3e7-3556e63268e2</Id>
      <WorkItemId>7bdc9cb4-8496-47c7-939a-97bf34a4b5c4</WorkItemId>
      <Owner display="JOHN WICK">d93094cf-efc2-43e5-af4f-5841bd06872b</Owner>
      <Hash>40SwGiVxqA8Zx7iqMKrAs6c5z2o=</Hash>
      <Hash256>DHYsheglT+OXYzYsflHMA6ZymdpFKXDJpR6IU5vj0PI=</Hash256>
      <Date>2017-03-11 21:16:16Z</Date>
      <ContentType>application/vnd.openxmlformats-officedocument.presentationml.presentation</ContentType>
    </File>
  </FileUploadInfo>
</serviceData>

 

Gelen verileri süreç içerisinde kullanımı için hazırlanan örnek süreç scriptleri aşağıdaki gibidir. 

Örnek süreç iş sonrası script
  <If>
    <Then>
      <Condition>
        <Not>
          <IsEmpty>
            <Value Culture="" Target="None">eval::/*/serviceData/email</Value>
          </IsEmpty>
        </Not>
      </Condition>
      <Perform>
        <Set Node="/*/Mail/From">
          <Value Culture="" Target="None">eval::/*/serviceData/email/sender</Value>
        </Set>
        <Set Node="/*/Mail/Subject">
          <Value Culture="" Target="None">eval::/*/serviceData/email/subject</Value>
        </Set>
        <Set Node="/*/Mail/Body">
          <Value Culture="" Target="None">eval::/*/serviceData/email/body</Value>
        </Set>
        <ForEach Node="/*/serviceData/email/recepients/recepient">
          <Insert Into="/*/Mail/Recepient/Data">::/*/Mail/Recepient/Template</Insert>
          <Set Node="/*/Mail/Recepient/Data/Template[last()]/email">
            <Value Culture="" Target="None">eval::.</Value>
          </Set>
        </ForEach>
        <ForEach Node="/*/serviceData/email/headers/header">
          <Insert Into="/*/Mail/Header/Data">::/*/Mail/Header/Template</Insert>
          <Set Node="/*/Mail/Header/Data/Template[last()]/Name">
            <Value Culture="" Target="None">eval::./name</Value>
          </Set>
          <Set Node="/*/Mail/Header/Data/Template[last()]/Value">
            <Value Culture="" Target="None">eval::./value</Value>
          </Set>
        </ForEach>
        <ForEach Node="/*/serviceData/FileUploadInfo/File">
          <SetVariable Name="$(Hash)">
            <Value Culture="" Target="None">eval::./Hash</Value>
          </SetVariable>
          <SetVariable Name="$(Hash256)">
            <Value Culture="" Target="None">eval::./Hash256</Value>
          </SetVariable>
          <SetVariable Name="$(FileName)">
            <Value Culture="" Target="None">eval::./FileName</Value>
          </SetVariable>
          <SetVariable Name="$(ContentType)">
            <Value Culture="" Target="None">eval::./ContentType</Value>
          </SetVariable>
          <SetVariable Name="$(Id)">
            <Value Culture="" Target="None">eval::./Id</Value>
          </SetVariable>
          <SetVariable Name="$(WorkItemId)">
            <Value Culture="" Target="None">eval::./WorkItemId</Value>
          </SetVariable>
          <SetVariable Name="$(OwnerId)">
            <Value Culture="" Target="None">eval::./Owner</Value>
          </SetVariable>
          <SetVariable Name="$(OwnerName)">
            <Value Culture="" Target="None">eval::./Owner/@display</Value>
          </SetVariable>
          <SetVariable Name="$(Date)">
            <Value Culture="" Target="None">eval::./Date</Value>
          </SetVariable>
          <SetVariable Name="$(TemplateId)">
            <Value Culture="" Target="None">NewGuid</Value>
          </SetVariable>
          <Insert Into="/*/Mail/Attachments/Details"><Template guid="$(TemplateId)">
  <WorkItemId>$(WorkItemId)</WorkItemId>
  <Owner display="$(OwnerName)">$(OwnerId)</Owner>
  <Date>$(Date)</Date>
  <FileName>$(FileName)</FileName>
  <Id>$(Id)</Id>
  <ContentType>$(ContentType)</ContentType>
  <Hash>$(Hash)</Hash>
  <Hash256>$(Hash256)</Hash256>
</Template></Insert>
        </ForEach>
      </Perform>
    </Then>
  </If>

Tüm bu işlemlerin sonunda başlatma adımı Onayla aksiyonu ile ilerletilerek sonraki adıma düşecektir. Burada onayla adımından sonra bir modül tanımlanarak içerisinde farklı yollar için yönetim yapılabilir. 

  • No labels