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-യ്ക്ക് മുൻപ് മുഴുവൻ അഭിവാദ്യവും ഉപയോഗിക്കുക. അല്ലെങ്കിൽ ക്ലയന്റ് EHLO-യുടെ 250 കാത്തിരിക്കുമ്പോൾ പഴയ 220 വായിച്ച് ആരോഗ്യകരമായ കണക്ഷനിൽ താളം നഷ്ടപ്പെടാം.
ഇംപ്ലിസിറ്റ് TLS-ന് മറ്റൊരു ക്രമമുണ്ട്: SOCKS കണക്ഷൻ, TLS ഹാൻഡ്ഷേക്ക്, തുടർന്ന് TLS-നുള്ളിൽ SMTP അഭിവാദ്യം. STARTTLS വായിക്കാവുന്ന അഭിവാദ്യത്തോടും EHLO-യോടും തുടങ്ങുന്നു, സ്ട്രീം അപ്ഗ്രേഡ് ചെയ്ത് പിന്നീട് വീണ്ടും കഴിവുകൾ നേടുന്നു.
പൊതു കൺസ്ട്രക്ടർ സാധാരണയായി സോക്കറ്റ് കോൺഫിഗറേഷൻ, സംഭരിച്ച കണക്ഷൻ പാരാമീറ്ററുകളും അഭിവാദ്യ വിവരങ്ങളും, പ്രാരംഭ പ്രതികരണം, ഉചിതമായിടത്ത് HELO ബദലോടെയുള്ള EHLO എന്നിവ കൈകാര്യം ചെയ്യുന്നു:
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 ലോഗിനിൽനിന്ന് വേർതിരിച്ചിരിക്കണം.