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