CONNECT ટનલ Go ના SMTP ક્લાયન્ટને સોંપો
પહેલેથી સ્થાપિત ટનલ સાથે smtp.NewClient વાપરો અને SMTP હોસ્ટનામ તથા STARTTLS હેન્ડશેકને પ્રોક્સી સેટઅપથી અલગ રાખો.
smtp.Dial તેના સરનામાં પર નવું કનેક્શન ખોલે છે. HTTP CONNECT પ્રોક્સી દ્વારા કનેક્શન મળ્યા પછી, તે હાલની સ્ટ્રીમને તેના બદલે 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 હોસ્ટ અને પોર્ટ સાથે પહેલેથી જોડાયેલી ટનલ પૂરી પાડે છે, પ્રોક્સીની CONNECT આપલે પૂર્ણ થયેલી સાથે. પ્રોક્સી સુધી ફક્ત TCP ખોલવું પૂરતું નથી: HTTP પ્રતિસાદ એ SMTP અભિવાદન નથી.
mailHost એ SMTP સર્વરનું હોસ્ટનામ છે, પોર્ટ વગર. SMTP પ્રમાણીકરણ અને પ્રમાણપત્ર ચકાસણી માટે તે ઓળખ જાળવી રાખો. HTTPS પ્રોક્સી સાથેનું TLS કનેક્શન માર્ગના બીજા ભાગને સુરક્ષિત કરે છે.
પરત મળેલ ક્લાયન્ટ એપ્લિકેશનના હાલના SMTP પ્રમાણીકરણ અને મેઇલ વ્યવહાર માટે તૈયાર છે. પૂરું થાય ત્યારે તેને બંધ કરો. ડાયલિંગ, CONNECT અને પછીની પ્રોટોકોલ ક્રિયાઓને એપ્લિકેશનની સમયમર્યાદા નીતિથી મર્યાદિત કરો.
પ્રોક્સીએ પસંદ કરેલા મેઇલ પોર્ટ પર CONNECT ની પરવાનગી આપવી જોઈએ. કેટલાક તેને પોર્ટ 443 પરનાં HTTPS ગંતવ્યો સુધી મર્યાદિત કરે છે. ગર્ભિત TLS વાળા SMTP માટે, STARTTLS બહાર પાડવાને બદલે NewClient કૉલ કરતાં પહેલાં ગંતવ્યનું TLS સત્ર સ્થાપિત કરો.