Dalam Indy, lampirkan proksi pada IOHandler yang digunakan TIdSMTP. Kekalkan TIdSMTP.Host dan Port menghala ke perkhidmatan mel. Komponen proksi IOHandler membekalkan alamat perantara dan melakukan jabat tangan proksi pada sambungan yang sama.

Sifat yang anda gunakan bergantung pada versi Indy: Indy 9 mendedahkan SocksInfo; Indy 10 menggunakan TransparentProxy. Periksa pustaka komponen dalam aplikasi dan bukannya memilih contoh hanya berdasarkan nama keluaran Delphi.

Indy 10 dengan SOCKS5

Katakan borang sudah memiliki komponen ini:

  • Smtp: TIdSMTP
  • MailSocket: TIdIOHandlerStack
  • Socks: TIdSocksInfo

Sambung dan konfigurasikannya sebelum membuka sambungan SMTP:

Smtp.Host := 'smtp.example.net';
Smtp.Port := 587;
Smtp.IOHandler := MailSocket;

Socks.Host := 'proxy.example.net';
Socks.Port := 1080;
Socks.Version := svSocks5;
MailSocket.TransparentProxy := Socks;

Nilai port ialah contoh. Port SMTP mesti sepadan dengan perkhidmatan dan mod TLS yang anda ingin gunakan. Port SOCKS milik proksi.

Untuk ujian SMTP awam yang dibenarkan di mana perantara awam dibenarkan, senarai proksi SOCKS5 menawarkan alamat calon. Sahkan bahawa calon membenarkan hos dan port mel sebenar, dan gunakan cabang tanpa pengesahan proksi tanpa menyimpan kelayakan daripada proksi terdahulu.

TIdSocksInfo bermula dengan svNoSocks, jadi hanya menetapkan nama hos proksi tidak mengaktifkannya. Pilih versi SOCKS yang sesuai. Jika proksi memerlukan pengesahan SOCKS5 nama pengguna/kata laluan, konfigurasikan kaedah pengesahan serta kelayakan:

Socks.Authentication := saUsernamePassword;
Socks.Username := ProxyUser;
Socks.Password := ProxyPassword;

ProxyUser dan ProxyPassword mewakili nilai yang dibekalkan oleh aplikasi. Sifat ini mengesahkan kepada proksi. Konfigurasikan akaun SMTP dan kaedah pengesahannya secara berasingan dalam klien mel.

Mengekalkan IOHandler TLS sedia ada

Klien mel yang menggunakan STARTTLS atau TLS tersirat memerlukan IOHandler berkebolehan SSL. Jangan gantikan komponen itu dengan TIdIOHandlerStack biasa hanya untuk menambah proksi.

Dalam Indy 10, asas IOHandler SSL berasal daripada TIdIOHandlerStack dan mewarisi sokongan proksinya. Untuk IOHandler SSL serasi sedia ada bernama MailTLS, sambungan menjadi:

Smtp.IOHandler := MailTLS;
MailTLS.TransparentProxy := Socks;

Tetapan UseTLS komponen SMTP masih memilih mod TLS perkhidmatan mel. Konfigurasikan kepercayaan sijil dan pengesahan nama hos dalam integrasi TLS untuk smtp.example.net, bukan untuk nama hos proksi. Menambah terowong tidak menetapkan pengesahan sijil dengan sendirinya.

Menggunakan proksi HTTP CONNECT sebagai ganti

Untuk Indy 10, gunakan komponen TIdConnectThroughHttpProxy, tersedia daripada IdConnectThroughHttpProxy. Dengan andaian wujud instans milik borang bernama HttpTunnel:

HttpTunnel.Host := 'proxy.example.net';
HttpTunnel.Port := 8080;
HttpTunnel.Enabled := True;
MailSocket.TransparentProxy := HttpTunnel;

Jika SMTP menggunakan MailTLS, tetapkan HttpTunnel kepada TransparentProxy pengendali itu sebagai ganti. Sasaran mel kekal pada Smtp.

Komponen ini mewujudkan terowong HTTP CONNECT dan melaksanakan pengesahan proksi Asas melalui sifat Username dan Password-nya. Proksi yang memerlukan mekanisme pengesahan lain memerlukan pelaksanaan yang serasi; jangan andaikan kedua-dua sifat ini menyediakan semua skema pengesahan HTTP.

Proksi juga mesti membenarkan CONNECT ke port sebenar pelayan mel. Kebenaran untuk membuat terowong ke pelayan web pada 443 tidak bermakna kebenaran untuk mencapai perkhidmatan penyerahan pada 587 atau pelayan SMTP pada 25.

Sambungan Indy 9

Indy 9 menggunakan TIdIOHandlerSocket dan sifat SocksInfo-nya. Dengan komponen milik borang bernama Socket9 dan Socks9, pendawaian setara ialah:

Smtp.IOHandler := Socket9;
Socket9.SocksInfo := Socks9;
Socks9.Host := 'proxy.example.net';
Socks9.Port := 1080;
Socks9.Version := svSocks5;

Pelaksanaan SOCKS-nya menyokong versi 4, 4a dan 5. Susunan TransparentProxy dan komponen HTTP CONNECT Indy 10 tidak boleh ditampal terus ke antara muka yang lebih lama ini.

Tiada log masuk proksi pendahuluan berasingan yang perlu dilakukan dengan klien TCP lain. Pengesahan proksi, penyediaan terowong dan pertukaran SMTP mesti tergolong dalam sambungan yang benar-benar digunakan komponen SMTP. Apabila pendawaian itu betul, kegagalan boleh dikesan pada rundingan proksi, sapaan SMTP, TLS atau pengesahan mel, dan bukannya menganggap setiap penolakan sebagai kata laluan mel yang salah.

Artikel berkaitan