smtp.Dial ṣí ìsopọ̀ tuntun sí àdírẹ́sì rẹ̀. Lẹ́yìn tí o bá gba ìsopọ̀ nípasẹ̀ proxy HTTP CONNECT, fi agbára tí ó wà tẹ́lẹ̀ náà lé smtp.NewClient lọ́wọ́ dípò.

Fún ẹ̀rọ SMTP tí ó béèrè STARTTLS ní ibùdókọ̀ ìfiránṣẹ́ rẹ̀, ìfàlọ́wọ́ lè rí bẹ́ẹ̀:

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
}

Àwọn àkójọpọ̀ ni net, net/smtp àti crypto/tls. Olùpè náà pèsè ọ̀nà abẹ́lẹ̀ tí ó ti so pẹ̀lú agbàlejò àti ibùdókọ̀ SMTP tí a fẹ́, pẹ̀lú ìparọ́rọ́ CONNECT ti proxy ti parí. Ṣíṣí TCP nìkan sí proxy kò tó: ìdáhùn HTTP kìí ṣe ìkíni SMTP.

mailHost ni orúkọ agbàlejò ẹ̀rọ SMTP, láìsí ibùdókọ̀. Pa orúkọ yẹn mọ́ fún ìjẹ́rìí SMTP àti ìjẹ́rìí ìwé-ẹ̀rí. Ìsopọ̀ TLS sí proxy HTTPS ń dáàbò bo apá mìíràn ti ipa ọ̀nà.

Ẹ̀rọ tí a dá padà ti ṣetán fún ìjẹ́rìí SMTP àti ìgbékalẹ̀ mail tí ó wà tẹ́lẹ̀ ti ohun èlò náà. Pa á nígbà tí o bá parí. Fi ìpè, CONNECT àti àwọn iṣẹ́ ìlànà tó tẹ̀le sílẹ̀ pẹ̀lú ìlànà àkókò ipari ti ohun èlò náà.

Proxy gbọdọ̀ gba CONNECT sí ibùdókọ̀ mail tí a yàn. Àwọn kan fi í mọ́ àwọn ibi HTTPS ní ibùdókọ̀ 443. Fún SMTP pẹ̀lú TLS àṣírí, gbé ìpàdé TLS ti ibi tí a ń lọ kalẹ̀ kí o tó pe NewClient dípò fífi STARTTLS jáde.

Àwọn àpilẹ̀kọ tó jọra