delphi10使用idsmtp与idmessage连接QQ邮箱进行邮件发送问题

qq47772369 2016-07-14 10:02:49
大家好,我目前使用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;
...全文
4282 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
tkggvbr 2016-12-30
  • 打赏
  • 举报
回复
忘记了说明需要使用2个配套的dll文件:libeay32.dll、ssleay32.dll
tkggvbr 2016-12-30
  • 打赏
  • 举报
回复
if ssl1='Y' then//不要 IdSSLIOHandlerSocketOpenSSL1.SSLOptions.Method:=sslvSSLv1;//不是sslvSSLv3 idsmtp1.UseTLS := utUseImplicitTLS;//要设置 idmessage1.CharSet:='gb2312';// 这句不能解决乱码的问题 我的制作成功了。环境delphi 2010+win 7 有需要的朋友请联系QQ:443404123
tkggvbr 2016-12-04
  • 打赏
  • 举报
回复
function email_connect(……) …… if not sp_mail.email_connect(……) 前后不对
tkggvbr 2016-12-04
  • 打赏
  • 举报
回复
顶 顶一下你啊

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧