Delphi'de Indy SMTP ile e-mail gönderme. (GMail, Yandex, Yahoo vb.) (text, html, gömülü resim)

Yazdığınız makaleleri ve üyelerimizin işine yarayacağını düşündüğünüz kodlarınızı gönderebilirsiniz. Bu foruma soru sormayın!
Cevapla
Kullanıcı avatarı
csunguray
Üye
Mesajlar: 855
Kayıt: 09 Ara 2006 05:08
Konum: Adana
İletişim:

Delphi'de Indy SMTP ile e-mail gönderme. (GMail, Yandex, Yahoo vb.) (text, html, gömülü resim)

Mesaj gönderen csunguray »

Delphi'de Indy SMTP ile e-mail (e-posta) gönderme konusunda bir örnek hazırladım. Bu örnekte GMail, Yandex, Yahoo gibi servis sağlayıcılarla, text (metin) olarak, html biçiminde ve gömülü resim içeren html biçiminde e-posta gönderme örnekleri de yaptım.

Örneği Indy 10 ve Delphi XE2 kullanarak hazırladım. Progam Delphi 7 ve Delphi XE8'de de derleniyor ve çalışıyor. Delphi 7'de unit isimleri önündeki Vcl. ön ekini silmelisiniz. Ayrıca Codepage i utf8 yerine iso8859-9 olarak ayarlarsanız Türkçe harfler doğru çıkacaktır.

Kod: Tümünü seç

EPosta.CharSet := 'iso-8859-9';
Sisteminizde Indy'nin eski sürümü yüklüyse örneği kolaylıkla aşağıdaki bağlantılarda anlatılanlara göre düzenleyebilirsiniz.
http://delphi.xcjc.net/viewthread.php?tid=45523
http://www.cyberforum.ru/delphi-network ... 08825.html

SLL veya TLS ile şifrelenmiş e-postalar göndermek için (ki bu gmail, yahoo ve yandex için zorunludur) OpenSSl kütüphanesine ait libeay32.dll ve ssleay32.dll dosyalarının programın olduğu klasörde veya sistem klasörlerinden birinde olması gerekir. Bu dosyaları http://indy.fulgan.com/SSL/ bağlantısından veya https://slproweb.com/products/Win32OpenSSL.html bağlantısından indirebilirsiniz. Sisteminiz 64 bit olsa bile projenizi 32 bit derliyorsanız (Delphi 7 sadece 32 bit exe ler üretir) ssleay32.dll ve libeay32.dll dosyalarının 32 bit olan sürümünü kullanmalısınız.

Umarım Delphi ile e-posta göndermede sorun yaşayan arkadaşlara yardımcı olur.

Kod: Tümünü seç

{*******************************************************}
{                                                       }
{  Proje: SMTP Test                                     }
{  Modül:                                               }
{  Yazar: C. Sunguray                                   }
{  Son Değ.:                                            }
{                                                       }
{*******************************************************}
unit SmtpF;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, IdIOHandler, Forms,
  IdIOHandlerSocket, IdIOHandlerStack, IdSSL, IdSSLOpenSSL, IdMessage,
  IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
  IdExplicitTLSClientServerBase, IdMessageClient, IdSMTPBase, IdSMTP,
  Vcl.StdCtrls, Vcl.Controls, Vcl.Dialogs;

type
  TFormSmtpF = class(TForm)
    SMTP: TIdSMTP;
    EPosta: TIdMessage;
    LHandler: TIdSSLIOHandlerSocketOpenSSL;
    GroupBox2: TGroupBox;
    GroupBox3: TGroupBox;
    MemoTestIcerik: TMemo;
    GroupBox4: TGroupBox;
    MemoLog: TMemo;
    Label1: TLabel;
    EditAlici: TEdit;
    EditYandex: TButton;
    EditGoogle: TButton;
    ButtonYahoo: TButton;
    Button4: TButton;
    Label2: TLabel;
    Label8: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label10: TLabel;
    EditHOST: TEdit;
    EditUSER: TEdit;
    EditPASSWORD: TEdit;
    EditCRYPTION: TComboBox;
    EditPORT_NO: TComboBox;
    CheckBoxSifreGoster: TCheckBox;
    GroupBox1: TGroupBox;
    MemoAciklama: TMemo;
    ButtonMetinGonder: TButton;
    ButtonHtmlGonder: TButton;
    ButtonGomuluGonder: TButton;
    procedure ActionTestExecute(Sender: TObject);
    procedure EPostaInitializeISO(var VHeaderEncoding: Char;
      var VCharSet: String);
    procedure SMTPStatus(ASender: TObject; const AStatus: TIdStatus;
      const AStatusText: string);
    procedure LHandlerStatusInfo(const AMsg: string);
    procedure EditYandexClick(Sender: TObject);
    procedure EditCRYPTIONChange(Sender: TObject);
    procedure EditGoogleClick(Sender: TObject);
    procedure ButtonYahooClick(Sender: TObject);
    procedure CheckBoxSifreGosterClick(Sender: TObject);
  private
    { Private declarations }
    procedure EPostaIcerikHazirla(Sender: TObject);
  public
    { Public declarations }
  end;

var
  FormSmtpF: TFormSmtpF;

implementation

uses IdText, IdAttachmentFile;

{$R *.dfm}

procedure TFormSmtpF.ActionTestExecute(Sender: TObject);
begin
  inherited;
  MemoLog.Lines.Clear;
  Application.ProcessMessages;
  MemoLog.Lines.Add('SMTP Test.');
  try
    if SMTP.Connected then SMTP.Disconnect;
    SMTP.Host := EditHOST.Text;
    //SMTP.AuthType := satNone;
    SMTP.AuthType := satDefault;
    SMTP.Username := EditUSER.Text;
    SMTP.Password := EditPASSWORD.Text;

    SMTP.Port := 25;
    if StrToIntDef(EditPORT_NO.Text, -1) > 0
      then SMTP.Port := StrToInt(EditPORT_NO.Text);

    // SSL ayarları
    if EditCRYPTION.ItemIndex = 0 then
    begin
      SMTP.UseTLS := utNoTLSSupport;
      SMTP.IOHandler := nil;
      SMTP.ConnectTimeout := 3000;
    end else
    begin
      MemoLog.Lines.Add('SMTP Test - SSL ayarları yapılıyor.');
      LHandler.Destination := SMTP.Host + ':' + IntToStr(SMTP.Port);
      LHandler.Host := SMTP.Host;
      LHandler.Port := SMTP.Port;
      LHandler.DefaultPort := 0;
      LHandler.SSLOptions.Method := sslvTLSv1;
      LHandler.SSLOptions.Mode := sslmUnassigned; // sslmClient;
      LHandler.SSLOptions.VerifyMode := [];
      LHandler.SSLOptions.VerifyDepth := 0;
      SMTP.IOHandler := LHandler;
      case EditCRYPTION.ItemIndex of
         1: SMTP.UseTLS := utUseImplicitTLS; // SSL
         2: SMTP.UseTLS := utUseExplicitTLS; // SSL/TLS
      end;
      SMTP.ConnectTimeout := 10000;
    end;

    MemoLog.Lines.Add('SMTP Test - Bağlanılıyor.');
    SMTP.Connect;

    MemoLog.Lines.Add('SMTP Test - Deneme e-postası gönderiliyor.');

    EPosta.Clear;
    EPosta.From.Address := EditUSER.Text;
    EPosta.From.Name := EditUSER.Text + ' deneme kullanıcısı.';
    //EPosta.ReplyTo.EMailAddresses := EditUSER.Text;
    //EPosta.ReplyTo.Name := EditUSER.Text;

    with EPosta.Recipients.Add do
    begin
      if EditAlici.Text > '' then
      begin
        Name := EditAlici.Text;
        Address := EditAlici.Text;
      end else
      begin
        Name := EditUSER.Text;
        Address := EditUSER.Text;
      end;
    end;
    EPosta.Subject := 'Deneme mesajı.';
    EPostaIcerikHazirla(Sender);

    SMTP.Send(EPosta);
    MemoLog.Lines.Add('Bağlantı başarılı. "' + EditAlici.Text + '" adresine bir deneme e-postası gönderilmiştir.');
  finally
    MemoLog.Lines.Add('SMTP Test - Bağlantı sonlandırılıyor.');
    if SMTP.Connected then SMTP.Disconnect;
  end;
  ShowMessage('E-posta gönderildi.');
end;

procedure TFormSmtpF.EPostaIcerikHazirla(Sender: TObject);
begin
  EPosta.CharSet := 'utf-8'; // 'iso-8859-9';
  if Sender = ButtonMetinGonder then
  begin
    EPosta.ContentType := 'text/plain';
    EPosta.Body.Text := MemoTestIcerik.Lines.Text;
  end else
  begin
    if Sender = ButtonHtmlGonder then
    begin
      EPosta.ContentType := 'multipart/alternative';
      with TIdText.Create(EPosta.MessageParts, nil) do
      begin
        Body.Text :=
          '<html><body>' + MemoTestIcerik.Lines.Text +
          '. <B>KALIN YAZI</B><U>ALTI ÇİZGİLİ YAZI</U>' +
          '<I>İTALİK YAZI</I></body></html>';
        CharSet := 'utf-8';
        ContentType := 'text/html';
      end;
    end else
    begin
      // İçine resim gömülü HTML
      EPosta.ContentType := 'multipart/related; type="text/html"';
      with TIdText.Create(EPosta.MessageParts, nil) do
      begin
        Body.Text :=
          '<html><body>' + MemoTestIcerik.Lines.Text +
          '. <B>KALIN YAZI</B><U> ALTI ÇİZGİLİ YAZI</U>' +
          '<I>İTALİK YAZI </I><br />' +
          '<img src="cid:12345"></body></html>';
        CharSet := 'utf-8';
        ContentType := 'text/html';
      end;
      // ContentID'nin yukarıdaki cid:12345 teki id ile aynı olmasına dikkat edin.
      with TIdAttachmentFile.Create(EPosta.MessageParts, ExtractFilePath(Application.ExeName) + 'resim1.jpg') do
      begin
        ContentID := '12345';
        ContentType := 'image/jpeg';
        FileName := 'resim1.jpg';
      end;
    end;
  end;

  // Ayarları e-posta olarak göndermek istersek...
  (*
  EPosta.Body.Text :=
    'Deneme mesajı başarı ile gönderildi.' + #13 + #10 + #13 + #10 +
    'Host: ' + SMTP.Host + #13 + #10 +
    'Port: ' + IntToStr(SMTP.Port) + #13 + #10 +
    'Gönd. E-Posta: ' + EditUSER.Text + #13 + #10 +
    'User: ' + EditUSER.Text + #13 + #10 +
    'Password: ' + EditPASSWORD.Text;
  *)
end;

procedure TFormSmtpF.ButtonYahooClick(Sender: TObject);
begin
  EditHOST.Text := 'smtp.mail.yahoo.com';
  EditCRYPTION.ItemIndex := 2; // Yani SSL/TLS
  EditPORT_NO.Text := '587';
end;

procedure TFormSmtpF.CheckBoxSifreGosterClick(Sender: TObject);
begin
  if CheckBoxSifreGoster.Checked
    then EditPASSWORD.PasswordChar := #0
    else EditPASSWORD.PasswordChar := '*'
end;

procedure TFormSmtpF.EditCRYPTIONChange(Sender: TObject);
begin
  case EditCRYPTION.ItemIndex of
    0: EditPORT_NO.Text := '587'; // <YOK>
    1: EditPORT_NO.Text := '465'; // SSL
    2: EditPORT_NO.Text := '587'; // SSL/TLS
  end;
end;

procedure TFormSmtpF.EditGoogleClick(Sender: TObject);
begin
  EditHOST.Text := 'smtp.gmail.com';
  EditCRYPTION.ItemIndex := 2; // Yani SSL/TLS
  EditPORT_NO.Text := '587';
end;

procedure TFormSmtpF.EditYandexClick(Sender: TObject);
begin
  EditHOST.Text := 'smtp.yandex.com'; // veya smtp.yandex.com.tr
  EditCRYPTION.ItemIndex := 2; // Yani SSL/TLS
  EditPORT_NO.Text := '587';
end;

procedure TFormSmtpF.EPostaInitializeISO(var VHeaderEncoding: Char;
  var VCharSet: String);
begin
  inherited;
  VCHarSet := 'utf-8'; // 'iso-8859-9';
end;

procedure TFormSmtpF.LHandlerStatusInfo(const AMsg: string);
begin
  MemoLog.Lines.Add('SSL DURUMU: ' + AMsg);
end;

procedure TFormSmtpF.SMTPStatus(ASender: TObject; const AStatus: TIdStatus;
  const AStatusText: string);
begin
  MemoLog.Lines.Add('SMTP DURUMU: ' + AStatusText);
end;

end.

DFM içeriği:

Kod: Tümünü seç

object FormSmtpF: TFormSmtpF
  Left = 0
  Top = 0
  Caption = 'SMTP Test'
  ClientHeight = 549
  ClientWidth = 810
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = True
  DesignSize = (
    810
    549)
  PixelsPerInch = 96
  TextHeight = 13
  object GroupBox2: TGroupBox
    Left = 16
    Top = 16
    Width = 361
    Height = 209
    Caption = 'Ayarlar'
    TabOrder = 0
    object Label2: TLabel
      Left = 8
      Top = 76
      Width = 80
      Height = 13
      AutoSize = False
      Caption = 'SMTP Host'
      Transparent = True
    end
    object Label8: TLabel
      Left = 8
      Top = 124
      Width = 80
      Height = 13
      Hint = 'Port no (25, 587, 465)'
      AutoSize = False
      Caption = 'Port'
      ParentShowHint = False
      ShowHint = True
      Transparent = True
    end
    object Label3: TLabel
      Left = 8
      Top = 148
      Width = 80
      Height = 13
      AutoSize = False
      Caption = 'User (E-Posta)'
      Transparent = True
    end
    object Label4: TLabel
      Left = 8
      Top = 172
      Width = 80
      Height = 13
      AutoSize = False
      Caption = #350'ifre'
      Transparent = True
    end
    object Label10: TLabel
      Left = 8
      Top = 100
      Width = 80
      Height = 13
      AutoSize = False
      Caption = #350'ifreleme'
      Transparent = True
    end
    object EditYandex: TButton
      Left = 16
      Top = 24
      Width = 75
      Height = 25
      Caption = 'Yandex'
      TabOrder = 0
      OnClick = EditYandexClick
    end
    object EditGoogle: TButton
      Left = 96
      Top = 24
      Width = 75
      Height = 25
      Caption = 'GMail'
      TabOrder = 1
      OnClick = EditGoogleClick
    end
    object ButtonYahoo: TButton
      Left = 176
      Top = 24
      Width = 75
      Height = 25
      Caption = 'Yahoo'
      TabOrder = 2
      OnClick = ButtonYahooClick
    end
    object Button4: TButton
      Left = 256
      Top = 24
      Width = 75
      Height = 25
      TabOrder = 3
    end
    object EditHOST: TEdit
      Left = 96
      Top = 72
      Width = 233
      Height = 21
      TabOrder = 4
    end
    object EditUSER: TEdit
      Left = 96
      Top = 144
      Width = 233
      Height = 21
      TabOrder = 7
    end
    object EditPASSWORD: TEdit
      Left = 96
      Top = 168
      Width = 169
      Height = 21
      PasswordChar = '*'
      TabOrder = 8
    end
    object EditCRYPTION: TComboBox
      Left = 96
      Top = 96
      Width = 97
      Height = 21
      Hint = 'Port no (25, 587, 465)'
      Style = csDropDownList
      ItemIndex = 0
      ParentShowHint = False
      ShowHint = True
      TabOrder = 5
      Text = '<YOK>'
      OnChange = EditCRYPTIONChange
      Items.Strings = (
        '<YOK>'
        'SSL'
        'SSL/TLS')
    end
    object EditPORT_NO: TComboBox
      Left = 96
      Top = 120
      Width = 97
      Height = 21
      Hint = 'Port no (25, 587, 465)'
      ParentShowHint = False
      ShowHint = True
      TabOrder = 6
      Text = '587'
      Items.Strings = (
        '25'
        '465'
        '587'
        '2525')
    end
    object CheckBoxSifreGoster: TCheckBox
      Left = 272
      Top = 172
      Width = 57
      Height = 17
      Caption = 'G'#246'ster'
      TabOrder = 9
      OnClick = CheckBoxSifreGosterClick
    end
  end
  object GroupBox3: TGroupBox
    Left = 16
    Top = 240
    Width = 361
    Height = 177
    Caption = ' Test '
    TabOrder = 1
    object Label1: TLabel
      Left = 16
      Top = 108
      Width = 80
      Height = 13
      AutoSize = False
      Caption = 'Al'#305'c'#305' E-Posta'
      Transparent = True
    end
    object MemoTestIcerik: TMemo
      Left = 16
      Top = 24
      Width = 305
      Height = 73
      Lines.Strings = (
        'Deneme e-postas'#305)
      TabOrder = 0
    end
    object EditAlici: TEdit
      Left = 96
      Top = 104
      Width = 225
      Height = 21
      TabOrder = 1
    end
    object ButtonMetinGonder: TButton
      Left = 16
      Top = 144
      Width = 75
      Height = 25
      Caption = 'Metin Msj.'
      TabOrder = 2
      OnClick = ActionTestExecute
    end
    object ButtonHtmlGonder: TButton
      Left = 96
      Top = 144
      Width = 75
      Height = 25
      Caption = 'HTML'
      TabOrder = 3
      OnClick = ActionTestExecute
    end
    object ButtonGomuluGonder: TButton
      Left = 176
      Top = 144
      Width = 75
      Height = 25
      Caption = 'G'#246'm'#252'l'#252' Resim'
      TabOrder = 4
      OnClick = ActionTestExecute
    end
  end
  object GroupBox4: TGroupBox
    Left = 400
    Top = 16
    Width = 393
    Height = 401
    Anchors = [akLeft, akTop, akRight]
    Caption = 'Log'
    TabOrder = 2
    object MemoLog: TMemo
      Left = 2
      Top = 15
      Width = 389
      Height = 384
      Align = alClient
      ScrollBars = ssBoth
      TabOrder = 0
      WordWrap = False
    end
  end
  object GroupBox1: TGroupBox
    Left = 16
    Top = 432
    Width = 777
    Height = 105
    Anchors = [akLeft, akTop, akRight, akBottom]
    Caption = 'A'#231#305'klamalar'
    TabOrder = 3
    object MemoAciklama: TMemo
      Left = 2
      Top = 15
      Width = 773
      Height = 88
      Align = alClient
      Lines.Strings = (
        
          '1. Al'#305'c'#305' E-Postas'#305'n'#305' bo'#351' b'#305'rakt'#305#287#305'n'#305'z takdirde deneme e-postas'#305'n' +
          #305' kendi kendinize g'#246'nderir.'
        ''
        
          '2. Yandex ayarlar'#305'nda sadece sonu @yandex.com veya @yandex.com.t' +
          'r olan e-postalar'#305' de'#287'il yandex '#252'zerinden kulland'#305#287#305'n'#305'z @bizimsi' +
          'rket.com uzant'#305'l'#305' e-'
        'postalar'#305'n'#305'z'#305' da kullanabilirsiniz.'
        ''
        
          '3. SSL veya TLS ile '#351'ifreli mesaj g'#246'nderecekseniz System klas'#246'r'#252 +
          'n'#252'zde Open SSL k'#252't'#252'phanesinin DLL dosyalar'#305' (libeay32.dll, sslea' +
          'y32.dll) bulunmal'#305'd'#305'r. Bu '
        
          'dosyalar'#305' http://indy.fulgan.com/SSL/ ba'#287'nalt'#305's'#305'ndan indirebilir' +
          'siniz.'
        ''
        
          '4. ContentType larla ilgili ayr'#305'nt'#305'l'#305' bilgi ve '#246'rnekleri http://' +
          'www.indyproject.org/Sockets/Blogs/RLebeau/2005%5F08%5F17%5FA.en.' +
          'aspx ba'#287'lant'#305's'#305'ndan '
        'edinebilirsiniz.')
      ScrollBars = ssVertical
      TabOrder = 0
    end
  end
  object SMTP: TIdSMTP
    OnStatus = SMTPStatus
    Host = 'mail.netbilisim.com'
    SASLMechanisms = <>
    Username = 'destek@netbilisim.com'
    Left = 264
    Top = 232
  end
  object EPosta: TIdMessage
    AttachmentEncoding = 'MIME'
    BccList = <>
    CCList = <>
    ContentType = 'text/plain'
    Encoding = meMIME
    FromList = <
      item
      end>
    Recipients = <>
    ReplyTo = <>
    ConvertPreamble = True
    OnInitializeISO = EPostaInitializeISO
    Left = 296
    Top = 232
  end
  object LHandler: TIdSSLIOHandlerSocketOpenSSL
    MaxLineAction = maException
    Port = 0
    DefaultPort = 0
    SSLOptions.Mode = sslmUnassigned
    SSLOptions.VerifyMode = []
    SSLOptions.VerifyDepth = 0
    OnStatusInfo = LHandlerStatusInfo
    Left = 328
    Top = 232
  end
end
KAYNAK KODLAR:
SmtpTest.rar
(158.06 KiB) 1194 kere indirildi
En son csunguray tarafından 23 Ağu 2016 08:25 tarihinde düzenlendi, toplamda 2 kere düzenlendi.
C. Sunguray
csunguray at netbilisim.kom
Net Bilişim Hizmetleri

Sıradan her programcı bilgisayarın anlayabileceği kodlar yazabilir.
Sadece iyi programcılar insanların da anlayabileceği kodlar yazarlar.
Martin Fowler (http://martinfowler.com/)
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Re: Delphi'de Indy SMTP ile e-mail gönderme. (GMail, Yandex, Yahoo)

Mesaj gönderen erdogan_ozkaya »

Elinize sağlık,

hocam delphi7 kullanıyorum projeyi çalıştıramadım, bir component gerekli sanırım ssl ile ilgili yardımcı olabilir misiniz.

teşekkürler
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Re: Delphi'de Indy SMTP ile e-mail gönderme. (GMail, Yandex, Yahoo)

Mesaj gönderen erdogan_ozkaya »

libeay32.dll ve ssleay32.dll dosyalarıda yükledim ama yine aynı
ardaobaykutalp
Üye
Mesajlar: 3
Kayıt: 26 Ağu 2014 04:06

Re: Delphi'de Indy SMTP ile e-mail gönderme. (GMail, Yandex, Yahoo vb.) (text, html, gömülü resim)

Mesaj gönderen ardaobaykutalp »

@csunguray

Ellerinize sağlık , muhteşem bir iş olmuş.
mustafaucuz
Üye
Mesajlar: 5
Kayıt: 25 Eki 2017 07:08

Re: Delphi'de Indy SMTP ile e-mail gönderme. (GMail, Yandex, Yahoo vb.) (text, html, gömülü resim)

Mesaj gönderen mustafaucuz »

arkadaşlar ne yaptım ne ettiysem bir türlü çalıştıramadım şu e posta gönderme formunu. yok mu çalışan bir tane dosya paylaşacak arkadaş
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Re: Delphi'de Indy SMTP ile e-mail gönderme. (GMail, Yandex, Yahoo vb.) (text, html, gömülü resim)

Mesaj gönderen erdogan_ozkaya »

Merhaba,

indy10 kurduktan sonra aşağıdaki kod çalışacaktır.

Kod: Tümünü seç

unit E_MAIL_GONDER_PENCERE1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, IdHTTP, IdComponent, IdTCPConnection, IdTCPClient,
  IdMessageClient, IdSMTP, IdBaseComponent, IdMessage, DB, ADODB,
  IdExplicitTLSClientServerBase, IdSMTPBase, IdIOHandler,
  IdIOHandlerSocket, IdIOHandlerStack, IdSSL, IdSSLOpenSSL, Buttons;

type
  TE_MAIL_GONDER_PENCERE = class(TForm)
    edtE_MAIL_ADRESI_TEXT: TEdit;
    label2: TLabel;
    mmoMAIL_TEXT: TMemo;
    QRY_MAIL_AYARLARI: TADOQuery;
    QRY_MAIL_AYARLARIMAIL_KIMLIK: TAutoIncField;
    QRY_MAIL_AYARLARICALISILAN_FIRMA: TStringField;
    QRY_MAIL_AYARLARIISLEM_TARIHI: TStringField;
    QRY_MAIL_AYARLARIEKLEYEN: TStringField;
    QRY_MAIL_AYARLARIADINIZ: TStringField;
    QRY_MAIL_AYARLARIE_MAIL_ADRES: TStringField;
    QRY_MAIL_AYARLARIGELEN_SUNUCU: TStringField;
    QRY_MAIL_AYARLARIGIDEN_SUNUCU: TStringField;
    QRY_MAIL_AYARLARIKULLANICI_ADI: TStringField;
    QRY_MAIL_AYARLARIKULLANICI_SIFRE: TStringField;
    QRY_MAIL_AYARLARIGELEN_SUNUCU_PORT: TBCDField;
    QRY_MAIL_AYARLARIGIDEN_SUNUCU_PORT: TBCDField;
    QRY_MAIL_AYARLARIGELEN_SIFRE_TURU: TStringField;
    QRY_MAIL_AYARLARIGIDEN_SIFRE_TURU: TStringField;
    edtKONU: TEdit;
    lbl1: TLabel;
    LHandler: TIdSSLIOHandlerSocketOpenSSL;
    SMTP: TIdSMTP;
    btnMAIL_GONDER: TSpeedButton;
    mmoDURUM: TMemo;
    lblDURUM: TLabel;
    EPosta: TIdMessage;
    procedure FormShow(Sender: TObject);
    procedure btnMAIL_GONDERClick(Sender: TObject);

    procedure EPostaInitializeISO(var VHeaderEncoding: Char;
      var VCharSet: String);


  private
    { Private declarations }
    procedure EPostaIcerikHazirla(Sender: TObject);
  public
    { Public declarations }
  end;

var
  E_MAIL_GONDER_PENCERE: TE_MAIL_GONDER_PENCERE;

implementation

uses Unit1, StrUtils, IdText, IdAttachmentFile;
{$R *.dfm}

procedure TE_MAIL_GONDER_PENCERE.EPostaIcerikHazirla(Sender: TObject);
begin
 // EPosta.CharSet := 'utf-8';
 // EPosta.Body.Text := string(UTF8Encode(mmoMAIL_TEXT.Lines.Text));
 // EPosta.ContentType := 'text/plain';

 // EPosta.ContentType := 'text/plain';
 //EPosta.CharSet := 'iso-8859-9';
 //EPosta.Body.Text := mmoMAIL_TEXT.LineS.Text;

 // IdMessage.ContentType    := 'text/plain';
 /// IdMessage.CharSet        := 'UTF-8';


     EPosta.Body.Text := mmoMAIL_TEXT.LineS.Text;
   //  EPosta.ContentType := 'text/plain';
  //   EPosta.CharSet := 'UTF-8';
end;


procedure TE_MAIL_GONDER_PENCERE.FormShow(Sender: TObject);
var
    MAIL_AYARLARI :String;
begin
         MAIL_AYARLARI:='';
         QRY_MAIL_AYARLARI.Close;
         MAIL_AYARLARI:=MAIL_AYARLARI+'CALISILAN_FIRMA='+QuotedStr(KULLANICI_GIRIS.qryCALISILAN_FIRMA_DB.FieldByName('KIMLIK').Text)+' and ';
         MAIL_AYARLARI:=MAIL_AYARLARI+'KULLANICI_KIMLIK='+QuotedStr(KULLANICI_GIRIS.qryPERSONEL_DB.FieldByName('PERSONEL_KIMLIK').Text)+' and ';
         if Length(MAIL_AYARLARI)>0 then
         MAIL_AYARLARI:='where '+LeftStr(MAIL_AYARLARI,Length(MAIL_AYARLARI)-5);
         QRY_MAIL_AYARLARI.SQL.Text:='SELECT top(1) * FROM MAIL_AYARLARI '+MAIL_AYARLARI;
         QRY_MAIL_AYARLARI.Open; 
end;

procedure TE_MAIL_GONDER_PENCERE.btnMAIL_GONDERClick(Sender: TObject);
begin
  inherited;
  mmoDURUM.Lines.Add('');
  Application.ProcessMessages;
  mmoDURUM.Lines.Add('Bağlantı Kuruluyor.');
  try
    if SMTP.Connected then SMTP.Disconnect;
    SMTP.Host := QRY_MAIL_AYARLARI.Fieldbyname('GIDEN_SUNUCU').Text; //EditHOST.Text;
    //SMTP.AuthType := satNone;
    SMTP.AuthType := atDefault;
    SMTP.Username := QRY_MAIL_AYARLARI.Fieldbyname('KULLANICI_ADI').Text;//EditUSER.Text;
    SMTP.Password := QRY_MAIL_AYARLARI.Fieldbyname('KULLANICI_SIFRE').Text;//EditPASSWORD.Text;

    SMTP.Port := 25;
      if StrToIntDef(QRY_MAIL_AYARLARI.Fieldbyname('GIDEN_SUNUCU_PORT').Text, -1) > 0
      then SMTP.Port :=  StrToInt(QRY_MAIL_AYARLARI.Fieldbyname('GIDEN_SUNUCU_PORT').Text);



    // SSL ayarları
    if QRY_MAIL_AYARLARI.Fieldbyname('GIDEN_SIFRE_TURU').Text='Yok' then
    begin
      SMTP.UseTLS := utNoTLSSupport;
      SMTP.IOHandler := nil;
      SMTP.ConnectTimeout := 3000;
    end else


    begin
      mmoDURUM.Lines.Add('Bağlantı ayarları yapılıyor.');
      LHandler.Destination := SMTP.Host + ':' + IntToStr(SMTP.Port);
      LHandler.Host := SMTP.Host;
      LHandler.Port := SMTP.Port;
      LHandler.DefaultPort := 0;
      LHandler.SSLOptions.Method := sslvTLSv1;
      LHandler.SSLOptions.Mode := sslmUnassigned; // sslmClient;
      LHandler.SSLOptions.VerifyMode := [];
      LHandler.SSLOptions.VerifyDepth := 0;
      SMTP.IOHandler := LHandler;
    end;

     if QRY_MAIL_AYARLARI.Fieldbyname('GIDEN_SIFRE_TURU').Text='SSL'
     then  SMTP.UseTLS := utUseImplicitTLS;

     if QRY_MAIL_AYARLARI.Fieldbyname('GIDEN_SIFRE_TURU').Text='TSL'
     then  SMTP.UseTLS := utUseExplicitTLS;

      SMTP.ConnectTimeout := 10000;


    mmoDURUM.Lines.Add('Sunucuya Bağlanılıyor.');
    SMTP.Connect;

    mmoDURUM.Lines.Add('E-posta gönderiliyor.');

    EPosta.Clear;
    EPosta.From.Address := QRY_MAIL_AYARLARI.Fieldbyname('KULLANICI_ADI').Text;//EditUSER.Text;
    EPosta.From.Name := KULLANICI_GIRIS.qryCALISILAN_FIRMA_DB.fieldbyname('FIRMA_TAM_UNVANI').Text + ' (Sistem Mesajidir.)';
    EPosta.ReplyTo.EMailAddresses := QRY_MAIL_AYARLARI.Fieldbyname('KULLANICI_ADI').Text + ' deneme kullanıcısı.';
    //EPosta.ReplyTo.Name := EditUSER.Text;

    with EPosta.Recipients.Add do
    begin
      if edtE_MAIL_ADRESI_TEXT.Text > '' then
      begin
        Name := edtE_MAIL_ADRESI_TEXT.Text;
        Address := edtE_MAIL_ADRESI_TEXT.Text;
      end else
      begin
        Name := QRY_MAIL_AYARLARI.Fieldbyname('KULLANICI_ADI').Text;
        Address := QRY_MAIL_AYARLARI.Fieldbyname('KULLANICI_ADI').Text;
      end;
    end;
    EPosta.Subject :=  edtKONU.Text;
    EPostaIcerikHazirla(Sender);
    SMTP.Send(EPosta);
    mmoDURUM.Lines.Add('Bağlantı başarılı. ' + edtE_MAIL_ADRESI_TEXT.Text + ' adresine bir E-posta gönderilmiştir.');
   finally
    mmoDURUM.Lines.Add('Bağlantı sonlandırılıyor.');
    if SMTP.Connected then SMTP.Disconnect;
  end;
end;

procedure TE_MAIL_GONDER_PENCERE.EPostaInitializeISO(var VHeaderEncoding: Char;
  var VCharSet: String);
begin
  inherited;
  VCHarSet :=  'iso-8859-9'; // 'iso-8859-9';
end;



end.
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Re: Delphi'de Indy SMTP ile e-mail gönderme. (GMail, Yandex, Yahoo vb.) (text, html, gömülü resim)

Mesaj gönderen erdogan_ozkaya »

ekteki dll dosyaları ise projenin bulunduğu dizine yüklemelisiniz
Dosya ekleri
mail dll.rar
(296.25 KiB) 805 kere indirildi
Bay_Y
Üye
Mesajlar: 116
Kayıt: 10 Mar 2014 11:12
Konum: İstanbul

Re: Delphi'de Indy SMTP ile e-mail gönderme. (GMail, Yandex, Yahoo vb.) (text, html, gömülü resim)

Mesaj gönderen Bay_Y »

Teşekkürler elinize , dilinize sağlık.
Cevapla