ל-Net::SMTP 3.16 אין בנאי SOCKS מחובר מראש
Net::SMTP 3.16 אינו מתעד אפשרות בנאי עבור שקע מחובר מראש. שמור על רצף ברכת SMTP, EHLO ו-TLS ללא שינוי בעת בחירת שילוב תעבורה דרך פרוקסי.
Net::SMTP 3.16 אינו מתעד פרמטר בנאי עבור SOCKS או שקע מחובר מראש. עטיפת מתאר קובץ עם new_from_fd שעבר בירושה אינה מריצה את בנאי ה-SMTP שלו. חיבור SOCKS מוצלח מספק זרם, לא הפעלת סשן דואר מאותחל.
ב-SMTP פשוט, כולל שדרוג STARTTLS מאוחר יותר, השרת מדבר ראשון:
SOCKS: connection to smtp.example.net:587 succeeds
server: 220 smtp.example.net ready
client: EHLO client.example.net
server: 250-smtp.example.net
server: 250-STARTTLS
server: 250 AUTH ...זה סכמטי; ההרחבות המוכרזות משתנות. הברכה עצמה עשויה להימשך על פני כמה שורות: קוד תגובה שאחריו מקף ממשיך את התגובה, והשורה האחרונה שלה מסיימת אותה. צרך את כל הברכה לפני EHLO. אחרת הלקוח עלול לקרוא 220 ישן כשהוא מצפה ל-250 של EHLO ולצאת מקצב על חיבור תקין.
ל-TLS משתמע סדר אחר: חיבור SOCKS, לחיצת יד TLS, ואז ברכת SMTP בתוך TLS. STARTTLS מתחיל בברכה הקריאה וב-EHLO, משדרג את הזרם ומשיג שוב יכולות לאחר מכן.
הבנאי הציבורי מטפל בדרך כלל בתצורת השקע, בפרמטרי החיבור השמורים ובמידע הברכה, בתגובה הראשונית וב-EHLO עם נפילה ל-HELO היכן שמתאים:
use Net::SMTP;
my $smtp = Net::SMTP->new(
'smtp.example.net',
Port => 587,
Hello => 'client.example.net',
Timeout => 30,
) or die "SMTP connection failed: $@";
$smtp->starttls()
or die "STARTTLS failed: " . $smtp->message;דוגמה ציבורית זו משתמשת ב-STARTTLS ואינה מגדירה SOCKS. שם השרת בוחר את יעד הדואר; Hello מספק את זהות ה-SMTP של הלקוח. ל-TLS משתמע, השתמש באפשרות הבנאי המתועדת SSL ובפורט של השירות.
SendHello => 0 מדכא EHLO/HELO אוטומטי, לא את קריאת הברכה או בניית התעבורה. גם קריאה לקורא שורות ואז hello() אינה חלופה מתועדת לאתחול: Net::Cmd מסווג את קוראי התגובה ברמה נמוכה כשיטות מוגנות של תת-מחלקה.
אם SOCKS חובה, בחר לקוח עם ממשק SOCKS נתמך או תחזק שילוב מול גרסת Net::SMTP המסוימת. השתמש ברצף שלעיל כחוזה שלו במקום להעתיק שדות פרטיים. מתאם TCP נפרד זקוק גם לטיפול מכוון בזהות TLS: התעודה חייבת לזהות את שירות הדואר האמיתי, ופרטי הפרוקסי נשארים נפרדים מהתחברות SMTP.