mail gönderme hatası

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
cinarbil
Üye
Mesajlar: 109
Kayıt: 18 Mar 2014 09:26

mail gönderme hatası

Mesaj gönderen cinarbil »

iyi günler
Delphi XE5 ile hazırladığım aşağıdaki kod ile sorunsuz mail gönderebilirken XE7 ile derlediğim de

SSL is not available on tis server hatası veriyor.

Google da yaptığım araştırmada XE7 üzerideki component ile ilgili güncelleştirmeden bahsediyor. bazı sitelerde 32 bit ve 64 bit için dosyalar verilmiş ama güvenip kurmadım bilgisi olan paylaşabirmi ?

Kod: Tümünü seç

procedure Tip_form.bt_mailClick(Sender: TObject);
begin
 IdSMTP1.Host :='smtp.gmail.com';
 IdSMTP1.Port := 587;
 IdSMTP1.Username := 'xxxx@gmail.com';
 IdSMTP1.Password := '123123xx';
 IdSMTP1.IOHandler:=IdSSLIOHandlerSocketOpenSSL1;
 IdSMTP1.UseTLS:=utUseExplicitTLS;

 IdMessage1.From.Address := 'xxxx@gmail.com';
 IdMessage1.Recipients.EMailAddresses := 'xxxx@xx.com.tr';

 IdMessage1.Subject := 'program bilgisi';
 IdMessage1.Body.Text := giris_prg.kullanici+' /  program bilgisi  / ' + label12.Caption+' / '+ giris_frm.edt_versiyon.Text+' / '+ giris_frm.Edit6.Text+' / ';
 with IdSSLIOHandlerSocketOpenSSL1 do11
 begin
  Destination := 'smtp.gmail.com:587';
  Host := 'smtp.gmail.com';
  Port := 587;
  SSLOptions.Method := sslvTLSv1;
  SSLOptions.Mode := sslmUnassigned;
  SSLOptions.VerifyMode  := [];
  SSLOptions.VerifyDepth := 0;

 end;
 try
  IdSMTP1.Connect;
  IdSMTP1.Send(IdMessage1);
  IdSMTP1.Disconnect;
 finally
  if IdSMTP1.Connected then IdSMTP1.Disconnect;
 end;
  ShowMessage('Mail başarı ile gönderildi gönderildi.');
end;
"…De ki: "Hiç bilenlerle bilmeyenler bir olur mu? Şüphesiz, temiz akıl sahipleri öğüt alıp-düşünürler" (Zümer Suresi, 9)
Efe
Üye
Mesajlar: 56
Kayıt: 09 Kas 2014 11:14

Re: mail gönderme hatası

Mesaj gönderen Efe »

Ssleay32, ve Libeay32 dll dosyalarının son sürümünü, Indy Fulgan sitesinden indirin sorununuz çözülecektir. Bende de aynı sorun vardı bu şekilde çözdüm.
Kullanıcı avatarı
cinarbil
Üye
Mesajlar: 109
Kayıt: 18 Mar 2014 09:26

Re: mail gönderme hatası

Mesaj gönderen cinarbil »

http://indy.fulgan.com/SSL/ adresinden
openssl-1.0.1j-x64_86-win64.zip dosyasını indirdin

delphinin kurulu olduğu dizinde 15.0\bin klasöründeki eski dosyaların üzerine kopyaladım

programın exe sinin olduğu klasöre 2 dll dosyasını kopyaladım aynı hata devam ediyor.
farklı bir işlem mi yapmak gerekiyor.

=============================================================================
OpenSSL v1.0.1j Precompiled Binaries for Win64
-----------------------------------------------------------------------------

*** Release Information ***

Release Date: Okt 15, 2014

Author: Frederik A. Winkelsdorf (opendec.wordpress.com)
for the Indy Project (www.indyproject.org)

Requirements: Indy 10.5.5+ (SVN Version or Delphi 2009 and newer)

Dependencies: The libraries have no noteworthy dependencies

Installation: Copy both DLL files into your application directory

Supported OS: Windows XP x64 up to Windows 8 x64

-----------------------------------------------------------------------------
"…De ki: "Hiç bilenlerle bilmeyenler bir olur mu? Şüphesiz, temiz akıl sahipleri öğüt alıp-düşünürler" (Zümer Suresi, 9)
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: mail gönderme hatası

Mesaj gönderen mrmarman »

Merhaba.

- Doğru kütüphaneleri indirmiş görünüyorsun.

32 Bit Windows kullanıcıları için openssl-1.0.1j-i386-win32.zip
64 Bit Windows kullanıcıları için openssl-1.0.1j-x64_86-win64.zip
olarak yeniden bir hatırlatma yapayım.. :idea:

- Yeni bir proje açıp aşağıda vereceğim fonksiyonu dener misin ? İndirdiğin kütüphaneleri projenin EXE klasörüne ( DEBUG veya RELASE hangisinde çalışıyorsan ona ) kopyala.

- USES satırına eklenecekleri aşağıda yazdım. Formuna hiçbir Indy bileşeni eklemeden kullanmayı dene. Hepsini dinamik create ettirip kullandırıp free ettim.
Belki de bileşen(ler) üzerinde bir değişiklik yaptın da ondan bağlantı sağlanamıyordur.

Kod: Tümünü seç

USES IdSMTP, IdSSLOpenSSL, IdExplicitTLSClientServerBase, IdMessage;

function MailGonder_Indy( strGonderenEposta, strAliciEposta, strKonu, strMesaj : String ): boolean;
Var
  IdSMTP : TIdSMTP; // uses IdSMTP
  IdSSLIOHandlerSocketOpenSSL : TIdSSLIOHandlerSocketOpenSSL; // uses IdSSLOpenSSL
  IdMessage : TIdMessage;
begin

  IdSMTP           := TIdSMTP.Create(nil);
  IdSSLIOHandlerSocketOpenSSL := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
  IdSMTP.Host      := 'smtp.gmail.com';
  IdSMTP.Port      :=  587;
  IdSMTP.Username  := 'xxx@gmail.com';
  IdSMTP.Password  := 'yyy';
  IdSMTP.IOHandler := IdSSLIOHandlerSocketOpenSSL;
  IdSMTP.UseTLS    := utUseExplicitTLS; // uses IdExplicitTLSClientServerBase

  IdMessage              := TIdMessage.Create(nil);
  IdMessage.From.Address := strGonderenEposta;
  IdMessage.Recipients.EMailAddresses := strAliciEposta;
  IdMessage.Subject      := strKonu;
  IdMessage.Body.Text    := strMesaj;

  with IdSSLIOHandlerSocketOpenSSL do
  begin
    Host        := IdSMTP.Host;
    Port        := IdSMTP.Port;
    Destination := Host + ':' + IntToStr(Port);
    SSLOptions.Method      := sslvTLSv1;
    SSLOptions.Mode        := sslmUnassigned;
    SSLOptions.VerifyMode  := [];
    SSLOptions.VerifyDepth := 0;
  end;

  try
    IdSMTP.Connect;
    IdSMTP.Send( IdMessage );
    IdSMTP.Disconnect;
  finally
    if IdSMTP.Connected then IdSMTP.Disconnect;
    IdMessage.Free;
    IdSSLIOHandlerSocketOpenSSL.Free;
    IdSMTP.Free;
    Result := True;
  end;
end;
Kullanım Şekli : (Denenmiştir)

Kod: Tümünü seç

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
  if MailGonder_Indy( 'mrmarman@gmail.com', 'muharrem.arman@trt.net.tr', 'Mesaj konusu', 'Mesaj içeriği...' )
    then ShowMessage('Mail başarı ile gönderildi gönderildi.')
    else ShowMessage('Mail gönderirken sorun oldu.')
end;
Resim
Resim ....Resim
Kullanıcı avatarı
cinarbil
Üye
Mesajlar: 109
Kayıt: 18 Mar 2014 09:26

Re: mail gönderme hatası

Mesaj gönderen cinarbil »

Cevaplar için teşekkür ederim

yeni proje oluşturdum.

Muharrem beyin gönderdiği kodu girdim.

XE5 kurulu makine de derledi hata vermeden mail gönderdi.

Aynı kodu XE7 de derledim hata vermeden derledi. ama mail göndermede aynı hatayı verdi.

Dll dosyaları Kaynak kodun olduğu ve exe nin olduğu klasör de kopyalanmış durumda

çözmeye çalışıyorum. yorumlarınızı bekliyorum
"…De ki: "Hiç bilenlerle bilmeyenler bir olur mu? Şüphesiz, temiz akıl sahipleri öğüt alıp-düşünürler" (Zümer Suresi, 9)
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: mail gönderme hatası

Mesaj gönderen mrmarman »

Merhaba.

- Bendeki de XE7 ile derlendi ve denendi ama hata ne ki ? Neyse yılan hikayesine dönmesin diye projelendirip buradan paylaşıyorum. Farkını kendiniz bulup bizimle paylaşın.

Proje Linki (Kaynak Kodları ve EXE'si dahildir. SSL kütüphaneleri RELEASE klsöründe) GMail_XE7.rar

- Login bilgilerini INI dosyasında tutar.

Önemli NOT: Bu başlık için üretilen etüd projedir, INI içerisindeki login bilgileri açık haldedir. Bu şekilde yayınlamayın eposta hesap login bilgilerini halka açık hale gelebilir. :idea: :idea:

Resim

Kod: Tümünü seç

USES IdSMTP, IdSSLOpenSSL, IdExplicitTLSClientServerBase, IdMessage;

function MailGonder_Indy( strGonderenAdi, strGonderenEposta, strAliciEposta, strCevapEposta, strKonu, strMesaj, strUser, strPass : String ): boolean;
Var
  IdSMTP : TIdSMTP; // uses IdSMTP
  IdSSLIOHandlerSocketOpenSSL : TIdSSLIOHandlerSocketOpenSSL; // uses IdSSLOpenSSL
  IdMessage : TIdMessage;
begin

  IdSMTP           := TIdSMTP.Create(nil);
  IdSSLIOHandlerSocketOpenSSL := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
  IdSMTP.Host      := 'smtp.gmail.com';
  IdSMTP.Port      :=  587;
  IdSMTP.Username  := strUser;
  IdSMTP.Password  := strPass;
  IdSMTP.IOHandler := IdSSLIOHandlerSocketOpenSSL;
  IdSMTP.UseTLS    := utUseExplicitTLS; // uses IdExplicitTLSClientServerBase

  IdMessage              := TIdMessage.Create(nil);
  IdMessage.From.Name    := strGonderenAdi;
  IdMessage.From.Address := strGonderenEposta;
  IdMessage.Recipients.EMailAddresses := strAliciEposta;
  IdMessage.ReplyTo.EMailAddresses    := strCevapEposta;
  IdMessage.Subject      := strKonu;
  IdMessage.Body.Text    := strMesaj;

  with IdSSLIOHandlerSocketOpenSSL do
  begin
    Host        := IdSMTP.Host;
    Port        := IdSMTP.Port;
    Destination := Host + ':' + IntToStr(Port);
    SSLOptions.Method      := sslvTLSv1;
    SSLOptions.Mode        := sslmUnassigned;
    SSLOptions.VerifyMode  := [];
    SSLOptions.VerifyDepth := 0;
  end;

  try
    IdSMTP.Connect;
    IdSMTP.Send( IdMessage );
    IdSMTP.Disconnect;
  finally
    if IdSMTP.Connected then IdSMTP.Disconnect;
    IdMessage.Free;
    IdSSLIOHandlerSocketOpenSSL.Free;
    IdSMTP.Free;
    Result := True;
  end;
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
Var
  strGonderenAdi,
  strGonderenEposta,
  strAliciEposta,
  strCevapEposta,
  strKonu,
  strMesaj,
  strUser,
  strPass : String;
begin
  strGonderenAdi    := Edit3.Text;
  strGonderenEposta := Edit1.Text;
  strAliciEposta    := Edit4.Text + '<' + Edit5.Text + '>';
  strCevapEposta    := Edit1.Text;
  strKonu           := Edit6.Text;
  strMesaj          := Memo1.Text;
  strUser           := Edit1.Text;
  strPass           := Edit2.Text;

  if MailGonder_Indy( strGonderenAdi, strGonderenEposta, strAliciEposta, strCevapEposta, strKonu, strMesaj, strUser, strPass )
    then ShowMessage('Mail başarı ile gönderildi.')
    else ShowMessage('Mail gönderirken sorun oldu.')
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
Var
  INI : TIniFile;
begin
  INI := TINIFile.Create( ChangeFileExt(Application.ExeName, '.INI') );
  INI.WriteString('SMTP', 'Name', Edit1.Text );
  INI.WriteString('SMTP', 'Pass', Edit2.Text );
  INI.WriteString('EPOSTA', 'Gonderen', Edit3.Text );
  INI.Free;
end;

procedure TForm1.FormShow(Sender: TObject);
Var
  INI : TIniFile;
begin
  INI := TINIFile.Create( ChangeFileExt(Application.ExeName, '.INI') );
  Edit1.Text := INI.ReadString('SMTP', 'Name', Edit1.Text );
  Edit2.Text := INI.ReadString('SMTP', 'Pass', Edit2.Text );
  Edit3.Text := INI.ReadString('EPOSTA', 'Gonderen', Edit3.Text );
  INI.Free;
end;
En son mrmarman tarafından 05 Oca 2015 12:29 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Resim
Resim ....Resim
Kullanıcı avatarı
cinarbil
Üye
Mesajlar: 109
Kayıt: 18 Mar 2014 09:26

Re: mail gönderme hatası

Mesaj gönderen cinarbil »

Muharrem bey ellerinize sağlık Allah razı olsun.

sizin gönderdiğiniz dll dosyaları ile sizin ve benim proje hata vermeden XE7 sorunsuz çalışıyor.
siteden indirdiğim dll ile sizin ve benim projede SSL hatası veriyor.
Muharrem beyin gönderdiği dosyalar
libeay32.dll 1249 Kb
ssleay32.dll 332 Kb sorunsuz çalışıyor

Kendi sitesinden yukarıda bahsettiğim dosyalar doğru dosya ve 64 bit
libeay32.dll 1777 Kb
ssleay32.dll 368 Kb SSL hatası veriyor.

indirdiğim dosyanın link bilgileri 2 mesaj yukarıda.
"…De ki: "Hiç bilenlerle bilmeyenler bir olur mu? Şüphesiz, temiz akıl sahipleri öğüt alıp-düşünürler" (Zümer Suresi, 9)
Cevapla