- Konu sahibi
- #1
İ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
VCL Forms projesinde forma bir
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.
Alıcıyı ve konuyu koddan hazırlamak veya dosya eklemek gerektiğinde
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.
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:
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:
- Mesaj nesnesinde gönderen, alıcı, konu ve gövde alanlarını doldurun.
- Varsa dosyayı ek olarak ekleyin.
- SMTP nesnesinde sunucu adresi, bağlantı noktası, kullanıcı adı, parola ve güvenlik ayarlarını belirleyin.
- Bağlantıyı kurup mesajı gönderin.
- Gönderim tamamlandığında bağlantıyı mutlaka kapatın ve hata oluşursa hassas bilgileri göstermeden teknik hatayı kaydedin.
Hangi yöntemi seçmelisiniz?
| İhtiyaç | Uygun yöntem | Sonuç |
|---|---|---|
| Kullanıcı mesajı düzenleyip kendisi gönderecek | TSendMail | Yerel e-posta istemcisi açılır; gönderme onayı kullanıcıdadır. |
| Fatura veya rapor otomatik gönderilecek | SMTP istemcisi | Uygulama posta sunucusuna doğrudan bağlanır. |
| E-posta istemcisi kurulu olmayan bilgisayar | SMTP istemcisi | Yerel posta uygulamasına bağımlılık azalır; sunucu ayarları gerekir. |
| Ek dosya gönderilecek | Her iki yöntem | Dosya 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.