# E-Mail Gateway ###### tags: `abandon` Organizasyon ihtiyaç duyduğu mail gönderimini sağlayan mikro servis kümesidir. ## Temel Hedefler * Hizmetini RestAPI olarak sunması. * Bağımsız veritabanı ve loglama yapısına sahip olması. * Hem tekil hem toplu halde mail gönderme yetenegine sahip olması. * Mail açılma takibi yapabilmesi. * Kampanyalar için mail gönderim izini hem bankamızdan hem İYS üzerinden kontrol edebilmesi. ## Teknoloji * .Net Core Service Application * Templating Engine : FW  Templşating Engine + https://github.com/lunet-io/scriban * Tanımlar ve talepler için veri tabanı olarak SQL Server kullanılır. * LOG kayıtları için ELK kullanılır. ## Dağıtım Listeleri Tanımları Kulanıcıya gönderilecek tüm epostalar bir dağıtım listesi üzerinden gönderilir. Dağıtım listelerine ilgili mail templateler bağlanır. Dağıtım listesine sadece veri ile kayıt açılarak mail gönderimi sağlanır. **deliver-method** dağıtım listesine bir e-posta gönderlerinin hemen mi (solo) yoksa *frequency* süresi kadar toplanıp birleştirilerek mi (digest) gönderileceğini belirler. **frequency** CRON formatında mail gönderim frekans tanımıdır. Boş geçilmesi durumunda her zaman delivery method solodur. **body-template** eğer dağıtım solo ise master içine her bir mail için oluşturulur. Eğer gönderim digest ise o zaman body tempalate repeater içerisinde her bir mail gönderim kaydı için çalışır. **type** alanı içeriği tanımlar. - Eğer içerik bir pazarlama kampanyası ise **campaign** seçilir. Örneğik kredi kampanyası, kişiye özel kredi limit bilgisi, özel dönem kampanya mailleri gibi. Bu tip mail gönderiminde iletişim izni kontrolü sağlanır. - Eğer içerik kişiye özel bir bilgilendirme ise **private-info** seçilir. Örneğin ektreler, hesap kesim bilgisi, fatura ödeme bilgisi gibi içerikler bu sınıfta değerlendirilebilir. - Eğer içerik genel bir bilgilendirme ise **public-info** seçilir. Örneğin şube açılışı, banka iletişim bilgisi değişimi gibi içerikler bu sınıfta değerlendirilebilir. - Eğer içerik yasal bir bilgilendirme ise **legal** seçilir. Örneğin BDDK bilgilendirmeleri, vergi değişim bildirimi gibi içerikler bu sınıfta değerlendirilebilir. - Eğer içerik güvenlik doğrulaması ise **OTP** seçilir. Örneğin internet bankacılığı girişi bu sınıfta değerlendirilebilir ```json { "name": "debit-card-periodic-transaction-mail-distribution-list", "deliver-method": "digest | solo", "frequency ": "0 10 * * 1-5", "to": "{{user.primary-email}}", "cc": "{{user.emails | array.map 'email' }}", "bcc": "", "master-template": "debit-card-periodic-transaction-mail-master-digest", "subject-template": "debit-card-periodic-transaction-mail-subject-digest", "body-template": "debit-card-periodic-transaction-mail-content-body", "type": "private-info", "attachments": [ { "render": "pdf", "file-name":"list.pdf", "template": "debit-card-periodic-transaction-list-html" }, { "render": "html", "file-name":"gdpr.html", "template": "gdpr-info-html" } ] } ``` #### E-Posta Gönderim Kaydı Her bir dağıtım listesinde yapılan her gönderimin kaydı tutulur. Her bir gönderim kaydında göderiö detayları bulunur. **status-info** içerisinde gönderimle ilgili aksiyonlar ve zamanlar bulunur. Olası aksiyonlar; - "request": Gönderim talebilinin yapılması - "send": Gönderimin yapılması - "load": İçeriğin kullanıcı ekranına yüklenmesi (pixel tetilşemesi) - "not-delivered": Gönderim başarısız olması - "read-by-click": İçerik içerisinde bir linke tıklanması durumunda tıklandığı zaman (link relay) ```json { "to": "ugkaratas@gmail.com", "cc": "ukaratas@rocketmail.com, ukaratas@burgan.com.tr", "bcc": "", "distribution-list": "debit-card-periodic-transaction-mail-distribution-list", "status-info": [ { "action": "request", "times-tamp": "2019-11-22T13:20:00" }, { "action": "send", "times-tamp": "2019-11-22T13:20:00" }, { "action": "loaded", "times-tamp": "2019-11-22T13:20:00" }, { "action": "read-by-client", "times-tamp": "2019-11-22T13:20:00" } ], "subject": "Savgili Ugur", "body": "<html>Savgili Ugur</html>", "attachments": [ { "id": "d9a4bbc4-cca6-443e-b490-e48fc983f586", "file-name": "gdpr", "type": "pdf | html" } ] } ``` ## Gönderim Talebi Gönderim talebi sadece *render* amaçlı veri kümesini taşır. **render-data** templating için kullanıcak verileri taşır. Free format JSON olarak gönderilir. **source-data** sadece raporlama amaclı loglama icin kullanilir. Free format JSON olarak gonderilebilir. ```json { "distribution-list": "debit-card-periodic-transaction-mail-distribution-list", "render-data": { "user": { "primary-email": "ukaratas@rocketmail.com", "emails": [ { "email": "ukaratas@burgan.com.tr", "is-validated-by-customer": true, "is-validated-by-link": true }, { "email": "ukaratas@hotmail.com", "is-validated-by-customer": true, "is-validated-by-link": false } ] }, "transaction": {...} }, "render-data-to-log": {...} "source-data": { "Application": "Pusula", "Method": "Debit Card Transaction" } } ``` ## Tanım Servisleri ### GET : /email/definition/{page-index}/{page-size} Servisi ile sorgulanan tüm dağıtım listelerine erişilir. #### Query Parameter ``` "name": "debit-card-periodic-transaction%" ``` **name** parametresinde SQL Like benzeri parçalı arama yapılabilir. ### POST: /email/definition/ Servisi ile var olan bir kaydı güncelleyebilir veya yeni bir kayıt oluşturulabilir. Distribution list kaydı body olarak post edilir. ## Gönderim Servisleri ### POST: /email/send/ Servisi ile var olan bir e-posta gönderimi yapılır. Post parametresi array kabulu yaptığı için toplu gönderim talepleride bu servis üzerinden yapılır. :::info :bulb: Gönderim öncesinde İYS kontrolü yapılmalıdır. *İYS kontrolünde önce İYS kontrol edilir ve banka veri tabanı İYS verisi ile güncellenir.* ::: ### POST: /email/query/{distribution-list}/{page-index}/{page-size} Servisi ile gönderilen tüm e-posta kayıtlarına erişilir. Kayıtlar SQL Server üzerinde tutulur. ```JSON { "query": { "match": { "source-data.customerCN": "38552069008" } } } ``` ## Destek Servisleri ### Get: /email/pixel/{id} Servisi ile pixel kodu tetiklenir. Id olarak mail icin oluşturulmuş tekil id verilir. ### Get: /email/redirect/{id}/{url} Servisi ile link yonlendirmesi yapilir. Id olarak mail icin oluşturulmuş tekil id verilir. Mail olusturulurken icinde oluşan tüm linkler replace edilerek bu servis üzerinden yönlendirme yapılır.