Arif

WFN Üye
Konular
706
Mesajlar
706
Çözüm
0
Ticaret Puanı
0
Üyelik
24 Gün
Konum
Bilecik
Web Sitesi
Var
Alanı
SEO Uzmanı
1/1
Konu sahibi
İki farklı yöntem vardır: Kullanıcının bilgisayarındaki varsayılan e-posta uygulamasını açıp mesajı kullanıcıya onaylatmak için Delphi’nin TSendMail eylemini kullanabilirsiniz. ERP uygulaması hiçbir pencere açmadan, arka planda ve doğrudan bir posta sunucusu üzerinden gönderim yapacaksa SMTP istemcisi kullanmanız gerekir. Basit kullanıcı işlemleri için ilk yöntem yeterlidir; otomatik fatura, rapor veya bildirim gönderimi için SMTP yaklaşımı daha uygundur.

Varsayılan e-posta uygulamasını açarak gönderme​


TSendMail, Windows’taki MAPI altyapısını kullanarak bir e-posta oluşturma penceresi açar. Mesajın son gönderilmesi kullanıcının onayına bağlıdır; bu yöntem uygulamanın kendi başına sessiz biçimde e-posta gönderdiği anlamına gelmez.

VCL Forms projesinde forma bir TActionList ekleyin. Action List Editor üzerinden standart Internet eylemleri arasından TSendMail ekleyin. Ardından bir düğmenin OnClick olayında mesaj gövdesini hazırlayıp eylemi çalıştırabilirsiniz:

Kod:
procedure TForm1.btnEpostaClick(Sender: TObject);
begin
  SendMail1.Text.Clear;
  SendMail1.Text.Add('Merhaba,');
  SendMail1.Text.Add('');
  SendMail1.Text.Add('Bu mesaj Delphi uygulaması tarafından hazırlandı.');
  SendMail1.Text.Add('');
  SendMail1.Text.Add('İyi çalışmalar.');

  SendMail1.Execute;
end;

Kod çalıştığında bilgisayarda ilişkili bir e-posta istemcisi varsa mesaj oluşturma penceresi açılır. Kullanıcı alıcı, konu ve diğer alanları doldurup gönderme işlemini tamamlar. TSendMail.Text yalnızca mesaj gövdesini hazırlamak için kullanılır; uygulamanızın SMTP sunucusuna bağlanıp gönderim yaptığını göstermez.

Alıcıyı ve konuyu koddan hazırlamak veya dosya eklemek gerektiğinde TSendMail nesnesinin ilgili özelliklerini kullanabilirsiniz. Örneğin bir rapor dosyasını eklemek için dosyanın gerçekten var olduğunu kontrol ettikten sonra ekler koleksiyonuna ekleyin:

Kod:
procedure TForm1.btnRaporGonderClick(Sender: TObject);
begin
  if not FileExists('C:\Raporlar\satis-raporu.pdf') then
    raise Exception.Create('Rapor dosyası bulunamadı.');

  SendMail1.Attachments.Clear;
  SendMail1.Attachments.Add('C:\Raporlar\satis-raporu.pdf');
  SendMail1.Text.Text := 'Satış raporu ektedir.';
  SendMail1.Execute;
end;

Dosya seçiminden sonra e-posta penceresinin açılması, dosyanın alıcıya ulaştığını kanıtlamaz. Bu yalnızca mesajın yerel e-posta uygulamasına aktarıldığını gösterir. Gönderim, hesap yapılandırması, ağ bağlantısı ve posta sunucusunun kabul etmesi gibi sonraki aşamalara bağlıdır.

ERP uygulamasında doğrudan SMTP gönderimi​


Otomatik bildirimlerde kullanıcıdan e-posta penceresini kapatıp Gönder düğmesine basmasını beklemek genellikle uygun değildir. Bu durumda uygulama bir SMTP sunucusuna bağlanır; sunucu adresi, bağlantı noktası, güvenlik türü, kullanıcı adı ve parola ile kimlik doğrulaması yapar, ardından mesajı gönderir.

Bu bilgiler uygulama kaynak koduna sabit yazılmamalıdır. Özellikle parola, veritabanında düz metin olarak tutulmamalı ve hata günlüklerine yazılmamalıdır. SMTP sağlayıcısının güncel bağlantı bilgileri kullanılmalı; TLS/SSL seçimi sunucunun istediği yapılandırmaya göre yapılmalıdır.

Delphi projelerinde SMTP gönderimi için kullanılan bileşen kütüphanesine göre işlem değişir. Indy tabanlı bir çözümde tipik akış şöyledir:
  1. Mesaj nesnesinde gönderen, alıcı, konu ve gövde alanlarını doldurun.
  2. Varsa dosyayı ek olarak ekleyin.
  3. SMTP nesnesinde sunucu adresi, bağlantı noktası, kullanıcı adı, parola ve güvenlik ayarlarını belirleyin.
  4. Bağlantıyı kurup mesajı gönderin.
  5. Gönderim tamamlandığında bağlantıyı mutlaka kapatın ve hata oluşursa hassas bilgileri göstermeden teknik hatayı kaydedin.
Başarılı bir SMTP çağrısı, mesajın SMTP sunucusu tarafından kabul edildiğini gösterir; alıcının mesajı okuduğunu veya kesin olarak gelen kutusuna ulaştığını kanıtlamaz. Sunucu reddetme, yanlış kimlik bilgisi, TLS uyumsuzluğu, alıcı adresinin reddedilmesi ya da spam filtreleri farklı sonuçlara yol açabilir.

Hangi yöntemi seçmelisiniz?​

İhtiyaçUygun yöntemSonuç
Kullanıcı mesajı düzenleyip kendisi gönderecekTSendMailYerel e-posta istemcisi açılır; gönderme onayı kullanıcıdadır.
Fatura veya rapor otomatik gönderilecekSMTP istemcisiUygulama posta sunucusuna doğrudan bağlanır.
E-posta istemcisi kurulu olmayan bilgisayarSMTP istemcisiYerel posta uygulamasına bağımlılık azalır; sunucu ayarları gerekir.
Ek dosya gönderilecekHer iki yöntemDosya gönderimden önce varlık ve erişim açısından kontrol edilmelidir.
TSendMail.Execute çağrısından sonra pencere hiç açılmıyorsa bilgisayarda kullanılabilir bir MAPI e-posta istemcisi bulunmayabilir veya varsayılan ilişkilendirme yapılmamış olabilir. Mesaj penceresi açılıyor fakat gönderim başarısız oluyorsa sorun Delphi kodundan çok e-posta hesabının, ağın veya posta sunucusunun yapılandırmasında olabilir. Otomatik gönderimde hata oluştuğunda SMTP sunucusunun verdiği hata kodunu, kullanılan bağlantı noktasını ve TLS ayarını kaydedin; parolayı günlük dosyasına koymadan bu bilgilerle yapılandırmayı düzeltin.
 

Sende şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Foruma git ?

Bu konuyu görüntüleyen kullanıcılar

Bu konuyu şu anda görüntüleyen üye bulunmuyor.
Robotlar:
  • Anthropic