smtp 패키지의 기본 제공 기능을 사용하여 GO에서 간단한 전자 메일을 보내려고합니다. 물건은 항상 내가 정의의 반환이 포함 된 메시지를 보낼 경우에도 config.SmtpUsername의 값으로 반환 경로 헤더를 설정하는 것입니다,GO에서 전자 메일 보내기, Return-Path 헤더를 설정할 수 없음
func sendEmail(to string, body []byte) error {
auth := smtp.PlainAuth(
"",
config.SmtpUsername,
config.SmtpPassword,
config.SmtpHostname,
)
return smtp.SendMail(
fmt.Sprintf("%s:%d", config.SmtpHostname, config.SmtpPort),
auth,
config.SmtpUsername,
[]string{to},
body,
)
}
그리고 그것은 작동합니다
내 간단한 코드처럼 보이는 기본적으로 메시지가 전송 된 후에 -Path 헤더는 메시지의 Return-Path가 smtp 사용자 이름으로 대체 된 것처럼 보입니다.
내가 어떻게 이런 일을 피할 수 있고 돌아가는 길에서 나는 무엇이든 사용할 수 있다고 생각하십니까?
LE 1 : 도움이 코드 조각은에서 사용할 수있는 경우 : http://play.golang.org/p/ATDCgJGKZ3는
LE 2 : 나는 이렇게 내가 전달 서버가 어떤에서 헤더를 변경 생각하지 않습니다, swiftmailer와 PHP에서 원하는 동작을 얻을 수 있습니다 방법.
더 코드 : 여전히 인증서 오류를 방지하기 위해 난 그냥 TLS 구성에 InsecureSkipVerify: true
을 설정 사용자 지정 mysmtp 패키지와
Yii::import('common.vendors.SwiftMailer.lib.classes.Swift', true);
Yii::registerAutoloader(array('Swift', 'autoload'));
Yii::import('common.vendors.SwiftMailer.lib.swift_init', true);
$hostname = '';
$username = '';
$password = '';
$returnPath = '';
$subject = 'Swiftmailer sending, test return path';
$toEmail = '';
$transport = Swift_SmtpTransport::newInstance($hostname, 25);
$transport->setUsername($username);
$transport->setPassword($password);
$logger = new Swift_Plugins_LoggerPlugin(new Swift_Plugins_Loggers_ArrayLogger());
$mailer = Swift_Mailer::newInstance($transport);
$mailer->registerPlugin($logger);
$message = Swift_Message::newInstance();
$message->setReturnPath($returnPath);
$message->setSubject($subject);
$message->setFrom($username);
$message->setTo($toEmail);
$message->setBody('Hello, this is a simple test going on here...');
$sent = $mailer->send($message);
print_r($logger->dump());
GO : swiftmailer와
PHP, 그것은 적절한 리턴 경로를 설정합니다 리턴 경로가 잘못 : 말 그대로 어떤 것을 실패 단서 이유가 없다
hostname := ""
username := ""
password := ""
returnPath := ""
subject := "GO sending, test return path"
toEmail := ""
body := "Hello, this is a simple test going on here..."
auth := mysmtp.PlainAuth(
"",
username,
password,
hostname,
)
header := make(map[string]string)
header["Return-Path"] = returnPath
header["From"] = username
header["To"] = toEmail
header["Subject"] = subject
message := ""
for k, v := range header {
message += fmt.Sprintf("%s: %s\r\n", k, v)
}
message += "\r\n" + string([]byte(body))
err := mysmtp.SendMail(
fmt.Sprintf("%s:%d", hostname, 25),
auth,
username,
[]string{toEmail},
[]byte(message),
)
log.Fatal(err)
,이 마지막 시험은 후위 MTA, IJ에 대해 진행되고있다 이 동작을 허용하려면 reject_sender_login_mismatch
정책을 후위 구성에서 제거해야합니다.
메시지 본문과 실제 [] 바이트를 추가 할 수 있습니까? – Momer
@Momer - http://play.golang.org/p/ATDCgJGKZ3에서보세요. 당신이 거기에 무엇을 던지 던지 상관 없습니다. 결과는 같습니다. 반환 경로는 덮어 씁니다. – Twisted1919
아마 당신은 할 수 없습니다. 코드로 그렇게해라. 'Return-Path'는 SMTP 시스템에 의해 설정됩니다 (이미 존재할 때 재설정 될 수 있습니다). [RFC 5321] (https://tools.ietf.org/html/rfc5321#page-58)은 메시지 발신 시스템이 리턴 경로를 지정해서는 안된다. 예를 들어 내가 아는 한 Gmail을 사용 중이며 반송 경로가 사용자 이름과 다르면 Gmail이 사용자 이름으로 재설정합니다. – bernhardw