smtp.Dial ახალ კავშირს ხსნის თავის მისამართზე. HTTP CONNECT proxy-ს მეშვეობით კავშირის მიღების შემდეგ, ეს არსებული ნაკადი გადაეცით smtp.NewClient-ს.

SMTP სერვერისთვის, რომელიც STARTTLS-ს მოითხოვს თავის გაგზავნის პორტზე, გადაცემა ასე გამოიყურება:

func smtpOverTunnel(conn net.Conn, mailHost string) (*smtp.Client, error) {
    client, err := smtp.NewClient(conn, mailHost)
    if err != nil {
        conn.Close()
        return nil, err
    }
    err = client.StartTLS(&tls.Config{
        ServerName: mailHost,
        MinVersion: tls.VersionTLS12,
    })
    if err != nil {
        client.Close()
        return nil, err
    }
    return client, nil
}

პაკეტებია net, net/smtp და crypto/tls. გამომძახებელი აწვდის გვირაბს, რომელიც უკვე დაკავშირებულია სასურველ SMTP ჰოსტთან და პორტთან, proxy-ს CONNECT გაცვლის დასრულებით. მხოლოდ TCP-ის გახსნა proxy-სკენ საკმარისი არ არის: HTTP პასუხი SMTP მისალმება არ არის.

mailHost არის SMTP სერვერის ჰოსტის სახელი, პორტის გარეშე. შეინარჩუნეთ ეს იდენტობა SMTP ავთენტიფიკაციისა და სერტიფიკატის შემოწმებისთვის. TLS კავშირი HTTPS proxy-სთან მარშრუტის სხვა მონაკვეთს იცავს.

დაბრუნებული კლიენტი მზად არის აპლიკაციის არსებული SMTP ავთენტიფიკაციისა და ფოსტის ტრანზაქციისთვის. დახურეთ იგი დასრულებისას. შეზღუდეთ აკრეფა, CONNECT და შემდგომი პროტოკოლური ოპერაციები აპლიკაციის ვადების პოლიტიკით.

proxy-მ უნდა დაუშვას CONNECT არჩეულ ფოსტის პორტზე. ზოგი მას 443 პორტზე HTTPS დანიშნულებებით ზღუდავს. იმპლიციტური TLS-ის SMTP-სთვის, STARTTLS-ის გაცემის ნაცვლად, NewClient-ის გამოძახებამდე დაამყარეთ დანიშნულების TLS სესია.

დაკავშირებული სტატიები