gpt4 book ai didi

delphi - 中继邮件时,我可以将我的服务器 SSL 证书附加到 TIdSMTPRelay 组件吗

转载 作者:太空宇宙 更新时间:2023-11-03 13:01:05 24 4
gpt4 key购买 nike

我想知道在 indy 中使用 TIdSMTPRelay 组件中继邮件时是否可以使用我的服务器证书。这是我的代码中的邮件中继部分的样子:

procedure TMyForm.SMTPServerMsgReceive(ASender: TIdSMTPServerContext; AMsg : TStream; 
var LAction: TIdDataReply);
begin
//The AMsg (TStream) is being transformed to MsgDecode (TIdMessage) and
// all relay recipients to RelayRecipients (TIdEMailAddressList) using
// [http://stackoverflow.com/questions/8499524/using-indy-smtpserver]

// SSLRelayHandler is a TIdSSLIOHandlerSocketOpenSsl indy component and SMTPRelay is
// a TIdSMTPRelay indy component
SMTPRelay.DNSServer := myDNSServer;
SSLRelayHandler.SSLOptions.Method := sslvSSLv23;
SSLRelayHandler.SSLOptions.KeyFile := myMailServerKey;
SSLRelayHandler.SSLOptions.CertFile := myMailServerCert;
SSLRelayHandler.SSLOptions.RootCertFile := myMailServerRootCert;
SMTPRelay.IOHandler := SSLRelayHandler;
SMTPRelay.SSLOptions.SSLSupport := SupportSSL;
try
SMTPRelay.Send(MsgDecode, RelayRecipients);
except on e : Exception do
end;
end;

有时邮件永远不会发送,有时它会发送但会转到垃圾邮件部分 (yahoo) 尽管我正在发出 STARTTLS 命令感谢附加的 TIdSSLIOHandlerSocketOpenSSL到我的 TIdSMTPRelay。我可以连接到另一个邮件服务器的 SMTPS 端口 465 或者 TIdSMTPRelay 组件只能发送到端口 25 吗?有关详细信息,这是与雅虎的通信方式:

Stat Connected.
Recv 23.10.2014 ?. 15:32:15: 220 mta1418.mail.gq1.yahoo.com ESMTP ready<EOL>
Sent 23.10.2014 ?. 15:32:15: EHLO mail.mydomain.com<EOL>
Recv 23.10.2014 ?. 15:32:15: 250-mta1418.mail.gq1.yahoo.com<EOL>250-PIPELINING<EOL>250-SIZE 41943040<EOL>250-8BITMIME<EOL>250 STARTTLS<EOL>
Sent 23.10.2014 ?. 15:32:15: STARTTLS<EOL>
Recv 23.10.2014 ?. 15:32:15: 220 Start TLS<EOL>
Sent 23.10.2014 ?. 15:32:16: EHLO mail.mydomain.com<EOL>
Recv 23.10.2014 ?. 15:32:16: 250-mta1418.mail.gq1.yahoo.com<EOL>250-PIPELINING<EOL>250-SIZE 41943040<EOL>250 8BITMIME<EOL>
Sent 23.10.2014 ?. 15:32:16: MAIL FROM:<user229@mail.mydomain.com><EOL>
Recv 23.10.2014 ?. 15:32:16: 250 sender <user229@mail.mydomain.com> ok<EOL>
Sent 23.10.2014 ?. 15:32:16: RCPT TO:<test_user_mail@yahoo.com><EOL>
Recv 23.10.2014 ?. 15:32:16: 250 recipient <test_user_mail@yahoo.com> ok<EOL>
Sent 23.10.2014 ?. 15:32:16: DATA<EOL>
Recv 23.10.2014 ?. 15:32:17: 354 go ahead<EOL>
Sent 23.10.2014 ?. 15:32:17: From: "user229@mail.mydomain.com" <user229@mail.mydomain.com> <EOL>Subject: =?UTF-8?B?0JfQsNCz0LvQsNCy0LjQtTIy?=<EOL>To: test_user_mail@yahoo.com<EOL>Date: Thu, 23 Oct 2014 15:32:17 +0300<EOL>
Sent 23.10.2014 ?. 15:32:17: <EOL>
Sent 23.10.2014 ?. 15:32:17: body of the mail here<EOL>
Sent 23.10.2014 ?. 15:32:17: <EOL>
Sent 23.10.2014 ?. 15:32:17: .<EOL>
Recv 23.10.2014 ?. 15:32:18: 250 ok dirdel<EOL>
Sent 23.10.2014 ?. 15:32:18: QUIT<EOL>
Recv 23.10.2014 ?. 15:32:18: 221 mta1418.mail.gq1.yahoo.com<EOL>
Stat Disconnected.

最佳答案

TIdSMTPRelay 可以使用其他端口。您应该将 Port 属性设置为其默认值 (25),以便它可以根据其内部管理 SSL/TLS 连接的方式在 25 和 465 之间切换。

SSLOptions 属性控制 TIdSMTPRelay 如何管理其 SSL/TLS 连接。 SSLOptions.SSLSupport 可以设置为 NoSSLSupportSSLRequireSSL,以及 SSLOptions.TryImplicitTLS 可以设置为 True 或 False。请参阅 TIdSMTPRelay.Connect() 中的实现。

SSLOptions.TryImplicitTLS 为真(端口 465)时,Send() 将在连接时尝试使用 UseTLS=utImplicitTLS。这意味着一旦连接套接字,就会启动 SSL/TLS 握手。

如果失败,或者如果 SSLOptions.TryImplicitTLS 为假(端口 25 和 587),Send() 将使用 UseTLS=utNoTLSSupportUseTLS=utUseExplicitTLSUseTLS= utUseRequireTLS 取决于 SSLOptions.SSLSupport 的值:

NoSSL:SMTP session 将不加密。

SupportSSL:SMTP session 将以未加密的方式启动,然后 STARTTLS 仅在受支持时才会发送到 SMTP 服务器,否则 SMTP session 将以未加密的方式继续。如果 SSL/TLS 握手失败,将引发异常。

RequireSSL:SMTP session 将在未加密的情况下启动,然后 STARTTLS 将被发送到 SMTP 服务器(如果支持),否则 SMTP session 将关闭并引发异常.如果 SSL/TLS 握手失败,将引发异常。

关于delphi - 中继邮件时,我可以将我的服务器 SSL 证书附加到 TIdSMTPRelay 组件吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26529051/

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