使用TLS从DELPHI(Indy)使用Gmail发送SMTP
我使用INDY在端口25上使用SMTP客户端发送电子邮件,没有问题 现在我需要使用Gmail帐户发送电子邮件,为此我需要使用TLS 谁能提供一个简单的例子来说明如何做到这一点使用TLS从DELPHI(Indy)使用Gmail发送SMTP,delphi,email,smtp,indy,ssl,Delphi,Email,Smtp,Indy,Ssl,我使用INDY在端口25上使用SMTP客户端发送电子邮件,没有问题 现在我需要使用Gmail帐户发送电子邮件,为此我需要使用TLS 谁能提供一个简单的例子来说明如何做到这一点 谢谢此代码适用于GMail: begin IDSMTP1 := TIDSMTP.Create; IdSSLIOHandlerSocketOpenSSL1 := TIdSSLIOHandlerSocketOpenSSL.Create; try with IDSMTP1 do begin
谢谢此代码适用于GMail:
begin
IDSMTP1 := TIDSMTP.Create;
IdSSLIOHandlerSocketOpenSSL1 := TIdSSLIOHandlerSocketOpenSSL.Create;
try
with IDSMTP1 do
begin
Host := srvr.Host;
Port := srvr.Port;
if (srvr.needAuthentication = 'Y') then
AuthType := satDefault
else
AuthType := satNone;
IOHandler := IdSSLIOHandlerSocketOpenSSL1;
if (srvr.secureMode = 'Y') then
UseTLS := utUseRequireTLS
else
UseTLS := utNoTLSSupport;
Username := srvr.Username;
Password := srvr.Password;
end;
idMBHTML := TIdMessageBuilderHTML.Create;
Idmessage1 := TIDMessage.Create;
try
with idMBHTML do
begin
enc := TEncoding.Unicode;
HTML.LoadFromStream(FEmlMsg.MsgBody, enc);
for c := 0 to FEmlMsg.Attachmnts.Count - 1 do
Attachments.Add(FEmlMsg.Attachmnts[c]);
FillMessage(IDMessage1);
end;
with Idmessage1 do
begin
Subject := FEmlMsg.MsgSubject;
From.Address := FEmlMsg.FromAddress;
From.Name := FEmlMsg.FromName;
Recipients.EMailAddresses := FEmlMsg.RecipientAddress;
if FEmlMsg.ReceiptRecipientAddress <> '' then
ReceiptRecipient.Address := FEmlMsg.ReceiptRecipientAddress;
if FEmlMsg.ReceiptRecipientName <> '' then
ReceiptRecipient.Name := FEmlMsg.ReceiptRecipientName;
end;
with IDSMTP1 do
begin
if not Connected then
Connect;
Send(IdMessage1);
end;
finally
Idmessage1.Free;
idMBHTML.Free;
end;
finally
IDSMTP1.Free;
IdSSLIOHandlerSocketOpenSSL1.Free;
end;
end;
开始
IDSMTP1:=tidstp.Create;
IdSSLIOHandlerSocketOpenSSL1:=TIdSSLIOHandlerSocketOpenSSL.Create;
尝试
使用IDSMTP1 do
开始
主机:=srvr.Host;
端口:=srvr.Port;
如果(srvr.needAuthentication='Y'),则
AuthType:=默认值
其他的
AuthType:=satNone;
IOHandler:=IdSSLIOHandlerSocketOpenSSL1;
如果(srvr.secureMode='Y'),则
UseTLS:=utUseRequireTLS
其他的
UseTLS:=utNoTLSSupport;
用户名:=srvr.Username;
密码:=srvr.Password;
结束;
idMBHTML:=TIdMessageBuilderHTML.Create;
Idmessage1:=TIDMessage.Create;
尝试
用idMBHTML做什么
开始
enc:=TEncoding.Unicode;
HTML.LoadFromStream(FEmlMsg.MsgBody,enc);
对于c:=0到FEmlMsg.attachments.Count-1 do
附件。添加(FEmlMsg.附件[c]);
FillMessage(IDMessage1);
结束;
用Idmessage1做什么
开始
主题:=FEmlMsg.MsgSubject;
From.Address:=FEmlMsg.FromAddress;
From.Name:=FEmlMsg.FromName;
Recipients.EMailAddresses:=FEmlMsg.RecipientAddress;
如果FEmlMsg.ReceiptRecipientAddress为“”,则
ReceiptRecipient.Address:=FEmlMsg.ReceiptRecipientAddress;
如果FEmlMsg.ReceiptRecipientName为“”,则
ReceiptRecipient.Name:=FEmlMsg.ReceiptRecipientName;
结束;
使用IDSMTP1 do
开始
如果没有连接,那么
连接
发送(IdMessage1);
结束;
最后
Idmessage1.免费;
idMBHTML.Free;
结束;
最后
IDSMTP1.免费;
IdSSLIOHandlerSocketOpenSSL1.免费;
结束;
结束;
您需要SSL dll才能使idssloHandler正常工作
有信息在
它将你重定向到
您可以下载一个适合您的平台的软件包,然后在应用程序中包含两个DLL。我本人使用这两个DLL和印第组件通过电子邮件发送邮件超过2年。唯一的问题是发送速度很慢。您没有说您使用的是哪个版本的Indy。 要使用TSL(Hotmail/Gmail中的最后一次安全更改),您需要使用Indy 10 看 实际上,您可以使用此配置使用GMail发送邮件,并且它工作正常:
- MailServer=smtp.gmail.com
- 端口服务器=465
- FromText=account@gmail.com(与邮件相同)
- SSLMethod=sslvTLSv1
WhichFailedToLoad()
函数来确定OpenSSL的哪些部分未能加载。正如Remy上面提到的,您必须将OpenSSL DLL文件与应用程序一起包含。它们应该与应用程序可执行文件位于同一文件夹中,或者应该位于系统路径中(例如System32文件夹)。您可以从Indy网站下载最新文件。