Net::SMTP 3.16, SOCKS veya önceden bağlanmış soket için bir kurucu parametresi belgelemez. Bir dosya tanıtıcısını devralınan new_from_fd ile sarmak, onun SMTP kurucusunu çalıştırmaz. Başarılı bir SOCKS bağlantısı bir akış sağlar, başlatılmış bir posta oturumu değil.

Düz SMTP için, sonradan yapılacak bir STARTTLS yükseltmesi dahil, önce sunucu konuşur:

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 ...

Bu şematiktir; duyurulan uzantılar değişir. Karşılama birden çok satıra yayılabilir: bir yanıt kodu ve ardından gelen tire yanıtı sürdürürken son satırı onu bitirir. EHLO'dan önce karşılamanın tamamını tüketin. Aksi halde istemci EHLO'nun 250'sini beklerken eski bir 220 okuyabilir ve sağlıklı bir bağlantıda adımdan çıkabilir.

Örtük TLS'in sırası farklıdır: SOCKS bağlantısı, TLS el sıkışması, ardından TLS içinde SMTP karşılaması. STARTTLS okunabilir karşılama ve EHLO ile başlar, akışı yükseltir ve sonrasında yetenekleri yeniden alır.

Genel kurucu normalde soket yapılandırmasını, saklanan bağlantı parametrelerini ve karşılama bilgisini, ilk yanıtı ve uygun olduğunda HELO geri dönüşüyle EHLO'yu işler:

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;

Bu genel örnek STARTTLS kullanır ve SOCKS yapılandırmaz. Sunucu adı posta hedefini seçer; Hello istemcinin SMTP kimliğini sağlar. Örtük TLS için belgelenmiş SSL kurucu seçeneğini ve hizmetin bağlantı noktasını kullanın.

SendHello => 0 otomatik EHLO/HELO'yu bastırır, karşılamanın okunmasını veya taşımanın kurulmasını değil. Bir satır okuyucu çağırıp ardından hello() çağırmak da başlatmanın belgelenmiş bir yedeği değildir: Net::Cmd alt düzey yanıt okuyucularını korumalı alt sınıf yöntemleri olarak sınıflandırır.

SOCKS zorunluysa, desteklenen SOCKS arabirimine sahip bir istemci seçin veya belirli Net::SMTP sürümüne karşı bir tümleştirme sürdürün. Özel alanları kopyalamak yerine yukarıdaki sırayı onun sözleşmesi olarak kullanın. Ayrı bir TCP bağdaştırıcısı da bilinçli TLS kimlik işlemesi gerektirir: sertifika gerçek posta hizmetini tanımlamalı ve proxy kimlik bilgileri SMTP oturum açmasından ayrı kalmalıdır.

İlgili makaleler