smtp.Dial өз мекенжайына жаңа қосылым ашады. HTTP CONNECT проксиі арқылы қосылым алғаннан кейін, сол бар ағынды оның орнына smtp.NewClient функциясына беріңіз.

Жіберу портында STARTTLS талап ететін SMTP сервері үшін тапсыру былай болуы мүмкін:

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 хост пен портқа әлдеқашан қосылған туннельді ұсынады, проксидің CONNECT алмасуы аяқталған. Проксиге тек TCP ашу жеткіліксіз: HTTP жауабы SMTP сәлемі емес.

mailHost — SMTP серверінің хост атауы, портсыз. Бұл сәйкестікті SMTP аутентификациясы мен сертификатты тексеру үшін сақтаңыз. HTTPS проксиіне TLS қосылымы маршруттың басқа бөлігін қорғайды.

Қайтарылған клиент қолданбаның бар SMTP аутентификациясы мен пошта транзакциясына дайын. Аяқтаған соң оны жабыңыз. Теруді, CONNECT және кейінгі протокол операцияларын қолданбаның мерзім саясатымен шектеңіз.

Прокси таңдалған пошта портына CONNECT рұқсат етуі керек. Кейбіреулер оны 443 портындағы HTTPS мақсаттарымен шектейді. Имплицитті TLS SMTP үшін STARTTLS шығарудың орнына NewClient шақырудың алдында мақсаттың TLS сессиясын орнатыңыз.

Қатысты мақалалар