delphi編寫電子郵件的製作步驟

在delphi中TNMPop控件 -------接收電子郵件,pop3
pop3協議自身命令

命令     說明
USER     向pop3服務器器傳遞用戶名
PASS     向pop3服務器器傳遞用戶密碼
STAT     獲取當前用戶的郵件數
LIST     獲取郵件標號和大小
BETR     獲取郵件的全部信息,包括郵件頭和郵件內容
TOP     獲取郵件頭
DELE     刪除指定的郵件
NOOP     空操作
QUIT     退出主機對話

控件屬性
1、       AttachFilePath     
指定附件存放路徑,爲空指當前路徑
2、       BytesRecvd       
收了多少個字節
3、       BytesTotal 
本次傳輸總的字節數
4、       Connected
與pop3服務器建立了連接則返回true,否則爲false
例:
if not nmpop31.connect then
begin
  nmpop31.port:=110;
  nmpop31.userid:=’username’;
  nmpop31.password:=’userpassword’;
  nmpop31.connect; 
end;
5、       DeleteOnRead
如果屬性爲true時,則當郵件下載後從服務器刪除掉
6、       host
服務器主機名或ip地址
7、       LocalIp
返回客戶的IP地址,如果有多個,則只返回第一個。
8、       mailcount
返回郵件數
9、       mailmessage
調用了getmailmessage方法後,該屬性返回檢索到的郵件信息,它是一個類
包含了以下幾部份:
l     Attachments:這是個tstringlist對象:包含了接收到郵件的附件名稱
l     Body: 這是個tstringlist對象:包含了接收到郵件的正文
l     From:發件人的e_mail地址
l     Head: 這是個tstringlist對象,包含了郵件頭的標題
l     MessageID:郵件的識別號
l     Subject:郵件的主題
10、password,port,userid
  向pop3服務器提交的用戶密碼,協議端口,用戶識別名
11、RemoteIP
  pop3服務器的IP地址
12、ReportLevel
指示了與pop3服務器的通話狀態信息?
13、Status
  返回當前狀態信息
14、Summary
是一個類,包含郵件的統計信息。其中包含了以下幾部份:
l     Bytes郵件的字節數;
l     From 發件人的郵件地址
l     MessageID郵件的編號
l     Subject這是郵件的主題
15、TimeOut
  單位毫秒數,當Socket在這裏所指定時間內沒有響應,將會觸發異常。
16、TransactionReply
  返回上次命令執行結果。
******************************************************************
控件方法:
1、     Abort
中止此次接收,且斷開與Pop3服務器的連接。
2、     Connect
  與Pop3服務器的連接,但事先設好host,port,userid,password屬性。
  例:
    Nmpop31.host:=”mail.wofoo.com”;
    Nmpop31.port:=110;
    Nmpop31.reportlevel:=1;
    Nmpop31.timeout:=1000;
    Nmpop31.connect;
3、     DeleteMessage(MailNumber:integer)
從Pop3服務器刪除一個郵件號爲MailNumber的郵件。注:這裏並沒有真正刪除,當在斷開邊接之前調用reset,將被恢復。
4、     Disconnect
斷開與Pop3服務器的連接。
5、     GetMailMessage(MailNumber:integer)
  從Pop3服務器下載一個郵件號爲MailNumber的郵件
6、     GetSummary(MMailNumber:integer)
得到一個郵件信息,其郵件號爲MailNumber。
7、     List
從郵件服務器檢索一個列表。該列表包含每一封郵件的編號和字節數,列表中的每一項將觸發一個Onlist事件。
8、     Reset 
將恢復服務器中所有標記爲已刪除的郵件。
**************************************************************
控件事件:
1、     OnAuthenticationFailed (Var handled:Boolean)
登陸服務器時,用戶名與密碼不能通過,將觸發該事件。
更正了後,如果將Handled參數設爲True,將再登陸一次。
2、     OnAuthenticationNeeded(Var handled:Boolean)
如果某個操作需要驗證用戶的身份,將觸發這個事件。
例:
procedure Tform1.NMPOP31 AuthenticationNeeded(Var handled:Boolean);
var newpass,newid:string;
begin
newpass:= NMPOP31 .password;
newid:= NMPOP31.userid;
inputquery(‘Authentication Need ‘,’ input userid’,newid);
inputquery(‘Authentication Need ‘,’ input password’ ,newpass);
NMPOP31.userid;:=newid;
NMPOP31.password:=newpass;
Handled:=true;
end;
3、     OnConnect
當與服務器連接成功時將顯示觸發該事件。
4、     OnConnectFailed
當與服務器連接失敗時將顯示觸發該事件
5、     OnConnectRequired (Var handled:Boolean)
Pop控件大多數方法是在與服務器連接成功後纔會有意思。如果調用方法時與服務器連接不成功時,將觸發該事件。此時應重新調用connect方法,且將Handled參數設爲True;
6、     OnDisconnect
當與服務器斷開連接時將觸發該事件,如果要訪問VCL控件,最好先判斷它存不存在。
7、     OnFailure
如果刪除該郵件出錯時,觸發該事件。
8、     OnInvalidHost
與主機連接時發現指定主機名不存在,觸發該事件。
9、OnList
  當程序調用list過程時,每檢索到一項將會觸發該事件一次。MSG參數是郵
  件編號,Size參數是郵件字節數。
10、OnPacketRecvd
  每收到一個數據塊時,將觸發一次該事件。可用BytesTotal和BytesRecvd屬性顯示郵件接收進度。
11、OnReset
  當程序調用Reset過程恢復已經有刪除標記的郵件時,觸發該事件。
12、OnRetrieveStar
  當程序調用GetMailMessage過程或GetSummary過程開始檢索數據時將會觸發該事件。
13、OnRetrieveEnd
  當程序調用GetMailMessage過程或GetSummary過程檢索數據成功時將會觸發該事件

實例1:
程序如下:
procedure TfrmMail.FormCreate(Sender:Tobject);
begin
//服務器信息
edtIP.text:=’mail.wofoo.com’
edtPort.text:=’110’;
//用戶信息
edtUser.text:=’mis’;
edtpass.passwordchar:=’*’;
edtpass.text:=’123’;
//其它
edtmail.text:=’’;
edtsubject.text:=’’;
memo1.lines.clear;
//pop3控件參數設置
NMPOP31.deleteonread:=false;
NMPOP31.timeout:=5000;
NMPOP31.deleteonread:=false;
NMPOP31.Reportlevel:=Status_Basic;
//顯示其它選項
memo1.scrollbars:=ssboth;
end;
首先要登陸服務器,在btnConnect的onclick事件中實現。代碼如下:

procedure TfrmMail. btnConnect click(Sender:Tobject);
begin
NMPOP31.host:=edtip.text;
NMPOP31.port:=strtoint(edtport.text);
NMPOP31.userid:=edtuser.text;
NMPOP31.password:=edtpass.text;
NMPOP31.connect;
end;
登陸成功處理:
procedure TfrmMail. NMPOP31 Connect (Sender:Tobject);
begin
  showmessage(‘連接成功’);
end;
登陸成功失敗處理:
procedure TfrmMail. NMPOP31 Connect (Sender:Tobject);
begin
  showmessage(‘連接失敗’);
end;
登陸成功就可獲得郵件信息了。按獲得郵件按鈕進行處理。
procedure TfrmMail. btnGetMailclick(Sender:Tobject);
begin
NMPOP31.list;
end;
用了list方法,當檢索到信息時將觸發OnList事件。這個事件的參數含有郵件大小等信息。將這些信息添加到listView控件中顯示出來。
procedure TfrmMail. NMPOP31list (MSG,size:integer);
var 
listitem1:tlistitem;
begin
  listitem1:=listview1.items.add;
  listitem1.caption:=intostr(msg);
  listitem1.subitems.add(intostr(size));
end;
在實際使用過程中,有可能用戶在沒有登陸服務器之前就使去獲取郵件信息了
這時NMPOP3將觸發OnConnectionRequired事件。這時可在這裏要求重新連
服務器。
procedure TfrmMail. NMPOP31ConnectionRequired (var handled:boolean);
begin
handled:=true;
NMPOP31.connect;
end;
用戶可在listview控件中選擇要看的郵件。
procedure TfrmMail. Listview1Click(var handled:boolean);
var index,I:integer;
begin
if listview1.selected:=nil then 
  exit;
//獲取所選的標識
index:=strtoint(listview1.selected.capton);
//獲取郵件
NMPOP31.GetMessage(index);
//獲取郵件信息
edtmail.text:=nmpop31.mailmessage.from;
edtsubject.text:= nmpop31.mailmessage.subject;
memo1.lines.assign(nmpop31.mailmessage.body);
end;
其它信息顯示
procedure TfrmMail. NMPOP31Success (sender:tobject);
begin
statusbar1.simpletext:=’操作成功’;
end;
procedure TfrmMail. NMPOP31Failure (sender:tobject);
begin
statusbar1.simpletext:=’操作失敗’;
end;
procedure TfrmMail. NMPOP31ConnectionFailed (sender:tobject);
begin
showmessage(‘連接失敗’);
end;
procedure TfrmMail. NMPOP31InvalidHoat(var handled:boolean);
begin
showmessage(‘無效的主機’);
handled:=true;
end;
最後退出郵件服務器
procedure TfrmMail. btnDisConnectonClick(sender:tobject);
begin
NMPOP31.disconnect;
end;
procedure TfrmMail. NMPOP31Disconnect (sender:tobject);
begin
statusbar1.simpletext:=’斷開連接’;
end;


發送郵件NMSMTP


SMTP協議自身命令

命令     說明
HELO     客戶機用HELO命令向服務器標識身份
MAIL     初始化郵件傳輸
RCPT     在MAIL命令後,標識單個郵件接收人
NOOP     無操作,服務器響應OK
DATA     RCPT之後(通常),表示所有郵件接收人已標識,初始化數據傳輸
HELP     客戶機可使用此命令查詢服務器支持什幺命令
QUIT     會話結束

NMSMTP
屬性
1、     ClearParams屬性
爲真時,郵件發送完畢會把PostMessage屬性的值清空
2、     EncodeType
指定郵件編碼方式。uuMIME—MIME 編碼;unCode---UUEncoding編碼
3、     FinalHeader
指定最後的消息頭標。
4、Host
SMTP服務器的主機名或IP地址。
5、LocalIP
  返回客戶機的IP地址,若有多個只返回一個。
6、Port
  指定服務器的端口
7、PostMessage
  是一個類,存儲要發送的郵件信息。具體如下:
l     FromName:發件人名稱
l     FromAdress:發件人email地址。
l     ReplayToAdress:回覆地址
l     Orgranization:發件人所在地址。
l     LocalProgram:發件人所用的客戶程序
l     ToAdress:是Tstringlist對象,收件人的接收地址。
l     ToCC: Tstringlist對象,抄送的email地址。
l     ToBCC: Tstringlist對象,密送的email地址。
l     Attachments: Tstringlist對象,指定的附件。
l     Body: Tstringlist對象,郵件正文。
l     Subject:郵件主題。
l     Date:郵件發送日期,爲空指當前日期。
9、     ReplayNumber
只讀屬性,返回smtp服務器響應應答信息。
10、status
  當前狀態信息。
11、Timeout
  毫秒級別的單位,如果規定時間Socket沒有響應,觸發異常。
12、TransactionReply
  返回上一次命令的執行結果。
13、UserID
  指定的用戶名。

控件方法
  
1、     Abort
中止發送,斷開與smtp服務器的連接
2、     ClearParameters
清空PostMessage。
3、     Connect
登陸SMTP服務器,注意要先設好host,port屬性。Host非法觸發OnValidHost事件,連接失敗觸發OnConnectFalied事件。如果連接成功觸發OnConnect事件。
4、     DisConnect
斷開與服務器的連接。觸發OnDisconnect事件。
5、     ExpandList(MailList:string):Boolean;
該過程在SMTP服務器上檢索一個郵件列表,如果有觸發OnMailListReturn事件,可以取得這個郵件列表。
6、     SendMail
發送郵件,事先要設好host,port,PostMessage
7、     Verify(UserName:string):Boolean;
檢驗用戶名是否合法,合法爲True;

事件:
1、     OnAttachmentNotFound
如果沒找到postMessage所指定的郵件,該事件觸發,同時有傳進附件名的參數。
2、OnAuthenticationFailed
當SMTP需要用戶名和口令才能發送,而事先沒給用戶名和密碼或給出的有錯,該事件觸發。
3、OnConnect
  與服務器連接成功後,觸發該事件。
4、     OnConnectFailed
與服務器連接失敗,觸發該事件。
5、     OnDisconnect
斷開與服務器連接觸發該事件。
6、     OnEnacodeStart
當附件開始編碼時,觸發該事件
7、     OnEnacodeEnd
當附件編碼結束時,觸發該事件。參數FileName,初編碼的附件。
8、     OnFailure
當郵件發送不成功時,觸發該事件
9、     OnHeaderIncomplete
發送郵件時,當postmessage給出的頭標信息不完整時,觸發
10、OnHostResolved與OnIvalidHost
  當服務器的主機名找到觸發該事件,否則觸發OnIvalidHost
11、OnMailListReturn
  當程序調用ExpandList,每檢索到一個email地址,就觸發該事件一次。
12、OnRecipientNotFound
  如果PostMessage所指定的收件人不成再時,觸發該事件。
13、OnSendStart
  郵件發送開始觸發該事件。
14、OnSuccess
  郵件發送成功觸發該事件。

實例:
procedure TfrmSendMail.btnSendClick(Sender:Tobject);
begin
if edtAdress.text=’’ then 
  exit;
if edtport.text=’’ then 
  exit;
if edtSendusertext=’’ then 
  exit;
if edtReceiver.text=’’ then 
  exit;
NMSMTP1.host:=edtAdress.text;
NMSMTP1.port:=strtoint(edPort.text);
NMSMTP1.UserId:=edtSenduser.text;
NMSMTP1.conncet;
end;
procedure TfrmSendMail. NMSMTP1 ConnectionFailed(Sender:Tobject);
begin
showmessage(‘連接失敗’);
end;
procedure TfrmSendMail. NMSMTP1 Connection (Sender:Tobject);
begin
sendmessage(Handle,WM_LOGIN,0,0);//自定義消息息傳送。產生WM_LOGIN事件
end;
procedure TfrmSendMail. WMLOGIN (var MSG:TWM);//處理自定義消息
begin
//這裏發送郵件。
NMSmTP1.postmessage.fromadress:=edtuserMail.text;
NMSmTP1.postmessage.fromname:=edtsenderuser.text;
NMSmTP1.postmessage.subject:=edtsubject.text;
NMSmTP1.postmessage.toadress.add(edtreceiver.text); 
NMSmTP1.postmessage.attachments.addstrings(listbox1.items);
NMSmTP1.postmessage.body.assign(memo1.lines);
NMSMTP1.SENDMAIL;
NMSMTP1.DISCONNCET;
end;  
發佈了14 篇原創文章 · 獲贊 3 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章