در Indy، پروکسی را به IOHandlerی که TIdSMTP استفاده می‌کند وصل کنید. TIdSMTP.Host و Port را به سمت سرویس ایمیل نگه دارید. مؤلفه پروکسی IOHandler آدرس واسطه را فراهم می‌کند و دست‌دادن پروکسی را روی همان اتصال انجام می‌دهد.

ویژگی‌ای که استفاده می‌کنید به نسخه Indy بستگی دارد: Indy 9 ویژگی SocksInfo را ارائه می‌کند؛ Indy 10 از TransparentProxy استفاده می‌کند. کتابخانه مؤلفه‌ها را در برنامه بررسی کنید، نه اینکه نمونه‌ای را فقط بر پایه نام انتشار Delphi انتخاب کنید.

Indy 10 با SOCKS5

فرض کنید فرم از قبل این مؤلفه‌ها را دارد:

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

آن‌ها را پیش از باز کردن اتصال 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;

مقادیر پورت نمونه‌اند. پورت SMTP باید با سرویس و حالت TLS مورد نظر شما بخواند. پورت SOCKS به پروکسی تعلق دارد.

برای یک آزمون عمومی مجاز SMTP که در آن واسطه عمومی مجاز است، فهرست پروکسی SOCKS5 نشانی‌های نامزد ارائه می‌دهد. تأیید کنید که نامزد میزبان و پورت واقعی ایمیل را مجاز می‌داند، و از شاخه بدون احراز هویت پروکسی استفاده کنید بدون نگه داشتن اعتبارنامه‌های یک پروکسی پیشین.

TIdSocksInfo با svNoSocks آغاز می‌شود، پس تنها تنظیم نام میزبان پروکسی آن را فعال نمی‌کند. نسخه مناسب SOCKS را انتخاب کنید. اگر پروکسی احراز هویت نام کاربری/گذرواژه SOCKS5 می‌خواهد، هم روش احراز هویت و هم اعتبارنامه‌ها را پیکربندی کنید:

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

ProxyUser و ProxyPassword مقادیری را نشان می‌دهند که برنامه فراهم می‌کند. این ویژگی‌ها در برابر پروکسی احراز هویت می‌کنند. حساب SMTP و روش احراز هویت آن را جداگانه در کلاینت ایمیل پیکربندی کنید.

نگه داشتن یک IOHandler موجود TLS

کلاینت ایمیلی که از STARTTLS یا TLS ضمنی استفاده می‌کند به IOHandler توانمند در SSL خود نیاز دارد. آن مؤلفه را فقط برای افزودن پروکسی با یک TIdIOHandlerStack ساده جایگزین نکنید.

در Indy 10، پایه IOHandler مربوط به SSL از TIdIOHandlerStack مشتق می‌شود و پشتیبانی پروکسی آن را به ارث می‌برد. برای یک IOHandler SSL سازگار موجود به نام MailTLS، اتصال چنین می‌شود:

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

تنظیم UseTLS مؤلفه SMTP همچنان حالت TLS سرویس ایمیل را انتخاب می‌کند. اعتماد به گواهی و اعتبارسنجی نام میزبان را در یکپارچه‌سازی TLS برای smtp.example.net پیکربندی کنید، نه برای نام میزبان پروکسی. افزودن تونل به‌خودی‌خود اعتبارسنجی گواهی را برقرار نمی‌کند.

استفاده از پروکسی HTTP CONNECT به جای آن

برای Indy 10 از مؤلفه TIdConnectThroughHttpProxy استفاده کنید که از IdConnectThroughHttpProxy در دسترس است. با فرض وجود نمونه‌ای متعلق به فرم به نام HttpTunnel:

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

اگر SMTP از MailTLS استفاده می‌کند، به جای آن HttpTunnel را به TransparentProxy همان گرداننده اختصاص دهید. مقصد ایمیل روی Smtp می‌ماند.

این مؤلفه یک تونل HTTP CONNECT ایجاد می‌کند و احراز هویت پایه پروکسی را از طریق ویژگی‌های Username و Password پیاده می‌کند. پروکسی‌ای که مکانیزم احراز هویت دیگری می‌خواهد به پیاده‌سازی سازگار نیاز دارد؛ فرض نکنید این دو ویژگی همه طرح‌های احراز هویت HTTP را فراهم می‌کنند.

پروکسی همچنین باید CONNECT به پورت واقعی سرور ایمیل را مجاز کند. اجازه تونل به سرورهای وب روی 443 به معنای اجازه دسترسی به سرویس ارسال روی 587 یا سرور SMTP روی 25 نیست.

اتصال Indy 9

Indy 9 از TIdIOHandlerSocket و ویژگی SocksInfo آن استفاده می‌کند. با مؤلفه‌های متعلق به فرم به نام‌های Socket9 و Socks9، سیم‌کشی معادل چنین است:

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

پیاده‌سازی SOCKS آن نسخه‌های 4، 4a و 5 را پشتیبانی می‌کند. چیدمان TransparentProxy و مؤلفه HTTP CONNECT در Indy 10 را نمی‌توان به‌سادگی در این رابط قدیمی‌تر چسباند.

ورود مقدماتی جداگانه‌ای به پروکسی که با کلاینت TCP دیگری انجام شود وجود ندارد. احراز هویت پروکسی، برپایی تونل و تبادل SMTP باید متعلق به اتصالی باشد که مؤلفه SMTP واقعاً استفاده می‌کند. وقتی این سیم‌کشی درست باشد، می‌توان خطا را در مذاکره پروکسی، سلام SMTP، TLS یا احراز هویت ایمیل مکان‌یابی کرد، به جای آنکه هر رد شدن را گذرواژه بد ایمیل بینگاریم.

مقالات مرتبط