用indy9.0.18元件寄送電子郵件很簡單,一般這樣就可以:
procedure SendAMail(AFromAddress,AToAddress:string;ASubject:string;<br /> ABody:string;AttachmentFileNames:array of string; ASMTP:string;ASMTPUserName:string;ASMTPPassword:string;ASMTPNeeddLogin:Boolean);<br />var<br /> vMS:TidMessage;<br /> vSMTP:TidSMTP;<br /> i:integer;<br />begin<br /> vMS:=TidMessage.Create(nil);<br /> vSMTP:=TidSMTP.Create(nil);<br /> try<br /> vMS.From.Address:=AFromAddress;<br /> vMS.From.Name:=ASMTPUserName;<br /> vMS.Recipients.Add.Address:=AToAddress;<br /> vMS.Subject:=ASubject;<br /> vMS.Body.Text:=ABody;<br /> for i:=0 to High(AttachmentFileNames) do<br /> begin<br /> TidAttachment.Create(vMS.MessageParts,AttachmentFileNames[i]);<br /> end;</p><p> vSMTP.Host:=ASMTP;<br /> vSMTP.Username:=ASMTPUserName;<br /> vSMTP.Password:=ASMTPPassword;<br /> if ASMTPNeeddLogin then vSMTP.AuthenticationType:=atlogin;<br /> vSMTP.Connect;<br /> vSMTP.Authenticate;//xxx@qq.com不需要這句也可以,xxx@163.com必須要這句<br /> vSMTP.Send(vMS);<br /> finally<br /> vSMTP.Free;<br /> vMS.Free;<br /> end;<br />end;
如果發送時需要登入,就傳ASMTPNeedLogin為true,ASMTP使用外部服務商提供的地址,或者在區域網路內使用你的Exchanged Server的地址。需要注意的是:
1、對xxx@qq.com,需要登入http://mail.qq.com,在你的郵箱設定中去開通“允許pop3/smtp收發郵件”;
2、ASMTPUserName你要注意郵件服務商如何規定的,對xxx@qq.com,只需要且只能輸入前面的xxx就可以了,而對於xxx@163.com,則只輸入xxx或者全部輸xxx@163.com都可以。
3、在代碼上,“vSMTP.Authenticate;”這句,xxx@qq.com不需要這句也可以,xxx@163.com必須要這句,否則出現“bad sequence of commands”錯誤。