ב-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 או באימות הדואר, במקום לראות בכל סירוב סיסמת דואר שגויה.

מאמרים קשורים