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 нэвтрэлтээс тусдаа үлддэг.