你的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对象的内存资源。
“`