procedure TfrmContactUs.btnSendMailClick(Sender: TObject); begin if edtMailTo.Text <> '' then if (Pos('@', edtMailTo.Text) = 0) or (Pos('.', edtMailTo.Text) = 0) then begin ShowMessage('收件人邮箱格式错误'); Exit; end; if edtMailFrom.Text = '' then begin ShowMessage('发件人不能为空'); Exit; end; if edtMailSubject.Text = '' then begin ShowMessage('邮件主题不能为空'); Exit; end; oMsg.From.Address := oSMTP.Username; if edtMailTo.Text <> '' then oMsg.Recipients.EMailAddresses := edtMailTo.Text else oMsg.Recipients.EMailAddresses := oSMTP.Username; oMsg.Subject := edtMailSubject.Text; oMsg.Body.Text := mmoMailBody.Text + #13 + #13 + '发件人:' + edtMailFrom.Text; try if not oSMTP.Connected then oSMTP.Connect; oSMTP.Send(oMsg); ShowMessage('邮件发送成功'); except on E: Exception do ShowMessage('ERROR: ' + E.Message); end; end;
网上也有这么说的,相当于绕过发件人的SMTP服务器,直接到收件人的SMTP服务器,不过是Python的代码。我有空试下。
我找了一个老帖子的代码,不过差别有点大:
https://bbs.csdn.net/topics/20453816老概有成功的代码吗?能直接发到qq邮箱或者163邮箱都可以的。
我连接 mail.163.com ,出现:
Socket Error # 10061
Connection refused.
不知道什么原因?
我连接 mail.163.com ,出现:
Socket Error # 10061
Connection refused.
不知道什么原因?
很多年不玩发邮件了,因为历史原因(当年最方便开发垃圾邮件工具的就是Delphi),所以现在无法用Delphi搞发邮件工具也正常,因为人家服务器就是禁止你Delphi过来连接。
我记得早年的时候,要修改id控件底层的一段代码,好像是邮件通讯握手协议什么的,让服务器不认为是IdSmtp控件过来连接,而且你的情况需要再测试一下,看具体是什么原因连不上163。
比如QQ邮箱和其他的邮箱都正常,就只是163连接不正常,那就是人家和协Delphi;如果都连不上,那就是配置有问题。
我连接 mail.163.com ,出现:
Socket Error # 10061
Connection refused.
不知道什么原因?
很多年不玩发邮件了,因为历史原因(当年最方便开发垃圾邮件工具的就是Delphi),所以现在无法用Delphi搞发邮件工具也正常,因为人家服务器就是禁止你Delphi过来连接。
我记得早年的时候,要修改id控件底层的一段代码,好像是邮件通讯握手协议什么的,让服务器不认为是IdSmtp控件过来连接,而且你的情况需要再测试一下,看具体是什么原因连不上163。
比如QQ邮箱和其他的邮箱都正常,就只是163连接不正常,那就是人家和协Delphi;如果都连不上,那就是配置有问题。我参考了链接里的代码,Host为mail.163.com或者mail.qq.com都连接不上,用户名和密码应该是对的,我去掉了try语句,让上层的Application消息循环自己捕捉异常,这样可以显示异常原因。
好像还有一个EHLO命令的?
163的邮箱,我启用了smtp,现在连接没问题了,发送部分出错:mail from must equal authorized user我代码:
IdMessage1->From->Name=IdSMTP1->Username;
不知道啥问题了?
IdMessage1->From->Address=IdSMTP1->Username;
IdMessage1->Subject=Edit1->Text;
// IdMessage1->Body->Assign(Memo1->Lines);
IdMessage1->Body->Text=Memo1->Text;
邮件发送成功了,但是win10下收到邮件内容乱码,全是
???????
?????
而标题显示正常。不知道是啥问题?
那不是造轮子吗
这还是最简单的呢!
smtp 还需要扩展协议,如加密的时候。
如果你只是简单发邮件那就找控件,或者搜些简易代码,要是以后会用到加密发送,那还是自己造吧。网上搜些简易发送邮件代码,对照SMTP协议看一下,你会发现很简单的!
那不是造轮子吗
这还是最简单的呢!
smtp 还需要扩展协议,如加密的时候。
如果你只是简单发邮件那就找控件,或者搜些简易代码,要是以后会用到加密发送,那还是自己造吧。网上搜些简易发送邮件代码,对照SMTP协议看一下,你会发现很简单的!我现在用Indy组件可以发送了。
begin
if edtMailTo.Text <> '' then
if (Pos('@', edtMailTo.Text) = 0) or (Pos('.', edtMailTo.Text) = 0) then
begin
ShowMessage('收件人邮箱格式错误');
Exit;
end; if edtMailFrom.Text = '' then
begin
ShowMessage('发件人不能为空');
Exit;
end; if edtMailSubject.Text = '' then
begin
ShowMessage('邮件主题不能为空');
Exit;
end; oMsg.From.Address := oSMTP.Username;
if edtMailTo.Text <> '' then
oMsg.Recipients.EMailAddresses := edtMailTo.Text
else
oMsg.Recipients.EMailAddresses := oSMTP.Username;
oMsg.Subject := edtMailSubject.Text;
oMsg.Body.Text := mmoMailBody.Text + #13 + #13 + '发件人:' + edtMailFrom.Text;
try
if not oSMTP.Connected then
oSMTP.Connect;
oSMTP.Send(oMsg);
ShowMessage('邮件发送成功');
except
on E: Exception do
ShowMessage('ERROR: ' + E.Message);
end;
end;