Net::SMTP 3.16 không có hàm khởi tạo SOCKS kết nối sẵn
Net::SMTP 3.16 không tài liệu hóa tùy chọn hàm khởi tạo cho socket kết nối sẵn. Giữ nguyên lời chào SMTP, EHLO và trình tự TLS khi chọn tích hợp truyền tải qua proxy.
Net::SMTP 3.16 không tài liệu hóa tham số hàm khởi tạo cho SOCKS hoặc socket kết nối sẵn. Việc bọc một bộ mô tả tệp bằng new_from_fd kế thừa không chạy hàm khởi tạo SMTP của nó. Một kết nối SOCKS thành công cung cấp một luồng, không phải một phiên thư đã khởi tạo.
Với SMTP thuần, kể cả nâng cấp STARTTLS sau này, máy chủ nói trước:
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 ...Đây là sơ đồ; các tiện ích được quảng cáo khác nhau. Bản thân lời chào có thể kéo dài nhiều dòng: mã phản hồi theo sau bởi dấu gạch nối tiếp tục phản hồi, còn dòng cuối của nó kết thúc phản hồi. Hãy tiêu thụ toàn bộ lời chào trước EHLO. Nếu không, máy khách có thể đọc một 220 cũ khi đang chờ 250 của EHLO và lệch nhịp trên một kết nối khỏe mạnh.
TLS ngầm có thứ tự khác: kết nối SOCKS, bắt tay TLS, rồi lời chào SMTP bên trong TLS. STARTTLS bắt đầu bằng lời chào đọc được và EHLO, nâng cấp luồng rồi lấy lại các khả năng sau đó.
Hàm khởi tạo công khai thường xử lý cấu hình socket, tham số kết nối đã lưu và thông tin chào, phản hồi ban đầu và EHLO với dự phòng HELO khi thích hợp:
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;Ví dụ công khai này dùng STARTTLS và không cấu hình SOCKS. Tên máy chủ chọn đích thư; Hello cung cấp danh tính SMTP của máy khách. Với TLS ngầm, dùng tùy chọn hàm khởi tạo SSL đã được tài liệu hóa và cổng của dịch vụ.
SendHello => 0 ức chế EHLO/HELO tự động, không phải việc đọc lời chào hay xây dựng truyền tải. Gọi một bộ đọc dòng rồi sau đó hello() cũng không phải là thay thế được tài liệu hóa cho việc khởi tạo: Net::Cmd phân loại các bộ đọc phản hồi cấp thấp của nó là phương thức lớp con được bảo vệ.
Nếu SOCKS là bắt buộc, hãy chọn máy khách có giao diện SOCKS được hỗ trợ hoặc duy trì tích hợp với phiên bản Net::SMTP cụ thể. Dùng trình tự trên làm hợp đồng của nó thay vì sao chép các trường riêng tư. Một bộ điều hợp TCP riêng cũng cần xử lý danh tính TLS có chủ đích: chứng chỉ phải xác định dịch vụ thư thật, và thông tin đăng nhập proxy vẫn tách biệt khỏi đăng nhập SMTP.