gpt4 book ai didi

go - 通过未加密的连接发送电子邮件

转载 作者:IT王子 更新时间:2023-10-29 00:36:29 25 4
gpt4 key购买 nike

我有一个不使用加密连接的 SMTP 帐户。我可以使用相同的帐户从 C# 和 Python 发送电子邮件而不会出现问题,但是使用 Go 我会收到错误消息:未加密连接

这是我使用的代码:

package main

import (
"log"
"net/smtp"
)

func main() {
// Set up authentication information.
auth := smtp.PlainAuth(
"",
"user@example.com",
"password",
"mail.example.com",
)
// Connect to the server, authenticate, set the sender and recipient,
// and send the email all in one step.
err := smtp.SendMail(
"mail.example.com:25",
auth,
"sender@example.org",
[]string{"recipient@example.net"},
[]byte("This is the email body."),
)
if err != nil {
log.Fatal(err)
}
}

最佳答案

这里的问题是 smtp.PlainAuth 拒绝通过未加密的连接发送您的密码。这是为了保护你自己。像 smtp.CRAMMD5Auth 这样的东西会是更好的选择。使用 CRAM-MD5 时,即使通过未加密的连接,您的密码也不会暴露。

如果您无论如何都想使用普通身份验证,则需要制作您自己的 smtp.PlainAuth 版本。幸运的是,这是一件非常容易做到的事情。只需从标准库中复制 20 行左右并删除:

if !server.TLS {
return "", nil, errors.New("unencrypted connection")
}

http://golang.org/src/pkg/net/smtp/auth.go?s=1820:1882#L41包含代码。

如果您不想复制代码,您可以通过将函数返回的 smtp.Auth 包装在您自己的类型中来重用标准库实现。通过这种方式,您可以拦截 *smtp.ServerInfo 并欺骗实际的 Auth 机制(来自标准库)存在加密连接。一定要大量评论,以明确你为什么要做你正在做的事情。像这样的东西(未经测试):

type unencryptedAuth struct {
smtp.Auth
}

func (a unencryptedAuth) Start(server *smtp.ServerInfo) (string, []byte, error) {
s := *server
s.TLS = true
return a.Auth.Start(&s)
}

auth := unencryptedAuth {
smtp.PlainAuth(
"",
"user@example.com",
"password",
"mail.example.com",
),
}

关于go - 通过未加密的连接发送电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11065913/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com