发送邮件用什么控件?能不能直接填写邮箱地址、邮件标题和内容就可以调用控件方法发送出去的,在任意机子上?

解决方案 »

  1.   

    控件里面搜索smtp控件
      

  2.   

    https://blog.csdn.net/zhouky1993/article/details/60953892
      

  3.   

    把TIdSMTP->Host设置为收件人的邮件服务器的主机即可,可以用Indy的DNS解析组件获取
      

  4.   


    网上也有这么说的,相当于绕过发件人的SMTP服务器,直接到收件人的SMTP服务器,不过是Python的代码。我有空试下。
      

  5.   


    我找了一个老帖子的代码,不过差别有点大:
    https://bbs.csdn.net/topics/20453816老概有成功的代码吗?能直接发到qq邮箱或者163邮箱都可以的。
      

  6.   


    我连接 mail.163.com ,出现:
    Socket Error # 10061
    Connection refused.
    不知道什么原因?
      

  7.   


    我连接 mail.163.com ,出现:
    Socket Error # 10061
    Connection refused.
    不知道什么原因?
    很多年不玩发邮件了,因为历史原因(当年最方便开发垃圾邮件工具的就是Delphi),所以现在无法用Delphi搞发邮件工具也正常,因为人家服务器就是禁止你Delphi过来连接。
    我记得早年的时候,要修改id控件底层的一段代码,好像是邮件通讯握手协议什么的,让服务器不认为是IdSmtp控件过来连接,而且你的情况需要再测试一下,看具体是什么原因连不上163。
    比如QQ邮箱和其他的邮箱都正常,就只是163连接不正常,那就是人家和协Delphi;如果都连不上,那就是配置有问题。
      

  8.   


    我连接 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消息循环自己捕捉异常,这样可以显示异常原因。
      

  9.   

    问个题外的,SMTP有关的HELO name是啥,英文缩写什么的?
      

  10.   

    就是hello,握手命令,把自己的域名告诉接收者
      

  11.   


    好像还有一个EHLO命令的?
      

  12.   

    qq的邮箱,要在邮箱设置里面启用smtp服务才能发送邮件,163的也是类似。另外qq邮箱的smtp端口不是默认的,要设置成qq邮箱推荐的端口。你网上搜下看看。
      

  13.   


    163的邮箱,我启用了smtp,现在连接没问题了,发送部分出错:mail from must equal authorized user我代码:
    IdMessage1->From->Name=IdSMTP1->Username;
    不知道啥问题了?
      

  14.   

    用:
    IdMessage1->From->Address=IdSMTP1->Username;
    IdMessage1->Subject=Edit1->Text;
    // IdMessage1->Body->Assign(Memo1->Lines);
        IdMessage1->Body->Text=Memo1->Text;
    邮件发送成功了,但是win10下收到邮件内容乱码,全是
    ???????
    ?????
    而标题显示正常。不知道是啥问题?
      

  15.   

    IdMessage1->CharSet="GBK";
      

  16.   

    不知道你自己是否会写socket,会写的话,可以百度RFC(里面有多方面的协议标准文档,都是英文的),再在rfc网站搜索smtp有详细介绍。祝好运。
      

  17.   


    那不是造轮子吗
    这还是最简单的呢!
    smtp 还需要扩展协议,如加密的时候。
    如果你只是简单发邮件那就找控件,或者搜些简易代码,要是以后会用到加密发送,那还是自己造吧。网上搜些简易发送邮件代码,对照SMTP协议看一下,你会发现很简单的!
      

  18.   


    那不是造轮子吗
    这还是最简单的呢!
    smtp 还需要扩展协议,如加密的时候。
    如果你只是简单发邮件那就找控件,或者搜些简易代码,要是以后会用到加密发送,那还是自己造吧。网上搜些简易发送邮件代码,对照SMTP协议看一下,你会发现很简单的!我现在用Indy组件可以发送了。
      

  19.   

    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;