D7如何写一个发送邮件的程序?(200分)

  • 主题发起人 主题发起人 houtor
  • 开始时间 开始时间
H

houtor

Unregistered / Unconfirmed
GUEST, unregistred user!
用D7如何写发送邮件的程序,请指教。
 
用D7中自带的Indy控件包就可以了呀,你上网找一下Indy的Demo吧。
 
搜一搜DFW离线数据包,有很多例程
 
http://www.2ccc.com
http://www.delphifans.com
上面有很多可以下载的源代码,然后你修改一下就适合你自己的风格就OK了。
技术交流QQ:136293586
 
还是上www.2ccc.com 上找个例子吧
DFW离线数据包,可能有点大
呵呵
 
BBS上有很多,我以前的贴子你也可以看看,发送邮件就是INDY就OK了,下面是部分代码
procedure TForm1.Button2Click(Sender: TObject);
var
AMsg :TIdMessage;
SMTP: TIdSMTP;
begin
AMsg :=TIdMessage.Create(self);
with AMsg do
begin
Body.Text :='这里是信件内容';
From.Text :='lixh99@126.com';
Recipients.EMailAddresses := 'lixh1999@163.com'; {收件人地址}
Subject := 'test'; { 标题 }
Priority := TIdMessagePriority(1); { 优先级 }
CCList.EMailAddresses := ''; { 抄送 }
BccList.EMailAddresses := ''; { 暗送 }
ReceiptRecipient.Text := 'lixh99@126.com';
SMTP.AuthenticationType := atLogin;
SMTP.Username:= 'lixh99';
SMTP.Password := '888888';
{General setup}
SMTP.Host := 'smtp.126.com';
SMTP.Port := 25;
SMTP.Connect();
try
SMTP.Send(AMsg);
finally
SMTP.Disconnect;
end;
AMsg.Free();
showmessage('过程完成');
end;
 
怎么老是出现“bad sequence of commands”这样的错误呀?
 
挺多人问的。写发邮件没有价值
 
发邮件不需要用到POP3协议,Smtp指令:
hello <domain>
Mail From :<recevse-path>发送者
Rcpt To:<forward-path>接收者
Data 发邮件数据
Reset
Noop
Turn 角色切换
Quit
Vrfy <string>验证用户名
Expn <string>展开邮件表目
help <string>
初始化:
mail send soml,saml
发邮件小例子:
procedure TForm1.FormCreate(Sender: TObject);
begin{连接到Smtp服务器}
SMTP1.Connect('210.79.245.3', '25');
end;
procedure TForm1.Button1Click(Sender: TOjbect);
begin
{发送邮件}
with SMTP1 do
begin
DocInput.Headers.Clear;
DocInput.Headers.Add('To', ToAddress);//name@PoP3服务器地址
DocInput.Headers.Add('From', FromAddress);
DocInput.Headers.Add('Subject',Subject);
DocInput.Headers.Add('Content-Type', 'TEXT/PLAIN charset=US-ASCII');}
SendDoc('smtp://210.79.245.3:25',DocInput.Headers,Memo1.text,'','');
end;
end;
 
去看demo吧, 网上有很多源码.
 
那些都有出错的呀,发不出去。
 
有我源代码100元
 
到这里去下载看看吧,能用,我试过了"http://www.2ccc.com/go.asp?id=2675&url=http://downloads.2ccc.com/general/internet_lan/gffnxk_MailProcess_V1.2.rar"
 
用INDY控件,最好别用DELPHI自己带的,用网上下载的INDY好用些。
程序如下:

unit email_Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
IdMessageClient, IdSMTP, StdCtrls, IdMessage;

type
TForm1 = class(TForm)
IdSMTP1: TIdSMTP;
Button1: TButton;
IdMessage1: TIdMessage;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
Attachment_name:String;
begin
Attachment_name:='d:/attachment.rar';
IdSMTP1.AuthenticationType:=atLogin;
IdSMTP1.Host:='smtp.sohu.com';
IdSMTP1.Port:=25;
IdSMTP1.Username:='user';
IdSMTP1.Password:='pw';
IdMessage1.Body.add('测试中文4');
IdMessage1.From.Text:='abc@a.com';
IdMessage1.Recipients.EMailAddresses:='w@sina.com';
//IdMessage1.CCList.EMailAddresses := edtCC.Text;// {CC}
//IdMessage1.BccList.EMailAddresses:='w@exel.com' //{BBC}
IdMessage1.Subject:='This is a test !';
if FileExists(Attachment_name) then TIdAttachment.Create(IdMessage1.MessageParts,Attachment_name);
try
IdSMTP1.Connect(-1);
IdSMTP1.Send(IdMessage1);
showmessage('OK');
except
showmessage('Error !');
end;
IdSMTP1.Disconnect;
end;

end.
 
怎么老是出现“bad sequence of commands”这样的错误呀?
用上这个
1、
找到procedure TIdSMTP.Send(AMsg: TIdMessage);这个函数将SendCmd('RSET');这行注销
2、IdMessageCoderMIME这个单元,将下面的常量IndyMIMEBoundary,IndyMultiPartAlternativeBoundary,IndyMultiPartRelatedBoundary改成你自己需要的就可以了。

在你project所在文件夹中新建一个文件夹,将IdMessageClient.pas,IdSMTP,IdMessageCoderMIME.pas这两个文件copy到这个新建的文件夹中,然后按我所说的方法修改这两个文件,最后在IDE中打开Project->Options->Directories/Conditionals->Search path中加入这个新建的文件夹所在的路径,重新编译就可以了。
 
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, IdMessage, IdBaseComponent, IdComponent, IdTCPConnection,
IdTCPClient, IdMessageClient, IdSMTP, StdCtrls, WinSkinData;

type
TForm1 = class(TForm)
GroupBox1: TGroupBox;
Label1: TLabel;
Label2: TLabel;
Edit1: TEdit;
Edit2: TEdit;
GroupBox2: TGroupBox;
Label3: TLabel;
Label4: TLabel;
Edit3: TEdit;
Edit4: TEdit;
GroupBox3: TGroupBox;
Label5: TLabel;
Label6: TLabel;
Edit5: TEdit;
Edit6: TEdit;
Button1: TButton;
Button2: TButton;
GroupBox4: TGroupBox;
Label7: TLabel;
Edit7: TEdit;
Label8: TLabel;
memo1: TMemo;
GroupBox5: TGroupBox;
GroupBox6: TGroupBox;
Memo3: TMemo;
IdSMTP1: TIdSMTP;
IdMessage1: TIdMessage;
OpenDialog1: TOpenDialog;
ListBox1: TListBox;
SkinData1: TSkinData;
procedure Button1Click(Sender: TObject);
procedure IdSMTP1Connected(Sender: TObject);
procedure IdSMTP1Disconnected(Sender: TObject);
procedure IdSMTP1WorkBegin(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCountMax: Integer);
procedure IdSMTP1Work(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCount: Integer);
procedure IdSMTP1WorkEnd(Sender: TObject; AWorkMode: TWorkMode);
procedure Button2Click(Sender: TObject);
procedure ListBox1KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
if (trim(edit1.Text)='') or (trim(edit2.Text)='') then
begin
showmessage('请设置服务器属性');
edit2.Text:='25';
edit1.SetFocus;
exit;
end;
if (trim(edit3.Text)='') or (trim(edit4.Text)='') then
begin
showmessage('请输入发信人或收件人地址');
edit3.SetFocus;
exit;
end;
if (trim(edit5.Text)='') or (trim(edit6.Text)='') then
begin
showmessage('请正确输入用户登陆信息');
edit5.SetFocus;
exit;
end;
idmessage1.Subject:=edit7.Text;
idmessage1.Body.Assign(memo1.Lines);
idmessage1.From.Address:=trim(edit4.Text);
idmessage1.Recipients.EMailAddresses:=trim(edit3.Text);
idsmtp1.Host:=trim(edit1.Text);
idsmtp1.Port:=strtoint(trim(edit2.Text));
idsmtp1.Username:=trim(edit5.Text);
idsmtp1.Password:=trim(edit6.Text);

memo3.Lines.Add('准备连接到服务器!'+edit1.Text);
try
idsmtp1.Connect();
except
begin
memo3.Lines.Add('无法连接到服务器!'+edit1.Text);
exit;
end;
end;
if (idsmtp1.AuthSchemesSupported.IndexOf('LOGIN')<> -1) then
begin
Memo3.Lines.Add('服务器要求验证');
idsmtp1.AuthenticationType:=atlogin;
memo3.Lines.Add('开始验证');
try
if idsmtp1.Authenticate then
Memo3.Lines.Add('验证通过')
else
Memo3.Lines.Add('验证失败');
except
memo3.Lines.Add('服务器验证失败');
idsmtp1.Disconnect;
exit;
end;
end
else
begin
memo3.Lines.Add('服务器不要求验证');
end;
try
idsmtp1.Send(idmessage1);
except
memo3.Lines.Add('发送失败');
end;
idsmtp1.Disconnect;
end;

procedure TForm1.IdSMTP1Connected(Sender: TObject);
begin
memo3.Lines.Add('已连接到服务器'+edit1.Text);
end;

procedure TForm1.IdSMTP1Disconnected(Sender: TObject);
begin
memo3.Lines.Add('断开连接');
end;

procedure TForm1.IdSMTP1WorkBegin(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCountMax: Integer);
begin
memo3.Lines.Add('开始发送邮件');
end;

procedure TForm1.IdSMTP1Work(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCount: Integer);
begin
memo3.Lines.Add('正在发送邮件');
end;

procedure TForm1.IdSMTP1WorkEnd(Sender: TObject; AWorkMode: TWorkMode);
begin
memo3.Lines.Add('发送邮件完毕');
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
if OpenDialog1.Execute then
begin
Tidattachment.Create(idmessage1.MessageParts,openDialog1.FileName);

listbox1.Items.Add(Opendialog1.FileName);
end;
end;

procedure TForm1.ListBox1KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
var
index:integer;
begin
if listbox1.ItemIndex=-1 then
Exit;
if key<>VK_DELETE then
Exit;
index:=listbox1.ItemIndex;
idmessage1.MessageParts.Delete(index);

listbox1.Items.Delete(index);
end;

end.

控件indy里面都有
 
我用源码 50元
 
开玩笑.那是因为现在很多邮件服务器反垃圾处理了

与以前的 smtp 有些不同.可能你要改源码.

看一下 esmtp 就明白了.
 
多人接受答案了。
 
后退
顶部