delphi10使用idsmtp与idmessage连接QQ邮箱进行邮件发送问题
大家好,我目前使用idsmtp与idmessage发送不了邮件
QQ也开通了POP3/SMTP服务
目前QQ的密码框要求输入“授权码”进行验证
核心代码如下,请高手帮我找找原因,或给我一些能够连接QQ邮箱使用的核心代码,谢谢。
//Host1 SMTP服务器/Port1端口号/ssl1 SSL/username1邮箱帐号/Password1邮箱密码
function email_connect(Host1:string;Port1:integer;ssl1:string;username1:string;Password1:string):Boolean;
//发送邮件 from_adrss发出邮箱帐号/to_adrss收邮件帐号/file_name附件路径/msgMemo邮件内容/str_zt邮件主题
function SendEMail(from_adrss:string;to_adrss:string;file_name:string;msgMemo:Tmemo;str_zt:string):Boolean;
procedure email_disconnect;
implementation
var
idsmtp1:TIdSMTP;
IdAntiFreeze1:TIdAntiFreeze;
idmessage1:TIdMessage;
IdSSLIOHandlerSocketOpenSSL1: TIdSSLIOHandlerSocketOpenSSL;
//Host1 SMTP服务器/Port1端口号/ssl1 SSL/username1邮箱帐号/Password1邮箱密码
function email_connect(Host1:string;Port1:integer;ssl1:string;username1:string;Password1:string):Boolean;
begin
try
IdAntiFreeze1:=TIdAntiFreeze.Create(nil);
idsmtp1:=TidSMTP.Create(nil);
idmessage1:=TIdMessage.Create(nil);
IdSSLIOHandlerSocketOpenSSL1:=TIdSSLIOHandlerSocketOpenSSL.Create(nil);
idsmtp1.Host:=Host1;
idsmtp1.Port:=Port1;
idsmtp1.username:=username1;
idsmtp1.Password:=Password1;
if ssl1='Y' then
begin
IdSSLIOHandlerSocketOpenSSL1.SSLOptions.Method:=sslvSSLv3;
IdSMTP1.IOHandler:= IdSSLIOHandlerSocketOpenSSL1;
end;
idsmtp1.Connect;
Result:=True;
except
Result:=False;
end;
end;
procedure email_disconnect;
begin
try
idsmtp1.Disconnect;
IdAntiFreeze1.Free;
idsmtp1.Free;
idmessage1.Free;
IdSSLIOHandlerSocketOpenSSL1.Free;
except
end;
end;
//发送邮件 from_adrss发出邮箱帐号/to_adrss收邮件帐号/file_name附件路径/msgMemo邮件内容/str_zt邮件主题
function SendEMail(from_adrss:string;to_adrss:string;file_name:string;msgMemo:Tmemo;str_zt:string):Boolean;
begin
try
//清空附件
idmessage1.MessageParts.Clear;
//添加附件
TIdAttachmentFile.Create(idmessage1.MessageParts,file_name);
idmessage1.body.Clear;
idmessage1.Subject:=str_zt;
idmessage1.CharSet:='gb2312';
idmessage1.Body.Assign(msgMemo.lines);
idmessage1.From.address:=from_adrss;
idmessage1.Recipients.EMailAddresses:=to_adrss;
idsmtp1.Authenticate;
idsmtp1.Send(idmessage1);
Result:=True;
except
Result:=False;
end;
end;
执行代码如下:
try
if not sp_mail.email_connect('smtp.qq.com',465,'Y','123456789@qq.com','nhcnuddxofibbjjb') then
begin
ShowMessage('邮箱服务器连接失败!');
exit;
end;
if not SendEMail('123456789@qq.com','55555@qq.com','d:\c.sql',memo1,'主题') then
begin
ShowMessage('发送失败!');
exit;
end;
ShowMessage('发送成功!');
finally
sp_mail.email_disconnect;
end;