我有一个需要从网络驱动器上传一些FTP的应用程序。我正在使用Indy进行操作。然后,当在网络驱动器上找到文件并成功上传到FTP服务器时,我想将同样的文件通过电子邮件发送给同事。
我使用下面的代码来实现这个功能。电子邮件可以成功发送,但是附件却无法传送。请问我的代码有什么问题?
我将文件(在FTP过程中)添加到称为EmailFiles(TStringList)的公共(表单)成员变量中,然后将其传递给一个过程。在这里,我获取文件名列表并尝试将其添加到我的TIdMessage组件中。当发送电子邮件时,没有附件……
procedure TfrmMain.SendEmail(FromMail, ToMail, Subject, Body: String;
Attachments: TStringList);
var
i: Integer;
Att : TIdAttachmentFile;
begin
Memo1.Lines.Add('');
Memo1.Lines.Add('Starting Email service...');
SMTP.Host := 'mail.*****.com';
SMTP.Username := '***UN***';
SMTP.Password := '***PW***';
try
Msg1.From.Address := FromMail;
Msg1.Recipients.EmailAddresses := ToMail;
Msg1.Subject := Subject;
Msg1.Body.Add(Body);
//Add attachment(s)
if Attachments.Count <= 0 then Memo1.Lines.Add('Warning: Cannot detect attachments for the Email...');
for i := 0 to Attachments.Count - 1 do
begin
if FileExists(Attachments[i]) then
begin
//Memo1.Lines.Add('Adding Attachment ' + Msg1.MessageParts.Items[0].FileName + '...');
Att := TIdAttachment.Create(Msg1.MessageParts, Attachments[i]);
Msg1.MessageParts.Add; //an attempt to explicitly ADD the Att object, to no avail
Memo1.Lines.Append('Added Attachment ' + Attachments[i]);
Att.Free;
end
else
begin
Memo1.Lines.Add('Could not locate file: ' + Attachments[i] + ' for Email attachment!');
end;
end;
//Try to send the message
try
SMTP.Connect;
if Msg1.MessageParts.AttachmentCount > 0 then begin
SMTP.Send(Msg1);
Memo1.Lines.Add('Sent Email successfully!');
end
else begin
if Messagedlg('Do you want to send the Email without attachments?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then
begin
SMTP.Send(Msg1);
Memo1.Lines.Add('Sent Email successfully, without attachments!');
end
else
Memo1.Lines.Add('No files attached to the Email Message - Cannot send!');
end;
except
on E:Exception do
begin
Messagedlg('Could not send the Email Message!' + #13#10 + E.Message, mtError, [mbOK], 0);
end;
end;
except
on E:Exception do
ShowMessage('Could not connect to SMTP Server' + #13#10 + E.Message);
end;
end;
Att := TIdAttachmentFile.Create(Msg1.MessageParts, Attachments[i]);
基本上修复这个问题的方法是:with TIdAttachmentFile.Create(Msg1.MessageParts) do begin FileName := Attachments[i]; end;
- T.S