unit frmail;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, IdMessage, IdBaseComponent, IdComponent, IdTCPConnection, ComCtrls,
IdTCPClient, IdMessageClient, IdSMTP, Menus, StdCtrls, Buttons, ExtCtrls,
shellapi, inifiles;type
TFrmSendMail = class(TForm)
Panel1: TPanel;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
OpenFiles: TSpeedButton;
MailTitle: TEdit;
MailContent: TMemo;
ListFile: TListBox;
StaticText1: TStaticText;
ListMail: TListBox;
Panel2: TPanel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
vSmtp: TEdit;
vPort: TEdit;
vServer: TCheckBox;
vUser: TEdit;
vPass: TEdit;
vEmail: TEdit;
InputMail: TSpeedButton;
OutMail: TSpeedButton;
SendMail: TSpeedButton;
BreakSend: TSpeedButton;
SaveSetup: TSpeedButton;
ExitSystem: TSpeedButton;
StaticText2: TStaticText;
PopupMenu1: TPopupMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
N6: TMenuItem;
N7: TMenuItem;
OpenMail: TOpenDialog;
SaveMail: TSaveDialog;
OpenFile: TOpenDialog;
IdSMTP1: TIdSMTP;
IdMessage1: TIdMessage;
StatusBar1: TStatusBar;
procedure ListFileKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure InputMailClick(Sender: TObject);
procedure OutMailClick(Sender: TObject);
procedure OpenFilesClick(Sender: TObject);
procedure vServerClick(Sender: TObject);
procedure SendMailClick(Sender: TObject);
procedure BreakSendClick(Sender: TObject);
procedure SaveSetupClick(Sender: TObject);
procedure ExitSystemClick(Sender: TObject);
procedure N1Click(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure N4Click(Sender: TObject);
procedure N6Click(Sender: TObject);
procedure N7Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormCreate(Sender: TObject);
private
function SendEmail(aAddr: string): boolean;
{ Private declarations }
public
{ Public declarations }
end;var
FrmSendMail: TFrmSendMail;implementation{$R *.dfm}procedure TFrmSendMail.ListFileKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key=VK_DELETE then
listfile.DeleteSelected;//按下键盘Delete键时删除所选的附件
end;procedure TFrmSendMail.InputMailClick(Sender: TObject);
begin
if not OpenMail.Execute then Exit;//如果没有选择文件则退出
ListMail.Items.LoadFromFile(OpenMail.FileName);//导入储存邮件地址的文本文件
end;procedure TFrmSendMail.OutMailClick(Sender: TObject);
begin
if ListMail.Items.Count = 0 then exit;
if SaveMail.Execute then
ListMail.Items.SaveToFile(SaveMail.FileName+'.txt');//将邮件地址保存到文本文件
end;procedure TFrmSendMail.OpenFilesClick(Sender: TObject);
begin
if openfile.Execute then
listfile.items.Add(openfile.filename);
end;procedure TFrmSendMail.vServerClick(Sender: TObject);
begin
if vServer.Checked=true then
begin
vUser.Enabled:=true;
vPass.Enabled:=true;
label6.Enabled:=true;
label7.Enabled:=true;
end
else
begin
vUser.text:='';
vPass.text:='';
vUser.Enabled:=false;
vPass.Enabled:=false;
label6.Enabled:=false;
label7.Enabled:=false;
end;
end;procedure TFrmSendMail.SendMailClick(Sender: TObject);
var
i: integer;
begin
if ListMail.Items.Count = 0 then
begin
showmessage('请添加收件地址!');
exit;//邮件地址不能为空
end;
if MailTitle.Text = '' then
begin
showmessage('请输入邮件主题!');
exit;//要求用户必须输入邮件主题
end; sendmail.Enabled:=False;
if vServer.Checked then //系统进行验证服务器
begin
IdSMTP1.AuthenticationType:=atLogin;
IdSMTP1.Username:=vUser.Text;
IdSMTP1.Password:=vPass.Text;
end else
begin
IdSMTP1.AuthenticationType:=atNone;
end;
IdSMTP1.Host:=vSmtp.Text;
IdSMTP1.Port:=StrToIntDef(vPort.Text, 25); //发送邮件的默认端口为25 IdSMTP1.Connect; //连接
try
Tag:=1; //设置中断标志
for i:=0 to Listmail.Items.Count-1 do
begin //循环发送邮件
if Tag = 0 then exit; //如果中断则退出发送邮件
SendEmail(ListMail.Items.Strings[i]);
IdSMTP1.Send(IdMessage1);
ListMail.ItemIndex := i;
StatusBar1.SimpleText := Format('正在发送邮件... (%d/%d) %s', [i, ListMail.Items.Count - 1, ListMail.Items.Strings[i]]);
Application.ProcessMessages;
end;
finally
Tag := 0;
IdSMTP1.Disconnect;
sendmail.Enabled:=True;
end;
StatusBar1.SimpleText:='邮件发送完成...';
end;procedure TFrmSendMail.BreakSendClick(Sender: TObject);
begin
Tag := 0; //用FrmSendMail的Tag属性作为发送中断的标志
end;
function TfrmSendmail.SendEmail(aAddr: string): boolean;
var
j:integer;
begin
IdMessage1.Body.Assign(MailContent.Lines);
IdMessage1.From.Text := vEmail.Text;
IdMessage1.ReplyTo.EMailAddresses := vEmail.Text;
IdMessage1.Recipients.EMailAddresses := aAddr;
IdMessage1.Subject := MailTitle.Text;
for j:=0 to listfile.Items.Count-1 do
begin
listfile.ItemIndex:=j;
if FileExists(listfile.Items.strings[j]) then
TIdAttachment.Create(IdMessage1.MessageParts,listfile.Items.strings[j]);
end;
//listfile.Clear;
end;procedure TFrmSendMail.SaveSetupClick(Sender: TObject);
begin
//写入配置文件sendmail.ini
with TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'config.ini') do
begin
WriteString('setup', 'smtp', vSmtp.Text);
WriteString('setup', 'port', vPort.Text);
WriteBool('setup', 'check', vServer.Checked);
WriteString('setup', 'user', vUser.Text);
WriteString('setup', 'pass', vPass.Text);
WriteString('setup', 'email', vEmail.Text);
end;
end;procedure TFrmSendMail.ExitSystemClick(Sender: TObject);
begin
close;
end;procedure TFrmSendMail.N1Click(Sender: TObject);
begin
if not OpenMail.Execute then Exit;
//如果没有选择文件则退出
ListMail.Items.LoadFromFile(OpenMail.FileName);
end;procedure TFrmSendMail.N2Click(Sender: TObject);
begin
if ListMail.Items.Count = 0 then exit;
if SaveMail.Execute then
//选择了保存文件
ListMail.Items.SaveToFile(SaveMail.FileName+'.txt');
end;procedure TFrmSendMail.N4Click(Sender: TObject);
var
s: string;
begin
s := InputBox('系统对话框', '请输入邮件地址:', '@');
if (Length(s) > 5) and (Pos('@', s) < Pos('.', s)) then
ListMail.Items.Add(s);
end;procedure TFrmSendMail.N6Click(Sender: TObject);
begin
ListMail.DeleteSelected;
end;procedure TFrmSendMail.N7Click(Sender: TObject);
begin
ListMail.Clear;
end;procedure TFrmSendMail.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
action:=cafree;
end;procedure TFrmSendMail.FormCreate(Sender: TObject);
begin
//读取配置文件sendmail.ini
with TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'config.ini') do
begin
vSmtp.Text := ReadString('setup', 'smtp', '');
vPort.Text := ReadString('setup', 'port', '25');
vServer.Checked := ReadBool('setup', 'check', False);
vUser.Text := ReadString('setup', 'user', '');
vPass.Text := ReadString('setup', 'pass', '');
vEmail.Text := ReadString('setup', 'email', '');
end;
end;end.
[Warning] frmail.pas(201): Return value of function 'TFrmSendMail.SendEmail' might be undefined
[Fatal Error] frmail.pas(278): Could not create output file 'E:\SendMail\frmail.dcu'
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, IdMessage, IdBaseComponent, IdComponent, IdTCPConnection, ComCtrls,
IdTCPClient, IdMessageClient, IdSMTP, Menus, StdCtrls, Buttons, ExtCtrls,
shellapi, inifiles;type
TFrmSendMail = class(TForm)
Panel1: TPanel;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
OpenFiles: TSpeedButton;
MailTitle: TEdit;
MailContent: TMemo;
ListFile: TListBox;
StaticText1: TStaticText;
ListMail: TListBox;
Panel2: TPanel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
vSmtp: TEdit;
vPort: TEdit;
vServer: TCheckBox;
vUser: TEdit;
vPass: TEdit;
vEmail: TEdit;
InputMail: TSpeedButton;
OutMail: TSpeedButton;
SendMail: TSpeedButton;
BreakSend: TSpeedButton;
SaveSetup: TSpeedButton;
ExitSystem: TSpeedButton;
StaticText2: TStaticText;
PopupMenu1: TPopupMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
N6: TMenuItem;
N7: TMenuItem;
OpenMail: TOpenDialog;
SaveMail: TSaveDialog;
OpenFile: TOpenDialog;
IdSMTP1: TIdSMTP;
IdMessage1: TIdMessage;
StatusBar1: TStatusBar;
procedure ListFileKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure InputMailClick(Sender: TObject);
procedure OutMailClick(Sender: TObject);
procedure OpenFilesClick(Sender: TObject);
procedure vServerClick(Sender: TObject);
procedure SendMailClick(Sender: TObject);
procedure BreakSendClick(Sender: TObject);
procedure SaveSetupClick(Sender: TObject);
procedure ExitSystemClick(Sender: TObject);
procedure N1Click(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure N4Click(Sender: TObject);
procedure N6Click(Sender: TObject);
procedure N7Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormCreate(Sender: TObject);
private
function SendEmail(aAddr: string): boolean;
{ Private declarations }
public
{ Public declarations }
end;var
FrmSendMail: TFrmSendMail;implementation{$R *.dfm}procedure TFrmSendMail.ListFileKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key=VK_DELETE then
listfile.DeleteSelected;//按下键盘Delete键时删除所选的附件
end;procedure TFrmSendMail.InputMailClick(Sender: TObject);
begin
if not OpenMail.Execute then Exit;//如果没有选择文件则退出
ListMail.Items.LoadFromFile(OpenMail.FileName);//导入储存邮件地址的文本文件
end;procedure TFrmSendMail.OutMailClick(Sender: TObject);
begin
if ListMail.Items.Count = 0 then exit;
if SaveMail.Execute then
ListMail.Items.SaveToFile(SaveMail.FileName+'.txt');//将邮件地址保存到文本文件
end;procedure TFrmSendMail.OpenFilesClick(Sender: TObject);
begin
if openfile.Execute then
listfile.items.Add(openfile.filename);
end;procedure TFrmSendMail.vServerClick(Sender: TObject);
begin
if vServer.Checked=true then
begin
vUser.Enabled:=true;
vPass.Enabled:=true;
label6.Enabled:=true;
label7.Enabled:=true;
end
else
begin
vUser.text:='';
vPass.text:='';
vUser.Enabled:=false;
vPass.Enabled:=false;
label6.Enabled:=false;
label7.Enabled:=false;
end;
end;procedure TFrmSendMail.SendMailClick(Sender: TObject);
var
i: integer;
begin
if ListMail.Items.Count = 0 then
begin
showmessage('请添加收件地址!');
exit;//邮件地址不能为空
end;
if MailTitle.Text = '' then
begin
showmessage('请输入邮件主题!');
exit;//要求用户必须输入邮件主题
end; sendmail.Enabled:=False;
if vServer.Checked then //系统进行验证服务器
begin
IdSMTP1.AuthenticationType:=atLogin;
IdSMTP1.Username:=vUser.Text;
IdSMTP1.Password:=vPass.Text;
end else
begin
IdSMTP1.AuthenticationType:=atNone;
end;
IdSMTP1.Host:=vSmtp.Text;
IdSMTP1.Port:=StrToIntDef(vPort.Text, 25); //发送邮件的默认端口为25 IdSMTP1.Connect; //连接
try
Tag:=1; //设置中断标志
for i:=0 to Listmail.Items.Count-1 do
begin //循环发送邮件
if Tag = 0 then exit; //如果中断则退出发送邮件
SendEmail(ListMail.Items.Strings[i]);
IdSMTP1.Send(IdMessage1);
ListMail.ItemIndex := i;
StatusBar1.SimpleText := Format('正在发送邮件... (%d/%d) %s', [i, ListMail.Items.Count - 1, ListMail.Items.Strings[i]]);
Application.ProcessMessages;
end;
finally
Tag := 0;
IdSMTP1.Disconnect;
sendmail.Enabled:=True;
end;
StatusBar1.SimpleText:='邮件发送完成...';
end;procedure TFrmSendMail.BreakSendClick(Sender: TObject);
begin
Tag := 0; //用FrmSendMail的Tag属性作为发送中断的标志
end;
function TfrmSendmail.SendEmail(aAddr: string): boolean;
var
j:integer;
begin
IdMessage1.Body.Assign(MailContent.Lines);
IdMessage1.From.Text := vEmail.Text;
IdMessage1.ReplyTo.EMailAddresses := vEmail.Text;
IdMessage1.Recipients.EMailAddresses := aAddr;
IdMessage1.Subject := MailTitle.Text;
for j:=0 to listfile.Items.Count-1 do
begin
listfile.ItemIndex:=j;
if FileExists(listfile.Items.strings[j]) then
TIdAttachment.Create(IdMessage1.MessageParts,listfile.Items.strings[j]);
end;
//listfile.Clear;
end;procedure TFrmSendMail.SaveSetupClick(Sender: TObject);
begin
//写入配置文件sendmail.ini
with TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'config.ini') do
begin
WriteString('setup', 'smtp', vSmtp.Text);
WriteString('setup', 'port', vPort.Text);
WriteBool('setup', 'check', vServer.Checked);
WriteString('setup', 'user', vUser.Text);
WriteString('setup', 'pass', vPass.Text);
WriteString('setup', 'email', vEmail.Text);
end;
end;procedure TFrmSendMail.ExitSystemClick(Sender: TObject);
begin
close;
end;procedure TFrmSendMail.N1Click(Sender: TObject);
begin
if not OpenMail.Execute then Exit;
//如果没有选择文件则退出
ListMail.Items.LoadFromFile(OpenMail.FileName);
end;procedure TFrmSendMail.N2Click(Sender: TObject);
begin
if ListMail.Items.Count = 0 then exit;
if SaveMail.Execute then
//选择了保存文件
ListMail.Items.SaveToFile(SaveMail.FileName+'.txt');
end;procedure TFrmSendMail.N4Click(Sender: TObject);
var
s: string;
begin
s := InputBox('系统对话框', '请输入邮件地址:', '@');
if (Length(s) > 5) and (Pos('@', s) < Pos('.', s)) then
ListMail.Items.Add(s);
end;procedure TFrmSendMail.N6Click(Sender: TObject);
begin
ListMail.DeleteSelected;
end;procedure TFrmSendMail.N7Click(Sender: TObject);
begin
ListMail.Clear;
end;procedure TFrmSendMail.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
action:=cafree;
end;procedure TFrmSendMail.FormCreate(Sender: TObject);
begin
//读取配置文件sendmail.ini
with TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'config.ini') do
begin
vSmtp.Text := ReadString('setup', 'smtp', '');
vPort.Text := ReadString('setup', 'port', '25');
vServer.Checked := ReadBool('setup', 'check', False);
vUser.Text := ReadString('setup', 'user', '');
vPass.Text := ReadString('setup', 'pass', '');
vEmail.Text := ReadString('setup', 'email', '');
end;
end;end.
[Warning] frmail.pas(201): Return value of function 'TFrmSendMail.SendEmail' might be undefined
[Fatal Error] frmail.pas(278): Could not create output file 'E:\SendMail\frmail.dcu'
是不是 路径不对?SendEmail 函数 没看到代码部分……
帖出 frmail.pas 部分
你的路径不存在,或者有了frmail.dcu文件,有保护,不能覆盖。