Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Mail Gönderiminde User Authentication Metodu
#11
(09-08-2020, Saat: 07:06)hayalyilmaz43 Adlı Kullanıcıdan Alıntı:
(09-08-2020, Saat: 01:02)samsaros@gmail.com Adlı Kullanıcıdan Alıntı: teşekkürler, yarın test exe siyle kurumda deneyeceğim.

umarım işinizi görür, bende merak ediyorum atabildinizmi Smile

eğer atamıyorsanız ve o sunucu ile aynı network içinde iseniz, yani sunucunun nete çıktığı ip adresi ile, sizin iç ağdaki bilgisayarınızdan nete çıktığınız ip adresi aynı ise, bunun anlamı, domain administrator mx için geçerli sender TXT ptr -> v=spf1 olarak kendi ip adresini (yani sizin dış ip adresinizi) eklemiş demekdir, bunu mxtool dan domaini girerek kontrol edin, haliyle doğrudan siz maili atmak istediğiniz uzak adrese (sunucu ile sizin diş ip adresinizin aynı olması gerekir) örneğin gmail. mx server adresini alıp, yine indy smtp componenti ile secure bağlantı açıp, maili uzak mail sunucusunda bırakabilirsiniz, size deny verilmez spf kuralından ötürü. sender adresinide canınız ne istiyorsa verebilirsiniz, spoof edebilirsiniz.

Bilgi Güvenliği birimi   imap ile gönderim yapabilrsiniz demişler. adamlar farklı yöntemlerle deneme yaptıkca farklı bişeyler söylüyorlar.  
IMAP ile gönderim yaparken neye dikkat etmek gerekir acaba. pop ve smpt ile gönderim gibimidir.   sizin yukarıdaki bahsettiğiniz durumuda tam anlayamadım açıkçası. daha önce sizin bahsettiğiniz pop ile deneme yaptık, zaten smtp ile direk engelliydi. ikiside olmadı.
Cevapla
#12
(11-08-2020, Saat: 19:39)samsaros@gmail.com Adlı Kullanıcıdan Alıntı:
(09-08-2020, Saat: 07:06)hayalyilmaz43 Adlı Kullanıcıdan Alıntı: umarım işinizi görür, bende merak ediyorum atabildinizmi Smile

eğer atamıyorsanız ve o sunucu ile aynı network içinde iseniz, yani sunucunun nete çıktığı ip adresi ile, sizin iç ağdaki bilgisayarınızdan nete çıktığınız ip adresi aynı ise, bunun anlamı, domain administrator mx için geçerli sender TXT ptr -> v=spf1 olarak kendi ip adresini (yani sizin dış ip adresinizi) eklemiş demekdir, bunu mxtool dan domaini girerek kontrol edin, haliyle doğrudan siz maili atmak istediğiniz uzak adrese (sunucu ile sizin diş ip adresinizin aynı olması gerekir) örneğin gmail. mx server adresini alıp, yine indy smtp componenti ile secure bağlantı açıp, maili uzak mail sunucusunda bırakabilirsiniz, size deny verilmez spf kuralından ötürü. sender adresinide canınız ne istiyorsa verebilirsiniz, spoof edebilirsiniz.

Bilgi Güvenliği birimi   imap ile gönderim yapabilrsiniz demişler. adamlar farklı yöntemlerle deneme yaptıkca farklı bişeyler söylüyorlar.  
IMAP ile gönderim yaparken neye dikkat etmek gerekir acaba. pop ve smpt ile gönderim gibimidir.   sizin yukarıdaki bahsettiğiniz durumuda tam anlayamadım açıkçası. daha önce sizin bahsettiğiniz pop ile deneme yaptık, zaten smtp ile direk engelliydi. ikiside olmadı.

IdIMAP4 ü araştırın öyleyse

denemelerinizde componentler ne hata döndürdü, belki siz gitmiyor diyerek birşeyi kaçırıp yarı yoldan döndünüz Smile
Cevapla
#13
(06-08-2020, Saat: 14:49)samsaros@gmail.com Adlı Kullanıcıdan Alıntı: Normal olarak mail gonderme işlemini aşağıdaki gibi  yapabiliyorduk. ilk ssl de olmadan sorunsuz gonderim yapılabiiliyordu. Ama kurumda güvenlik ile ilgili bir değişiklik yapıldığından mailler gönderilememeye başlandı. ilk zamanlar zaman aşımı hatası veriyordu. İlgili birim User authentication  metoduyla gönderim yapmamız gerektiğini söylüyor. Ama User authentication metodu neyi ifade ediyor anlayamadım. bir çok deneme yaptım ama sorunu geçemedim bir türlü. ssl devreye aldık, AuthType  tipini değiştirdim ama sorun düzelmedi. en son aşağıdaki gibi bir hata alıyoruz. 


Konu hakkında fikri olan var mı acaba?
1?ui=2&ik=306d30dd03&attid=0.1&permmsgid...k&disp=emb
function SMTPbaglan:Boolean;
  begin
      SMTP.AuthType := satDEFAULT;
      SMTP.Host     := 'smtp.test.com' ;
      SMTP.Port     := 587';
      SMTP.Username := 'UserName';
      SMTP.Password := '1234';
      MailMessage.From.Address := 'test@test.com'
      MailMessage.From.Name:='test' ;

      if SSLAktif then
       begin
        SSLIOHandler.DefaultPort := 0;
        SSLIOHandler.SSLOptions.Method := sslvTLSv1;
        SSLIOHandler.SSLOptions.Mode := sslmUnassigned;
        SSLIOHandler.SSLOptions.VerifyMode := [];
        SMTP.IOHandler := SSLIOHandler;
        SMTP.ConnectTimeout := 10000;
       end
      else
        SMTP.IOHandler := nil;

      if SMTP.Host ='' then
      begin
        Result := False;
          ShowMsg('Mail Ayarlarınızı Yapınız');
      end
      else
        Result := True;
      if not SMTP.Connected then SMTP.Connect;
  end;


.....

     try     
        SMTP.Send(FSDM.MailMessage);        
       Except On E:Exception do
         ShowMsg('Mail Gönderilemedi. Nedeni:'+E.Message);
       end;

@samsaros@gmail.com,
Lütfen form kurallarına uyalım... UYARIDIR!
Delphi Can'dır!
WWW
Cevapla
#14
Selamlar
Aynı sorun benim için de geçerli. Bugün birkaç deneme yaptım ama, mail gönderme işlemi başladığında " Authentication required " hatası alıyorum. Hala da çözüm için uğraşıyorum. Benim kodlarım aşağıdaki gibidir. Sorunu çözen arkadaşlarımız olur da paylaşırsa çok sevinirim.

procedure TForm1.Button1Click(Sender: TObject);
var
 idSMTP1: TIdSMTP;
begin
 idSMTP1 := TIdSMTP.Create(nil);
 try
   with IdMessage do
 begin
   Body.Clear;
   Body.Add('Dikkat : Programı Kontrol Ediniz!');
   From.Text := 'harun@firmaadi.com'; // gönderen kim ?
   Recipients.EMailAddresses := 'harun@hotmail.com'; //kime gidecek, alıcı ?
   Subject := 'Dikkat : Programı Kontrol Ediniz!'; //;
   CCList.EMailAddresses := 'harun@gmail.com'; // {CC çoklu alıcı carboncopy
 end;
   idSMTP1.IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(idSMTP1);
   idSMTP1.UseTLS := utUseExplicitTLS;
   TIdSSLIOHandlerSocketOpenSSL(idSMTP1.IOHandler).SSLOptions.Method := sslvTLSv1;

   idSMTP1.Host := 'smtp.office365.com';
   idSMTP1.Port := 587;

   idSMTP1.AuthType := satDefault;
   idSMTP1.Username := 'harun@firmaadi.com';
   idSMTP1.Password := 'sifre';
   try
     idSMTP1.Connect;
     try
       idSMTP1.Authenticate;
       idSMTP1.Send(IdMessage);
     finally
       idSMTP1.Disconnect;
     end;
     ShowMessage('OK');
   except
     on E: Exception do
     begin
       ShowMessage(Format('Failed!'#13'[%s] %s', [E.ClassName, E.Message]));
       raise;
     end;
   end;
 finally
   idSMTP1.Free;
 end;
 end;
Yazılımcı, kahveyi koda çeviren bir organizmadır.
Cevapla
#15
Selamlar
Arkadaşlar, yukarıda yazmış olduğum kod çalışmaktadır. Mail gönderim hatasının , firmanın tarafıma sağlamış olduğu internet bağlantısından (muhtemelen firewall kurallarından) olduğunu tesbit ettim. Bilgisayarımı cep telefonumun internetine bağladığımda, hatasız olarak mail gönderdim. Kodu kendinize göre adapte edip kullanabilirsiniz.
Yazılımcı, kahveyi koda çeviren bir organizmadır.
Cevapla
#16
Merhaba,

Şöyle bir şey de arşivde bulunsun. Faydası olacaktır.


{$REGION ' EPostaGonder '}

var
       Namee, Adress, Hostt, Portt, Userss, Passs, UseTlss, AuthTypee:String;


Function EPostaGonder(AliciEpostalar, IslemTipi, EPostaBody:String):Boolean;
var
       a, Kural    :Byte;
       Bekle, Satir:Integer;
       s           : String;

       Smtp      : TIdSMTP;
       EPosta    : TIdMessage;
       SSL       : TIdSSLIOHandlerSocketOpenSSL;

begin

       
       {$REGION ' Gönderim '}

             Smtp        :=  TIdSmtp.Create(nil);
             EPosta      :=  TIdMessage.Create(nil);
             SSL  :=  TIdSSLIOHandlerSocketOpenSSL.Create(nil);

             try
                       EPosta.Clear;       //İletinin üstbilgisini ve gövdesini temizler.
                       EPosta.ClearBody;   //İleti gövdesinin içeriğini temizler
                       EPosta.ClearHeader; //İleti başlığının içeriğini temizler

                       EPosta.ReceiptRecipient.Text     :=  ''; //Teslim bilgisi
                       EPosta.ReplyTo.EmailAddresses    :=  ''; //Mesaj yanıtları için teslimat adresini tanımlar.
                       EPosta.Priority                  :=  mpNormal;
                       EPosta.From.Name                 :=  Namee;
                       EPosta.From.Address              :=  Adress;//gönderen Adres
                       //EPosta.CCList.Add.Address        :=  Adress;//Başka kime bilgi verilsin
                       EPosta.BCCList.Add.Address       :=  Adress;//Başka kime GİZLİ bilgi verilsin
                       EPosta.Recipients.EMailAddresses :=  AliciEpostalar;
                       EPosta.CharSet                   :=  'UTF-8';//'ISO-8859-9';
                       EPosta.ContentType               :=  'text/html; charset=ISO-8859-9';//Buradaki charset esaas Türkçe karakterleri düzeltiyor..
                       EPosta.ContentTransferEncoding   :=  '8bit';
                       EPosta.Encoding                  :=  meMIME;
                       EPosta.Subject                   :=  UTF8Encode(KonBas);
                       EPosta.Body.Text                 :=  EPostaBody;

                       try
                               Smtp.Host     := Hostt;
                               Smtp.Port     := StrToInt(Portt);

                               If AuthTypee='satDefault'  Then Smtp.AuthType := satDefault else
                               If AuthTypee='satNone'     Then Smtp.AuthType := satNone else
                               If AuthTypee='satSASL'     Then Smtp.AuthType := satSASL else
                               Smtp.AuthType := satDefault;

                               Smtp.Username := Userss;
                               Smtp.Password := Passs;


                               {$REGION ' SSL '}
                               if UseTlss='' then
                               begin
                                       Smtp.UseTLS         := utNoTLSSupport;
                                       Smtp.IOHandler      := nil;
                                       Smtp.ConnectTimeout := 3000;
                               end
                               else
                               begin
                                       SSL.Destination             :=  Smtp.Host + ':' + IntToStr(Smtp.Port);
                                       SSL.Host                    :=  Smtp.Host;
                                       SSL.Port                    :=  Smtp.Port;
                                       SSL.DefaultPort             :=  0;
                                       //SSL.MaxLineAction           :=  maException;
                                       //SSL.SSLOptions.SSLVersions  :=  [sslvTLSv1_2]; //bağlanılacak sunucunun kullanması muhtemel versiyonlar
                                       SSL.SSLOptions.Method       :=  sslvTLSv1;//sslvSSLv3;//sslvTLSv1_2; //sslvSSLv23;
                                       SSL.SSLOptions.Mode         :=  sslmUnassigned; //sslmClient;// sslmUnassigned;  // sslmBoth; //sslmServer; //sslmUnassigned; // sslmClient;
                                       SSL.SSLOptions.VerifyMode   :=  [];
                                       SSL.SSLOptions.VerifyDepth  :=  0;
                                       Smtp.IOHandler                     :=  SSL;
                                       //Smtp.ValidateAuthLoginCapability:=True;
                                       //Smtp.UseEhlo:=True;

                                       if UseTlss='SSL' then
                                       Smtp.UseTLS := utUseImplicitTLS //Sunucu varsayılan şifreleme kullanıyorsa bunu kullanın.
                                       else
                                       if UseTlss='TLS' then
                                       Smtp.UseTLS := utUseExplicitTLS //Eğer varsa şifreleme kullanmak isterseniz bunu kullanın.
                                       else
                                       if UseTlss='Otomatik' then
                                       Smtp.UseTLS := utUseRequireTLS; //Bu aslında sunucu bağlantıları şifresiz desteklemiyorsa, bağlantı girişimi başarısız olur dışında utUseExplicitTLS aynıdır.

                                       Smtp.ConnectTimeout := 10000;
                               end;
                               {$ENDREGION}


                               {$REGION ' Smtp.Connect; '}
                               try
                                       Smtp.Connect;
                               except
                                       On E:Exception Do
                                       begin
                                               ShowMessage('Smtp sunucusuna bağlantı hatası : '+E.Message);
                                               Exit;
                                       end;
                               end;


                               {$ENDREGION}

                               {$REGION ' Smtp.Authenticate; '}


                               if UseTlss<>'' then
                               begin
                                       try
                                               Smtp.Authenticate;
                                       except
                                               On E:Exception Do
                                               begin
                                                       ShowMessage('Güvenlik anahtarı hatası : '+E.Message);
                                                       Exit;
                                               end;
                                       end;
                               end;


                               {$ENDREGION}

                               {$REGION ' Smtp.Send(EPosta); '}

                               try
                                       Smtp.Send(EPosta);

                                       Result:=True;
                               except
                                       On E:Exception Do
                                       ShowMessage('Hata            : '+E.Message);
                               end;
                               {$ENDREGION}

                       finally
                       end;
             finally
                       Smtp.Free;
                       EPosta.Free;
                       SSL.Free;
             end;
       {$ENDREGION}
end;

{$ENDREGION}
Cevapla
#17
Ben çözüm olarak, mail leri db ye basıp,  firewall dan kısıtlama yapılmayan izin verilen sunucudan mailleri timer ile göndermek oldu.
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Gmail Mail Gönderirken Connection Gracefuly Hatası COMMANDX 0 182 02-02-2024, Saat: 15:21
Son Yorum: COMMANDX
  Otomatik Rapor Mail gonulali 5 1.228 20-02-2023, Saat: 16:25
Son Yorum: gonulali
Question NetHttpClient nesnesi e Get metodu veri çekme problemi delphicim 3 1.327 22-07-2022, Saat: 20:40
Son Yorum: delphicim
Information Delphi Mail Gönderme İçin Alternatif Halil Han BADEM 5 5.818 28-06-2022, Saat: 06:57
Son Yorum: erkutolga
  HHBMailComponent - Kolay Mail Gönderim Bileşeni [Delphi] Halil Han BADEM 41 30.622 02-03-2022, Saat: 15:48
Son Yorum: ahmet_sinav



Konuyu Okuyanlar: 1 Ziyaretçi