{"id":81,"date":"2007-08-22T11:45:24","date_gmt":"2007-08-22T03:45:24","guid":{"rendered":"http:\/\/www.2lin.net\/?p=81"},"modified":"2021-11-14T21:39:34","modified_gmt":"2021-11-14T13:39:34","slug":"81","status":"publish","type":"post","link":"https:\/\/2lin.top\/?p=81","title":{"rendered":"SMTP\u534f\u8bae"},"content":{"rendered":"<p>\u4e0d\u60f3\u7528Delphi\u7684Indy\u63a7\u4ef6.\u00a0 \u5b9e\u5728\u662fBUG\u592a\u591a, \u800c\u4e14\u5f15\u7528\u540e,\u4f60\u7684\u7a0b\u5e8f\u5bb9\u91cf\u5c06\u5927\u91cf\u589e\u52a0<br \/>\n\u5728\u8003\u8651\u4e4b\u540e\u51b3\u5b9a\u4f7f\u7528\u7eafwinsock\u6765\u5199\u4e00\u4e2a\u53d1\u90ae\u4ef6\u7684\u7c7b, \u5e76\u4e14\u652f\u6301\u53d1\u9001\u9644\u4ef6.<br \/>\n\u5728\u7f51\u4e0a\u627e\u5230smtp\u534f\u8bae\u4ecb\u7ecd.,\u5e76\u4e14\u81ea\u5df1\u7528foxmail\u53d1\u9001\u4e00\u5c01\u5e26\u9644\u4ef6\u7684\u90ae\u4ef6<br \/>\n\u6293\u5305\u5206\u6790\u540e \u5199\u4e86\u4e00\u4e2a\u53d1\u9001\u90ae\u4ef6\u7684\u7c7b.\u00a0 \u53ef\u80fd\u6709\u4e9bBUG \u8bf7\u5927\u5bb6\u6307\u51fa<br \/>\n\u8c03\u7528\u65b9\u6cd5<\/p>\n<pre class=\"brush:delphi;toolbar:false\">uses\u00a0uMail;\r\nvar\r\n\u00a0Mail\u00a0:\u00a0TMail;\r\nbegin\r\n\u00a0\u00a0Mail\u00a0:=\u00a0TMail.Create;\r\n\u00a0\u00a0try\r\n\u00a0\u00a0\u00a0\u00a0Mail.Host\u00a0:=\u00a0'alin.vicp.cc';\r\n\u00a0\u00a0\u00a0\u00a0Mail.FromAddr\u00a0:=\u00a0\r\n'test@alin.vicp.cc'\r\n;\r\n\u00a0\u00a0\u00a0\u00a0Mail.Password\u00a0:=\u00a0'111111';\r\n\u00a0\u00a0\u00a0\u00a0Mail.ToAddr\u00a0:=\u00a0\r\n'test@alin.vicp.cc'\r\n;\r\n\u00a0\u00a0\u00a0\u00a0Mail.Subject\u00a0:=\u00a0'\u6d4b\u8bd5\u53d1\u9001\u7684\u90ae\u4ef6!';\r\n\u00a0\u00a0\u00a0\u00a0Mail.Body\u00a0:=\u00a0'\u8fd9\u662f\u4e00\u5c01\u6d4b\u8bd5\u7684\u90ae\u4ef6!';\r\n\u00a0\u00a0\u00a0\u00a0Mail.Attaches.Add('c:\\test.rar');\r\n\u00a0\u00a0\u00a0\u00a0Mail.Attaches.Add('c:\\test1.rar');\r\n\u00a0\u00a0\u00a0\u00a0if\u00a0Mail.Send\u00a0then\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0ShowMessage('Send\u00a0Ok')\r\n\u00a0\u00a0\u00a0\u00a0else\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0ShowMessage('Send\u00a0Failed'\u00a0+\u00a0#13\u00a0+\u00a0Mail.ErrMsg);\r\n\u00a0\u00a0finally\r\n\u00a0\u00a0\u00a0\u00a0Mail.Free;\r\n\u00a0\u00a0end;\r\nend;<\/pre>\n<p><a href=\"\/soft\/mail.rar\">\u6e90\u7801\u4e0b\u8f7d<\/a><\/p>\n<pre class=\"brush:delphi;toolbar:false\">unit\u00a0uMail;\r\ninterface\r\nuses\u00a0WinSock,\u00a0Windows,\u00a0SysUtils,\u00a0Classes,\u00a0Math;\r\nconst\r\n\u00a0CRLF\u00a0:string\u00a0=\u00a0#13\u00a0+\u00a0#10;\r\ntype\r\n\u00a0\u00a0TMail\u00a0=\u00a0class\r\n\u00a0\u00a0\u00a0\u00a0private\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0FFromAddr\u00a0:\u00a0string;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0FToAddr\u00a0:\u00a0string;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0FSubject\u00a0:\u00a0string;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0FBody\u00a0:\u00a0string;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0FErrMsg\u00a0:\u00a0string;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0FHost\u00a0:\u00a0string;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0FAttaches\u00a0:\u00a0TStrings;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0FSendData\u00a0:\u00a0TStrings;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0FPassword\u00a0:\u00a0string;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0function\u00a0chunklenSplit(Value\u00a0:\u00a0string):\u00a0string;\r\n\u00a0\u00a0\u00a0\u00a0function\u00a0GetSendData:\u00a0string;\r\n\u00a0\u00a0\u00a0\u00a0protected\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0procedure\u00a0InitSendData;\r\n\u00a0\u00a0\u00a0\u00a0public\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0constructor\u00a0Create;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0destructor\u00a0Destory;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0property\u00a0Host\u00a0:\u00a0string\u00a0read\u00a0FHost\u00a0write\u00a0FHost;\u00a0\/\/\u4e3b\u673a\u540d\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0property\u00a0FromAddr\u00a0:\u00a0string\u00a0read\u00a0FFromAddr\u00a0write\u00a0FFromAddr;\u00a0\/\/\u6765\u81ea\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0property\u00a0ToAddr\u00a0:\u00a0string\u00a0read\u00a0FToAddr\u00a0write\u00a0FToAddr;\/\/\u53d1\u9001\u5230\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0property\u00a0Subject\u00a0:\u00a0string\u00a0read\u00a0FSubject\u00a0write\u00a0FSubject;\/\/\u6807\u9898\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0property\u00a0Body\u00a0:\u00a0string\u00a0read\u00a0FBody\u00a0write\u00a0FBody;\/\/\u5185\u5bb9\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0property\u00a0Attaches\u00a0:\u00a0TStrings\u00a0read\u00a0FAttaches\u00a0write\u00a0FAttaches;\/\/\u9644\u4ef6\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0property\u00a0ErrMsg\u00a0:\u00a0string\u00a0read\u00a0FErrMsg;\/\/\u9519\u8bef\u4fe1\u606f\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0property\u00a0SendData\u00a0:\u00a0string\u00a0read\u00a0GetSendData;\/\/\u90ae\u4ef6\u53d1\u9001\u7684\u8be6\u7ec6\u5185\u5bb9\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0property\u00a0Password\u00a0:\u00a0string\u00a0read\u00a0FPassword\u00a0write\u00a0FPassword;\/\/\u5bc6\u7801\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0function\u00a0Send\u00a0:\u00a0boolean;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\r\n\u00a0\u00a0end;\r\nimplementation\r\nuses\u00a0Base64;\r\n{\u00a0TMail\u00a0}\r\nfunction\u00a0TMail.chunklenSplit(Value:\u00a0string):\u00a0string;\r\nvar\r\n\u00a0\u00a0I,len\u00a0:\u00a0integer;\r\nbegin\r\n\u00a0\u00a0Result\u00a0:=\u00a0'';\r\n\u00a0\u00a0for\u00a0i\u00a0:=\u00a00\u00a0to\u00a0floor(Length(Value)\u00a0\/\u00a076)\u00a0do\r\n\u00a0\u00a0begin\r\n\u00a0\u00a0\u00a0\u00a0if\u00a0i\u00a0*\u00a076\u00a0+\u00a077\u00a0&gt;\u00a0Length(Value)\u00a0then\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0len\u00a0:=\u00a0Length(Value)\u00a0-\u00a0(i-1)\u00a0*\u00a076\u00a0+\u00a01\r\n\u00a0\u00a0\u00a0\u00a0else\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0len\u00a0:=\u00a076;\r\n\u00a0\u00a0\u00a0\u00a0Result\u00a0:=\u00a0Result\u00a0+\u00a0Copy(Value,i\u00a0*\u00a076\u00a0+\u00a01,len)\u00a0+\u00a0CRLF;\r\n\u00a0\u00a0end;\u00a0\r\nend;\r\nconstructor\u00a0TMail.Create;\r\nvar\r\n\u00a0\u00a0WSData:\u00a0TWSAData;\r\nbegin\r\n\u00a0\u00a0WSAstartup(1,\u00a0WSData);\r\n\u00a0\u00a0FAttaches\u00a0:=\u00a0TStringList.Create;\r\n\u00a0\u00a0FSendData\u00a0:=\u00a0TStringList.Create;\r\nend;\r\ndestructor\u00a0TMail.Destory;\r\nbegin\r\n\u00a0\u00a0FAttaches.Free;\r\n\u00a0\u00a0FSendData.Free;\r\n\u00a0\u00a0WSACleanup;\r\nend;\r\nfunction\u00a0TMail.GetSendData:\u00a0string;\r\nbegin\r\n\u00a0\u00a0Result\u00a0:=\u00a0FSendData.Text;\r\nend;\r\nprocedure\u00a0TMail.InitSendData;\r\nvar\r\n\u00a0\u00a0guid\u00a0:\u00a0TGUID;\r\n\u00a0\u00a0fs\u00a0:\u00a0TFileStream;\r\n\u00a0\u00a0fbuf\u00a0:\u00a0array\u00a0of\u00a0byte;\r\n\u00a0\u00a0boundary,fn,sbuf\u00a0:\u00a0string;\r\n\u00a0\u00a0i\u00a0:\u00a0integer;\r\nbegin\r\n\u00a0\u00a0FSendData.Clear;\r\n\u00a0\u00a0CreateGUID(guid);\r\n\u00a0\u00a0boundary\u00a0:=\u00a0Copy(GuidToString(Guid),2,Length(GuidToString(Guid))-2);\r\n\u00a0\u00a0\r\n\u00a0\u00a0FSendData.Add('From:\u00a0\"'+FFromAddr+'\"\u00a0&lt;'+FFromAddr+'&gt;');\r\n\u00a0\u00a0FSendData.Add('To:\u00a0\"'+FToAddr+'\"');\r\n\u00a0\u00a0FSendData.Add('Subject:\u00a0'+\u00a0FSubject);\r\n\u00a0\u00a0FSendData.Add('MIME-Version:\u00a01.0');\r\n\u00a0\u00a0FSendData.Add('Content-Type:\u00a0multipart\/mixed;');\r\n\u00a0\u00a0FSendData.Add(#9\u00a0+\u00a0'boundary=\"=='+boundary+'\"'\u00a0+\u00a0CRLF);\r\n\u00a0\u00a0FSendData.Add('This\u00a0is\u00a0a\u00a0MIME\u00a0encoded\u00a0message.'\u00a0+\u00a0CRLF);\r\n\u00a0\u00a0FSendData.Add('--=='+boundary);\r\n\u00a0\u00a0FSendData.Add('Content-Type:\u00a0text\/plain;');\r\n\u00a0\u00a0FSendData.Add(#9+'charset=\"gb2312\"');\r\n\u00a0\u00a0FSendData.Add('Content-Transfer-Encoding:\u00a0base64'+\u00a0CRLF);\r\n\u00a0\u00a0FSendData.Add(Base64EncodeStr(FBody)\u00a0+\u00a0CRLF);\r\n\u00a0\u00a0for\u00a0i\u00a0:=\u00a00\u00a0to\u00a0FAttaches.Count\u00a0-\u00a01\u00a0do\r\n\u00a0\u00a0begin\r\n\u00a0\u00a0\u00a0if\u00a0FileExists(FAttaches[i])\u00a0then\r\n\u00a0\u00a0\u00a0begin\r\n\u00a0\u00a0\u00a0\u00a0\u00a0fn\u00a0:=\u00a0ExtractFileName(FAttaches[i]);\r\n\u00a0\u00a0\u00a0\u00a0\u00a0FSendData.Add('--=='\u00a0+\u00a0boundary);\r\n\u00a0\u00a0\u00a0\u00a0\u00a0FSendData.Add('Content-Type:\u00a0application\/octet-stream;');\r\n\u00a0\u00a0\u00a0\u00a0\u00a0FSendData.Add(#9\u00a0+\u00a0'name=\"'+fn+'\"');\r\n\u00a0\u00a0\u00a0\u00a0\u00a0FSendData.Add('Content-Transfer-Encoding:\u00a0base64');\r\n\u00a0\u00a0\u00a0\u00a0\u00a0FSendData.Add('Content-Disposition:\u00a0attachment;');\r\n\u00a0\u00a0\u00a0\u00a0\u00a0FSendData.Add(#9+'filename=\"'+fn+'\"'\u00a0+\u00a0CRLF);\r\n\u00a0\u00a0\u00a0\u00a0\u00a0fs\u00a0:=\u00a0TFileStream.Create(FAttaches[i],\u00a0fmShareDenyNone);\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0try\u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0SetLength(fbuf,fs.Size);\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0SetLength(sbuf,\u00a0((fs.Size+2)\u00a0div\u00a03)*4);\u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0fs.ReadBuffer(fbuf[0],\u00a0fs.Size);\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Base64Encode(fbuf,@sbuf[1],fs.Size);\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0sbuf\u00a0:=\u00a0chunklenSplit(sbuf);\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0FSendData.Add(sbuf);\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0finally\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0fs.Free;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0end;\r\n\u00a0\u00a0\u00a0end;\r\n\u00a0\u00a0end;\r\n\u00a0\u00a0FSendData.Add('--=='+boundary+'--'\u00a0+\u00a0CRLF\u00a0+\u00a0CRLF\u00a0+\u00a0'.');\r\nend;\r\nfunction\u00a0TMail.Send:\u00a0boolean;\r\nvar\r\n\u00a0\u00a0sock\u00a0:\u00a0TSocket;\r\n\u00a0\u00a0mhost\u00a0:\u00a0PHostEnt;\r\n\u00a0\u00a0maddr\u00a0:\u00a0TSockAddrIn;\r\n\u00a0\u00a0rbuf\u00a0:\u00a0array[0..255]\u00a0of\u00a0char;\r\n\u00a0\u00a0sbuf\u00a0:\u00a0string;\r\nbegin\r\n\u00a0\u00a0Result\u00a0:=\u00a0true;\r\n\u00a0\u00a0sock\u00a0:=\u00a0socket(AF_INET,\u00a0SOCK_STREAM,\u00a0IPPROTO_TCP);\r\n\u00a0\u00a0try\r\n\u00a0\u00a0\u00a0\u00a0if\u00a0sock\u00a0=\u00a0INVALID_SOCKET\u00a0then\r\n\u00a0\u00a0\u00a0\u00a0begin\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Result\u00a0:=\u00a0false;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0FErrMsg\u00a0:=\u00a0'\u521b\u5efaSocket\u5931\u8d25\uff01';\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Exit;\r\n\u00a0\u00a0\u00a0\u00a0end;\r\n\u00a0\u00a0\u00a0\u00a0mhost\u00a0:=\u00a0gethostbyname(pchar(FHost));\r\n\u00a0\u00a0\u00a0\u00a0if\u00a0mhost\u00a0=\u00a0nil\u00a0then\r\n\u00a0\u00a0\u00a0\u00a0begin\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Result\u00a0:=\u00a0false;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0FErrMsg\u00a0:=\u00a0'\u83b7\u53d6\u4e3b\u673a\u5730\u5740\u5931\u8d25\uff01';\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Exit;\r\n\u00a0\u00a0\u00a0\u00a0end;\r\n\u00a0\u00a0\u00a0\u00a0maddr.sin_family\u00a0:=\u00a0AF_INET;\r\n\u00a0\u00a0\u00a0\u00a0maddr.sin_port\u00a0:=\u00a0htons(25);\r\n\u00a0\u00a0\u00a0\u00a0maddr.sin_addr.S_addr\u00a0:=\u00a0Longint(PLongint(mhost^.h_addr_list^)^);;\r\n\u00a0\u00a0\u00a0\u00a0if\u00a0connect(sock,maddr,\u00a0sizeof(maddr))\u00a0&lt;\u00a00\u00a0then\r\n\u00a0\u00a0\u00a0\u00a0begin\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Result\u00a0:=\u00a0false;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0FErrMsg\u00a0:=\u00a0'\u94fe\u63a5\u4e3b\u673a\u5931\u8d25\uff01';\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Exit;\r\n\u00a0\u00a0\u00a0\u00a0end;\r\n\u00a0\u00a0\u00a0\u00a0recv(sock,\u00a0rbuf,\u00a0sizeof(rbuf),0);\r\n\u00a0\u00a0\u00a0\u00a0\/\/\u94fe\u63a5\u6210\u529f\r\n\u00a0\u00a0\u00a0\u00a0if\u00a0rbuf[0]\u00a0&lt;&gt;\u00a0'2'\u00a0then\r\n\u00a0\u00a0\u00a0\u00a0begin\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Result\u00a0:=\u00a0false;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0FErrMsg\u00a0:=\u00a0rbuf;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Exit;\r\n\u00a0\u00a0\u00a0\u00a0end;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/\u670d\u52a1\u5668\u6807\u8bc6\r\n\u00a0\u00a0\u00a0\u00a0sbuf\u00a0:=\u00a0'EHLO\u00a0'+\u00a0IntToStr(GetCurrentThreadID)\u00a0+\u00a0CRLF;\r\n\u00a0\u00a0\u00a0\u00a0winsock.send(sock,\u00a0sbuf[1],\u00a0Length(sbuf),0);\r\n\u00a0\u00a0\u00a0\u00a0recv(sock,\u00a0rbuf,\u00a0sizeof(rbuf),0);\r\n\u00a0\u00a0\u00a0\u00a0if\u00a0rbuf[0]\u00a0&lt;&gt;\u00a0'2'\u00a0then\r\n\u00a0\u00a0\u00a0\u00a0begin\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Result\u00a0:=\u00a0false;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0FErrMsg\u00a0:=\u00a0rbuf;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Exit;\r\n\u00a0\u00a0\u00a0\u00a0end;\r\n\u00a0\u00a0\u00a0\u00a0\/\/\u8bf7\u6c42\u9a8c\u8bc1\r\n\u00a0\u00a0\u00a0\u00a0sbuf\u00a0:=\u00a0'AUTH\u00a0LOGIN'+\u00a0CRLF;\r\n\u00a0\u00a0\u00a0\u00a0winsock.send(sock,\u00a0sbuf[1],\u00a0Length(sbuf),0);\r\n\u00a0\u00a0\u00a0\u00a0recv(sock,\u00a0rbuf,\u00a0sizeof(rbuf),0);\r\n\u00a0\u00a0\u00a0\u00a0if\u00a0rbuf[0]\u00a0&lt;&gt;\u00a0'3'\u00a0then\r\n\u00a0\u00a0\u00a0\u00a0begin\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Result\u00a0:=\u00a0false;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0FErrMsg\u00a0:=\u00a0rbuf;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Exit;\r\n\u00a0\u00a0\u00a0\u00a0end;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/\u53d1\u9001\u7528\u6237\u540d\r\n\u00a0\u00a0\u00a0\u00a0sbuf\u00a0:=\u00a0Base64EncodeStr(FFromAddr)+\u00a0CRLF;\r\n\u00a0\u00a0\u00a0\u00a0winsock.send(sock,\u00a0sbuf[1],\u00a0Length(sbuf),0);\r\n\u00a0\u00a0\u00a0\u00a0recv(sock,\u00a0rbuf,\u00a0sizeof(rbuf),0);\r\n\u00a0\u00a0\u00a0\u00a0if\u00a0rbuf[0]\u00a0&lt;&gt;\u00a0'3'\u00a0then\r\n\u00a0\u00a0\u00a0\u00a0begin\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Result\u00a0:=\u00a0false;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0FErrMsg\u00a0:=\u00a0rbuf;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Exit;\r\n\u00a0\u00a0\u00a0\u00a0end;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/\u53d1\u9001\u5bc6\u7801\u00a0\r\n\u00a0\u00a0\u00a0\u00a0sbuf\u00a0:=\u00a0Base64EncodeStr(FPassword)+\u00a0CRLF;\r\n\u00a0\u00a0\u00a0\u00a0winsock.send(sock,\u00a0sbuf[1],\u00a0Length(sbuf),0);\r\n\u00a0\u00a0\u00a0\u00a0recv(sock,\u00a0rbuf,\u00a0sizeof(rbuf),0);\r\n\u00a0\u00a0\u00a0\u00a0if\u00a0rbuf[0]\u00a0&lt;&gt;\u00a0'2'\u00a0then\r\n\u00a0\u00a0\u00a0\u00a0begin\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Result\u00a0:=\u00a0false;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0FErrMsg\u00a0:=\u00a0rbuf;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Exit;\r\n\u00a0\u00a0\u00a0\u00a0end;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/\u6765\u81ea\r\n\u00a0\u00a0\u00a0\u00a0sbuf\u00a0:=\u00a0'MAIL\u00a0FROM:\u00a0&lt;'+\u00a0FFromAddr\u00a0+'&gt;'+\u00a0CRLF;\r\n\u00a0\u00a0\u00a0\u00a0winsock.send(sock,\u00a0sbuf[1],\u00a0Length(sbuf),0);\r\n\u00a0\u00a0\u00a0\u00a0recv(sock,\u00a0rbuf,\u00a0sizeof(rbuf),0);\r\n\u00a0\u00a0\u00a0\u00a0if\u00a0rbuf[0]\u00a0&lt;&gt;\u00a0'2'\u00a0then\r\n\u00a0\u00a0\u00a0\u00a0begin\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Result\u00a0:=\u00a0false;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0FErrMsg\u00a0:=\u00a0rbuf;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Exit;\r\n\u00a0\u00a0\u00a0\u00a0end;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/\u53d1\u9001\u5230\u00a0\u00a0\r\n\u00a0\u00a0\u00a0\u00a0sbuf\u00a0:=\u00a0'RCPT\u00a0TO:\u00a0&lt;'+\u00a0FToAddr\u00a0+'&gt;'+\u00a0CRLF;\r\n\u00a0\u00a0\u00a0\u00a0winsock.send(sock,\u00a0sbuf[1],\u00a0Length(sbuf),0);\r\n\u00a0\u00a0\u00a0\u00a0recv(sock,\u00a0rbuf,\u00a0sizeof(rbuf),0);\r\n\u00a0\u00a0\u00a0\u00a0if\u00a0rbuf[0]\u00a0&lt;&gt;\u00a0'2'\u00a0then\r\n\u00a0\u00a0\u00a0\u00a0begin\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Result\u00a0:=\u00a0false;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0FErrMsg\u00a0:=\u00a0rbuf;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Exit;\r\n\u00a0\u00a0\u00a0\u00a0end;\r\n\u00a0\u00a0\u00a0\u00a0\/\/\u51c6\u5907\u53d1\u9001\u6570\u636e\r\n\u00a0\u00a0\u00a0\u00a0sbuf\u00a0:=\u00a0'DATA'+\u00a0CRLF;\r\n\u00a0\u00a0\u00a0\u00a0winsock.send(sock,\u00a0sbuf[1],\u00a0Length(sbuf),0);\r\n\u00a0\u00a0\u00a0\u00a0recv(sock,\u00a0rbuf,\u00a0sizeof(rbuf),0);\r\n\u00a0\u00a0\u00a0\u00a0if\u00a0(rbuf[0]\u00a0&lt;&gt;\u00a0'3')\u00a0or\u00a0(rbuf[1]\u00a0&lt;&gt;\u00a0'5')\u00a0then\r\n\u00a0\u00a0\u00a0\u00a0begin\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Result\u00a0:=\u00a0false;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0FErrMsg\u00a0:=\u00a0rbuf;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Exit;\r\n\u00a0\u00a0\u00a0\u00a0end;\r\n\u00a0\u00a0\u00a0\u00a0\/\/\u521d\u59cb\u5316\u9700\u8981\u53d1\u9001\u7684\u6570\u636e\r\n\u00a0\u00a0\u00a0\u00a0InitSendData;\r\n\u00a0\u00a0\u00a0\u00a0sbuf\u00a0:=\u00a0FSendData.Text;\r\n\u00a0\u00a0\u00a0\u00a0winsock.send(sock,\u00a0sbuf[1],\u00a0Length(sbuf),0);\r\n\u00a0\u00a0\u00a0\u00a0recv(sock,\u00a0rbuf,\u00a0sizeof(rbuf),0);\r\n\u00a0\u00a0\u00a0\u00a0if\u00a0rbuf[0]\u00a0&lt;&gt;\u00a0'2'\u00a0then\r\n\u00a0\u00a0\u00a0\u00a0begin\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Result\u00a0:=\u00a0false;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0FErrMsg\u00a0:=\u00a0rbuf;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Exit;\r\n\u00a0\u00a0\u00a0\u00a0end;\u00a0\r\n\u00a0\u00a0\u00a0\u00a0sbuf\u00a0:=\u00a0'QUIT'\u00a0+\u00a0CRLF\u00a0;\r\n\u00a0\u00a0\u00a0\u00a0winsock.send(sock,\u00a0sbuf[1],\u00a0Length(sbuf),0);\r\n\u00a0\u00a0\u00a0\u00a0recv(sock,\u00a0rbuf,\u00a0sizeof(rbuf),0);\r\n\u00a0\u00a0finally\r\n\u00a0\u00a0\u00a0\u00a0CloseSocket(sock);\r\n\u00a0\u00a0end;\r\nend;\r\nend.<\/pre>\n<p><span style=\"font-family: \u5b8b\u4f53;\">&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br \/>\n\u3010\u7248\u6743\u58f0\u660e\u3011:\u00a0\u672c\u6587\u539f\u521b\u4e8e<\/span><a href=\"http:\/\/2lin.net\/\"><span style=\"font-family: \u5b8b\u4f53;\">http:\/\/2Lin.net<\/span><\/a><span style=\"font-family: \u5b8b\u4f53;\">,\u00a0\u8f6c\u8f7d\u8bf7\u6ce8\u660e\u4f5c\u8005\u5e76\u4fdd\u6301\u6587\u7ae0\u7684\u5b8c\u6574,\u00a0\u8c22\u8c22!<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u4e0d\u60f3\u7528Delphi\u7684Indy\u63a7\u4ef6.\u00a0 \u5b9e\u5728\u662fBUG\u592a\u591a, \u800c\u4e14\u5f15\u7528\u540e,\u4f60\u7684\u7a0b\u5e8f\u5bb9\u91cf\u5c06\u5927\u91cf\u589e\u52a0 \u5728\u8003\u8651\u4e4b\u540e\u51b3\u5b9a\u4f7f\u7528\u7eafwinsock\u6765\u5199\u4e00\u4e2a\u53d1\u90ae\u4ef6\u7684\u7c7b, \u5e76\u4e14\u652f\u6301\u53d1\u9001\u9644\u4ef6. \u5728\u7f51\u4e0a&#46;&#46;&#46;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[4],"tags":[],"_links":{"self":[{"href":"https:\/\/2lin.top\/index.php?rest_route=\/wp\/v2\/posts\/81"}],"collection":[{"href":"https:\/\/2lin.top\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/2lin.top\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/2lin.top\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/2lin.top\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=81"}],"version-history":[{"count":1,"href":"https:\/\/2lin.top\/index.php?rest_route=\/wp\/v2\/posts\/81\/revisions"}],"predecessor-version":[{"id":180,"href":"https:\/\/2lin.top\/index.php?rest_route=\/wp\/v2\/posts\/81\/revisions\/180"}],"wp:attachment":[{"href":"https:\/\/2lin.top\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=81"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/2lin.top\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=81"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/2lin.top\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=81"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}