您的位置 首页 知识

Delphi 2025实现邮件获取及窗口文字提取技巧

你的SendMail经过在定义是没有定义参数: “`plaintext procedure Sen…

你的SendMail经过在定义是没有定义参数:

“`plaintext

procedure SendEmail(Sender: TObject);

“`

可是在下面却又需要传入参数:

“`plaintext

procedure TForm1.SendEmail(Recipient,Address:string);

“`

我估计你这个SendMail的经过是直接Copy人家的。这样肯定会出难题的。

我根据你的意思写了一个差不多的程序。该程序能够读取到程序目录下一个’rf.txt’文件,并将该文件的内容作为将要发送的邮件内容。

需要在窗体中放置一个TIDMessage控件,一个TIdSMTP控件

“`plaintext

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, IdMessage, IdBaseComponent, IdComponent,

IdTCPConnection, IdTCPClient, IdMessageClient, IdSMTP;

type

TForm1= class(TForm)

SMTP: TIdSMTP;

IdMsgSend: TIdMessage;

Button1: TButton;

procedure Button1Click(Sender: TObject);

procedure sendmail(sbody:TStrings);

private

Private declarations

public

Public declarations

end;

var

Form1: TForm1;

implementation

$R.dfm

procedure TForm1.Button1Click(Sender: TObject);

var

Email: Textfile;

Bodytxt: tstrings;

s:string;

begin

Bodytxt:= TStringList.Create;

try

AssignFile(Email,extractfilepath(application.ExeName)+’rf.txt’);

reset(Email);

while not EOF(Email) do

begin

readln(Email, s);

Bodytxt.Add(s);

end;

SendMail(Bodytxt);//调用SendMail,传入邮件内容BodyTxt

finally

closefile(email);

end;

ShowMessage(‘SendMail OK!’);

end;

procedure TForm1.sendmail(sBody: TStrings);

begin

with IdMsgSend do

begin

Body:= sBody;//邮件内容

From.Text:=’xxxx’;//发件人×××

Recipients.EMailAddresses:=’xxxx’; To: header//收件人×××

Subject:=’yyyy’;//邮件主旨

tidattachments.Create(IdMsgSend.MessageParts,’D:ExcelTest.xls’);//发送附件,可发送多个

SMTP.Host:=’smtp.’;//主机名称×××

SMTP.Port:= 25;// PORT

SMTP.Connect;

try

try

SMTP.Send(IdMsgSend);

except

end;

finally

SMTP.Disconnect;

end;

end;

小编觉得符号示意;可能还有其他未提及的事项。如遇到任何疑问或难题,随时与我联系。下面内容为提示:

关于 `IdSMTP….:= atLogin`这句代码出错的常见缘故和解决技巧:

针对你遇到的错误,可能是由于你使用的Indy版本与代码的版本不匹配。例如,在Indy 10版本中,上述代码确实存在错误。具体来说,IdSMTP控件在Indy 10中没有AuthenticationType属性,也没有atLogin值。正确的写法应该是类似下面内容方式:`IdSMTP1.AuthType:=satDefault;`。请注意核对并调整你的代码以适应你的Indy版本。

关于QQ邮箱的SMTP设置和使用注意事项:

QQ邮箱的SMTP功能需要单独开启,并且使用独立的密码等设置。其端口号不是通常的25,而是使用465和587。在登录时,。如果你打算使用QQ邮箱进行邮件发送,请确保遵循这些设置和注意事项。

电子邮件相关操作函数详解

邮件发送时刻:EmailTime

邮件深入了解:EmailSubject

邮件正式内容:EmailBody

发送者地址:EmailSendAddress

返回错误信息:ErrMsg

定义函数Mail_GetEmailInfo,接收参数包括邮件索引号Index,以及通过引用的方式传递的EmailTime等字符串变量,并返回一个布尔值。该函数的功能是获取邮件的详细信息。

函数内部定义了一些变量,包括用于连接POP3服务器的POP3对象、SSL处理对象OpenSSLHandler、邮件对象IdMessage等。还有一个ConnectOK变量用于表示是否成功连接到POP3服务器。

实现部分包括几许函数和经过:

1. ConnectPOP3Server函数:用于连接POP3服务器。如果已连接则断开连接,接着设置主机名、账户名和密码,并尝试重新连接。连接成功则设置Result为True,否则设置Result为False并返回错误信息。

2. DisconnectPOP3Server经过:断开与POP3服务器的连接,并将ConnectOK设置为False。

3. Mail_GetCountA函数:获取邮件数量。如果未连接到服务器则直接退出。尝试使用POP3服务器检查邮件数量,如果成功则返回邮件数量,否则返回错误码-10。

4. Mail_Delete函数:删除指定索引号的邮件。如果未连接到服务器则直接退出。尝试使用POP3服务器删除邮件,如果成功则设置Result为True。

接下来的函数Mail_GetEmailInfo是核心部分,用于获取邮件的详细信息。函数检查是否已连接到服务器,接着清除邮件对象IdMessage的内容。通过POP3服务器检索指定索引号的邮件,获取邮件的主题、发送者地址、发送时刻等信息,并保存到对应的变量中。如果有附件,则遍历附件并处理。最后根据获取信息的成功与否设置返回值。

“`plaintext

若IdMessage的MessageParts中的Items里的第i项是TidText类型,则进行下面内容操作:

初始化EmailBody变量,并将IdMessage.MessageParts.Items中的第一个项目(假定为TidText类型)的Body文本内容赋值给它。如果IdMessage的MessageParts中的Items中的第i项是TIdAttachment类型,则执行下面内容步骤:

获取附件的文件名,并将其赋值给EmailAttachFileName变量。从当前程序的参数字符串中获取文件路径,并保存到FileName变量中。创建或确认临时文件夹存在于路径下的’TMP’目录中。构造完整的附件文件路径并保存到FileName变量中。调用TIdAttachment对象的SaveToFile技巧,将附件保存到指定的FileName路径中。接着继续处理下一个附件项。

如果以上经过顺利完成,最终将Result设置为True。如果在执行经过中发生异常,则进行异常处理并结束流程。在初始化部分,创建TIdPOP3和TIdSSLIOHandlerSocketOpenSSL对象,并设置SSL加密选项为sslvTLSv1(或其他版本如sslvSSLv23等)。将POP3的IOHandler设置为OpenSSLHandler,设置POP3的端口号为加密端口(通常为995),并启用隐式TLS。同时设置读取超时和连接超时时刻(例如设置为5分钟)。创建IdMessage对象,并设置一个ConnectOK标志用于跟踪连接情形。在清理部分,释放IdMessage、POP3和OpenSSLHandler对象的内存资源。

“`

版权声明
返回顶部